社内LTでPlayでJenkinsでBuildPipelineなデモが出来るまで。
これです。
今回もほぼ個人用備忘録なので雑です。
入れたプラグイン
- Git Plugin
- Gitlab Hook Plugin
- 社内リポジトリがgit + GitLabなので
- Build Pipeline Plugin
- 肝
- Copy Artifact Plugin
- 保存した成果物を取り回すため
ジョブの作成
今回はデモ用なので簡単に、以下の3つのジョブ(フェーズ)を作りました。
- commit-stage
- compile
- test
- stage*1
- deploy(to 開発環境)
- commit-stageから自動発動
- deploy(to ステージング環境)
- deploy(to 開発環境)から手動発動
まとめると
commit-stage -[自動]-> deploy(to 開発環境) -[手動]-> deploy(to ステージング環境)
こんな感じ。
GitLabのHooks
以下の様な感じで設定。
リポジトリにpushがされると指定したURLにリクエストが飛ぶ
http://{Jenkinsサーバのホスト}/gitlab/build_now?url=git@gitlab:hogeproject
追記
Gitlab Hook Plugin 0.2.5時点ではurlパラメータ無しでも動きます。と言うか無しにしないと動かなかった
commit-stage
ビルド・トリガ
「SCMをポーリング」にチェックを入れ、「スケジュール」欄は空に。
ビルド
- シェルの実行
- 以下のような的なものを設定。
./commit-stage.sh
-
- 中身的には以下をしてるだけ
play clean compile test stage
ビルド後の処理
- 成果物を保存
- 以下を除外
- .git
- logs
- 以下を除外
- 他のプロジェクトのビルド
- 「ビルドするプロジェクト」に「deploy(to 開発環境)」を設定。
- 「成功した場合のみ起動」にチェックする。
deploy(to 開発環境)
ソースコード管理システム
なし
ビルド・トリガ
- 他のプロジェクトのビルド後にビルド
- 「project names」は「commit-stage」
ビルド
- 他のプロジェクトから成果物をコピー
- 「プロジェクト」は「commit-stage」
- 「ビルド」は「Upstream build that triggered this job」
- シェルの実行
fab to_devel deploy
ビルド後の処理
- 「Build Pipeline Plugin -> ManuallyExecute Downstream Project」を選択して「deploy(to ステージング環境)」を設定
Build Pipelineビュー
Select Initial Job
- 「commit-stage」を設定
こんな感じで、「とあるブランチにpushしたらコンパイルやテストが動いて開発環境にデプロイ。手動(1クリック)で評価環境へデプロイ」なデモ環境を作りましたとさ。
補足
設定ファイルの切り替えは、confディレクトリ配下に
- devel.conf
- staging.conf
みたいな環境ごとの設定ファイルを作り、起動スクリプトに
target/start -Dconfig.resource=$CONF_FILE
のように書くことによってサーバ起動時に切り替えるようにしました。
環境変数CONF_FILEをexportしておくか、起動スクリプトの引数に渡すようにすることで「ビルドは1回」を守ってます。
./demo start devel.conf # or export CONF_FILE="devel.conf" ./demo start
*1:Playframeworkの、リリース準備のためのコマンド。classpathにjar集めたり起動スクリプト作ってくれたりする
*2:fabricは別途インストールしておいてください
*3:target/staged/*、target/start、target/startを叩く起動シェル、を転送してます
*4:ただし、他のプロジェクトから成果物をコピーのUse "Last successful build" as fallbackのチェックを入れておかないと失敗する。どうやらBuildPipelineビューから手動実行する場合、Copy Artifact PluginがUpstream buildのビルド番号がうまく取得できてないっぽい?