Jenkins
「Jenkins」は継続的インテグレーション(CI)ツールの一種で、シェルスクリプトをタスクとして定期的に実行したり、タスクの成否の管理や、順序付けなどを行ったりします。
DMMでは、この後紹介するCapistranoやGruntなどの各ミドルウェアの起動・実行、実行順序の制御をすべてJenkinsで管理するようにしています。
以下、サンプルタスクのsnapshotです。
Capistrano
「Capistrano」はサーバー操作、デプロイの自動化ツールです。設定ファイルとRubyコードでリポジトリの情報やサーバーの情報などを記載します。
#リポジトリの設定 set :application, 'DmmSampleApp' set :repo_url, 'git@xxxx.xxxxxx.xxxx/yyy/dmmsampleapp.git' set :deploy_to, '/var/www/dmm_sample_app' (略)
#サーバーの設定 server 'xxx.xxx.xxx.xxx', user: 'deploy_user', roles: %w{app}, my_property: :my_value server 'xxx.xxx.xxx.xxx', user: 'deploy_user', roles: %w{web}, my_property: :my_value (略)
下記コマンドでデプロイを実行します。
cap -f Capfile --roles app production deploy
今回JenkinsからCapistranoを実行することで、Gitリポジトリから必要なソースコードをサーバーにデプロイし、デプロイ時に必要なディレクトリの作成や、コマンドの実行を行うようにしました。また、Capistranoの機能でデプロイしたコードのロールバックも行えるようにしました。
Grunt
JavaScriptのminify、結合、テスト・構文チェックなどは、手作業で行うと非常に面倒です。「Grunt」はこう言った作業を自動化するためのビルドツール(タスクランナー)です。例として、下記のような設定ファイルを記載するだけで、ソースに変更があった場合に自動的に複数のソースを1つのファイルにマージすることができます。
grunt.initConfig({ pkg: grunt.file.readJSON('package.json'), cfg: config, concat: { options: { separator: '\n' }, dist: { src: [ 'src/public/intro.js', 'src/public/outro.js' ], dest: 'src/temp/dmm.xxxxxx.xxxx.js', nonull: true }, }, (略)
今回Gruntを使って、ユニットテストの実行やJSLintの実行、後述するistanbul、JavaScriptのminify/concat、CSSのコンパイルなどをすべて任せることで、Capistrano実行時にGruntコマンドですべての作業が流れるようにしました。