社内LTでPlayでJenkinsでBuildPipelineなデモが出来るまで。

これです。
今回もほぼ個人用備忘録なので雑です。

入れたプラグイン

  • Git Plugin
  • Gitlab Hook Plugin
  • Build Pipeline Plugin
  • Copy Artifact Plugin
    • 保存した成果物を取り回すため

ジョブの作成

今回はデモ用なので簡単に、以下の3つのジョブ(フェーズ)を作りました。

  1. commit-stage
    • compile
    • test
    • stage*1
  2. deploy(to 開発環境)
    • commit-stageから自動発動
  3. 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

ソースコード管理システム

Gitを選択。リポジトリURLとブランチは環境に合わせて適当

ビルド・トリガ

「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」
  • シェルの実行
    • リモートへファイルをアップロードするように設定したfabricのスクリプトを実行する*2 *3
fab to_devel deploy
ビルド後の処理
  • 「Build Pipeline Plugin -> ManuallyExecute Downstream Project」を選択して「deploy(to ステージング環境)」を設定

deploy(to 開発環境)

deploy(to ステージング環境)をコピーして作成、以下だけ書き換える*4

ビルド
  • シェルの実行
fab to_staging deploy

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のビルド番号がうまく取得できてないっぽい?