ランサーズ等のサービスを開発・運用する中で得た知識やノウハウを紹介しています。

thumbnail

Labels:  DevOps 投稿者:takayuki

リリースシステムを刷新したはなし

インフラエンジニアの平塚です。
今回は昨年紹介しましたランサーズのリリースシステムを刷新したのでご紹介します。

背景

 

理由としては増えてゆくサービスを個別にリリースしていくのは手間がかかり、
これを1つのWeb UIからリリースできるようにすることでリリースを容易にしたい。
また、スケールアウト時に最新ビルド済みソースコードを取得したいと思ったからです。

 

これまでの課題

  • リリース対象のIPアドレスをconfigファイルに直接記述していてスケールする度に修正が必要
  • https://www.lancers.jp以外はCLIベース又は手動でのリリースを行なっていたので手順を確認しながらリリースする必要があった。

これまでと現在の比較

簡単にこれまでと現在のリリースシステムの違いを説明します。

【以前】

・社内オンプレミスサーバに構築
・fabricsを使用したデプロイ
・デプロイ対象はhttps://www.lancers.jpのみ
・buildは手動実行

old

 

【現在】

・AWS EC2上にリリースシステム構築
・Ansible + rsyncを使用したデプロイ
・ランサーズが運営するすべてのサービスのリリースをWeb UIにて実行可能
・リリースシステム上でDockerコンテナを立ち上げ、コンテナ内で自動build

new

 

Ansible、rsync、Dockerをどのように使ったのか

【Ansible】

リリース対象のサーバにシェルスクリプト配布し、そのシェルスクリプトを実行する。

※このシェルスクリプトにはrsyncを実行する処理が書かれています。

【rysnc】

Ansibleで配布したシェルスクリプトは実はrsyncを実行しているだけなのです。
例えばWordPressであれば以下のようなものになります。

rsync --delete \
--exclude "wp-content/uploads/" \
--exclude "wp-content/cache/" \
--exclude "wp-content/backups/" \
-avuC -e ssh XXX.XXX.XXX.XXX:/var/www/XXX/ /var/www/XXX/

ここでなぜリリースシステムからではなくリリース対象からrsyncを実行しているのかと言うと、
Amazon Linuxを使用しているので cloud-initにこのスクリプトを登録しておけば
AWSのAuto Scaling機能を使用した際、インスタンス起動時にビルド済みソースコードを
取得してきてくれるためです。

【Docker】

ソースコードは全てリリースサーバ上でgit pullを行なっていて、
リリースサーバ上でビルドも実行します。
この際問題になるのはサービス毎にプログラミング言語のバージョンが異なる場合があるので
Dockerコンテナを起動しておき、Dockerコンテナ上でビルドを実行させている。

【その他】

リリースシステムのWeb UIはRuby on Railsで作成しました。
そこらへんは今後書いていればなと思います。

まだリリースシステムを刷新して間がないので結構泥臭くやっていますが、
今後この辺りも整理していこうと思うので、整理後に技術詳細を書いていければと思います。

このようにしてより安全によりスピィーディーにリリースし、より良いものを
より早くプロダクトをユーザ様に提供できればと思っています。

ランサーズではサービスを成長させてくれるエンジニア、デザイナーを募集しています!
ご興味がある方は、以下URLよりご応募ください。

Webエンジニア(Wantedly)
Rubyエンジニア(Wantedly)
フロントエンドエンジニア(Wantedly)
インフラエンジニア(Wantedly)
2017新卒エンジニア(Wantedly)
エンジニアインターン(Wantedly)
その他採用情報

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

thumbnail
地獄めぐりをしたおはなし

初めまして! 16年新卒でキラキラReact女子目指して頑張っている takepo です。 普段は主にReact/Reduxを使ったフロントエンド開発を主に行っているのですが、 今回は、9月〜3ヶ月の期間に地獄めぐりをさせていただいたので そのお話しをさせてい …

開発環境のDocker化

インフラエンジニアの金澤です。 今回、ランサーズの開発環境をDocker化しましたので、その内容を紹介いたします。 Docker移行の決断 Dockerについては、ここ1年で技術的な調査はしていましたが、決定的なメリットを見出していたわけではなく、採用に踏み切 …

thumbnail
react.js/redux/webpack/flowtype なプロジェクトでの stylelint の導入手順

こんにちは。森です。 最近コードレビューで「CSS の `:` のあとにスペースがあったりなかったりします」と指摘され、つい悲しくなって stylelint を導入しました。react.js/redux/webpack/flowtype なプロジェクトです。こ …