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コマンドですべての作業が流れるようにしました。
この記事は参考になりましたか?
- DMM.comの事例から学ぶリリースフロー自動化ガイド連載記事一覧
-
- JenkinsとAnsibleによるサーバー構築の自動化
- リリースフローを自動化するためのJenkinsの導入/設定手順
- リリースフローを自動化して、本来の開発業務に専念できる環境を整備しよう
- この記事の著者
-
田中 裕一(株式会社DMM.comラボ)(タナカ ユウイチ)
DMM.comラボにおいて、検索システムの刷新、レコメンドエンジンの新規開発など、DMM.comの重要な機能を担うエンジニアとして従事。AeroSpikeを社内で採用し、日本人初のコントリビューターとしても活躍。サーバーサイド、フロントエンド、ミドルウェア、インフラと幅広く担当するDMM.comラボ...
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア


