はじめに
前提条件
目標
gitlabでトピックブランチをmasterにマージしたら自動的にテストする
gitlabの設定
秘密鍵
Jenkinsがgit cloneできるように秘密鍵を登録します。
- Jenkinsで新規プロジェクトを作成
- (Cloudbeesの場合)Jenkinsの秘密鍵が用意されている
- gitlabの自分のアカウントに追加
pullするだけなので、自分のアカウントをそのまま使います。 複数人で開発するプロジェクトでは、Jenkins用ユーザを用意した方がいいかもしれません。
webhook
- gitlabのプロジェクトのSettingsのHooksを設定
Push events
イベントを選択- 次のフォーマットのURLを登録
http://< jenkins host >/git/notifyCommit?url=git@< gitlab host >:< repository owner >/< repository name >.git
例えば
http://ledsun.ci.cloudbees.com/git/[email protected]:ledsun/sampleproject.git
参考:YUKASHIKADO Inc. 開発ブログ • Jenkins と GitLab と rbenvでプライベートなRuby開発環境を構築する
Jenkinsの設定
plugin
gitlabと連携するためのプラグインをインストールします。
- Jenkins > Jenkinsの管理 > プラグインの管理
Gitlab Hook Plugin
をインストール
Jenkinsのプロジェクト設定
Jenkinsのダッシュボードからプロジェクトを作成し設定します。
ソースコード管理
- git を選ぶ
git url
を指定。例えば[email protected]:ledsun/sampleproject.git
master
ブランチを設定
ブランチを指定すると、masterにマージしたときだけビルドを実行します。 指定しないと、トピックブランチをプッシュした時もビルドが実行します。
ビルド・トリガ
- SCMをポーリングにチェックを入れる
ビルド
シェルの実行
に次のスクリプトを指定します。
curl -s -o use-node https://repository-cloudbees.forge.cloudbees.com/distributions/ci-addons/node/use-node NODE_VERSION=0.10.26 . ./use-node npm install npm install [email protected] npm install forever export PATH=$PATH:node_modules/jasmine-node/bin/:node_modules/forever/bin forever start --no-colors app.js sleep 2s jasmine-node spec/dev/ --junitreport forever stop --no-colors app.js
注意点
- Cloudbeesでnodeを使うにはおまじないが必要
- nodeコマンドはローカルにイスントールしてパスを通す
- jasmine-nodeでfresby.jsのテストを実行するときはバージョン1.14.2を指定する
- テスト終了後にプロセスをnodeアプリケーション終了するためにforeverを使う
- nodeアプリケーションの起動に時間がかかるのでsleepで待つ
nodeを動かす
CloudBees DEV@cloud (Jenkins as a Service) Documentation のサンプルを参考にします。 サンプルはnode.jsのバージョンが古いのでなるべく最新の10.26を指定します。
curl -s -o use-node https://repository-cloudbees.forge.cloudbees.com/distributions/ci-addons/node/use-node NODE_VERSION=0.10.26 . ./use-node
これでnpm
コマンドも入ります。
nodeコマンドをインストール
Cloudbeesでは、nodeコマンドはHow do I get a grunt task working with a Cloudbees Jenkins build - Stack Overflow のようにローカルにインストールしてPATHを設定して使います。
- forever
- jasmine-node
をインストールします。
npm install [email protected] npm install forever export PATH=$PATH:node_modules/jasmine-node/bin/:node_modules/forever/bin
nodeアプリケーションの開始
終了しなくても一度の実行ではテストが成功します。 何度か実行すると失敗します。
Jenkinsでnodeのアドオンをビルドして、それを使ったhttpサーバアプリケーションを起動する - 猫ぱーんち!を参考にし
forever
を使って明示的に起動・終了します。
Jenkinsのコンソールはカラー表示に対応していないので--no-color
オプションをつけます。
forever start --no-colors app.js
forever
を使うとアプリケーションの起動完了前に次のコマンドが実行されます。
起動完了を待つためにスリープを入れます。
sleep 2s
テストの実行
frisby.jsのテストはjasmine-node
コマンドで実行します。
jasmine-node
の最新版(1.14.3)は上手く動きません。1つ前のバージョン1.14.2を使います。
また、Jekinsでテスト結果を集計するために--junitreport
オプションをつけます*2。
jasmine-node spec/dev/ --junitreport
nodeアプリケーションの終了
forever stop --no-colors app.js
ビルド後の処理
Junitテスト結果の集計にreports/*.xml
を指定します。
Jenkinsのダッシュボードに成功・失敗したテスト件数が表示されるようになります。
確認
Jenkinsの設定が上手く言っているか確認するために、ビルドの実行
をしてみましょう。
20140718追記
jasmine-nodeの1.14.5がリリースされ、バージョン指定が不要になりました。
*1:Cloudebeesの設定方法はCloudbeesを使ってJenkinsを用意するを見てください。
*2:2014年7月8日時点では、--junitreportオプションを付けるとテストが正しく実行されません。1.14.4で解消されるそうです