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

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よりご応募ください。


【中途採用】
フロントエンドエンジニア
サーバーサイドエンジニア
コーポレートエンジニア
SREエンジニア

【新卒採用・その他】
21・22新卒
その他採用情報

関連記事

AWS API とサーバ管理

あけましておめでとうございます。エンジニアの こじま です。 今年もよろしくお願いいたします。   今回は,ランサーズの開発・運用を楽にするための サーバ管理システムのご紹介をします。 弊社プラットフォームでは AWS を利用しています。 &nbsp …

thumbnail
ぼくの考えた最強の WebAPI のエラーレスポンス型(仮)の mson を発表します!!1

森です。 昨日、API仕様を考えていて、社内チャットで雑談した成果になります。ご査収下さい。   ## Error + status_code: `500` (number, required) – ステータスコード + type: `v …

thumbnail
解析まで10分!最強のMySQLチューニングツール「Jet Profiler」

ランサーズでは、現在、Webエンジニアを募集しています。 詳しくは、募集要項をご覧下さい。 こんにちは、keiです。 今回は、MySQLのチューニングに大活躍な「Jet Profiler」というツールをご紹介します。 【2012/12/13 追記】 JetPr …