Jenkinsでビルド・パイプラインを作る
Jenkinsのプラグインでビルド・パイプラインを作ることができるので紹介。 #12月20日のワンクリックデプロイ勉強会の発表のネタバレっぽいのですが。
ビルド・パイプラインとは
ビルド・パイプラインとは、継続インテグレーションのプラクティスの1つで、テスト等を複数の単位に分割し、順番に流していくものである。一般的には継続的インテグレーションを利用していれば、SCMにソースコードをコミットした段階ですぐにユニットテストを走らせ、以降に、静的解析や結合テスト、受け入れテスト、ステージング環境へのデプロイ、本番環境へのデプロイという形で進んでいくことになり、その単位でパイプライン要素を分ける。 当然パイプラインの途中で試験に不合格であれば、その後のプロセスには進めない。
これによって、例えばコミット時には即座にユニットテストレベルの結果を返して開発者のペースを阻害しないようにすることができる。(もちろん後続のテスト結果が失敗であればチームは即座に他の作業をとめてテストが成功するように修正しなければならない)
Jenkinsでビルド・パイプライン
Jenkinsを使ってビルド・パイプラインを作る場合には、ビルドのトリガーをチェーンしていけば良い。 以下の図のようにビルドトリガの設定で他のジョブを指定すれば良いだけだ。 (当然のことながら、パイプラインの先頭については、SCMのポーリングや定期実行等の他のトリガが必要だ)
このケースでの問題は、Jenkinsの画面を見ただけではお互いのジョブの関連性が分からないことにある。
Jenkin Build Pipeline プラグインを使う
Jenkins Build Pipeline プラグインの詳細はこちらを参照のこと。
簡単に言えば、以下のような機能をもったプラグインだ。
このプラグインでは、アップストリームとダウンストリームの依存関係に基づいて、ジョブのチェーンを作成することができる。ダウンストリームのジョブはデフォルトでは自動的に実行のトリガーがほかれるが、手動でトリガーをひくこともできる。
また、1画面でパイプラインの履歴を見ることができ、現在の状況や各バージョンにおけるチェーンの状況やどこでパイプラインが停止したかといったことを見ることができる。
インストール方法については、Jenkinsのプラグインのいつもの方法でOKだ。 プラグインの画面で、「Build Pipeline Plugin」を選択するか、jenkins-cli.jarを利用すれば良い。
画面例
このプラグインを導入した後にまずやることは、ダッシュボードのところで「+」ボタンを押して新しいViewを作成することだ。その際に、選択肢に新たに「Build Pipeline View」が追加されているので、こちらを選択し、適当な名前を付ける。
ついで、Build Pipeline Viewの詳細な設定を行う。Select initial jobのところでパイプラインの先頭で流すジョブを選択し、No of displayed buildsでパイプライン画面にビルドを何個表示するかを設定する。
以上で完了だ。既にプロジェクト間の前後関係が作られていれば、パイプライン表示になっているはずだ。 以下の図はそれに加えていくつか設定を行ったものだ。
この例では、ユニットテスト(unittest) →結合テスト(integration1)→受け入れテスト(acceptance1)→ステージングリリース(staging_release)→本番リリース(production_release)のパイプラインを組んでいる。
このプラグインで特徴的なのは、パイプラインの手前が終わった場合に次を自動で進めるだけでなく、人がトリガーを引かないと先に進めないようにすることができることだ。上図の例では、受け入れテスト以降を手動でトリガーを引くことにしている(図中の上から3行目と4行目を参照)。これによってステージングや本番へのリリースは、人手によるクリックがなされた場合のみ行われることになる(当たり前だが、リリースのジョブはcapistranoを叩くなりなんなり自分で設定する必要はある)。
この画面の例ではリビジョン15はビルドに失敗、リビジョン16はテストは通ったが、ステージングリリースは実施せず、リビジョン18についてはパイプラインの最後まで流れたということになる。
既存の仕掛けを特に損なったり変更したりする必要はないので是非導入してみると良いだろう。