Join Pluginを試す&Build pipline Pluginで表示してみる

 

とてもお世話になっているJenkinsさん、ほんとうにありがとうございます (_ _) 
さて、今回、こんな流れで処理を組んでみることになりました。

  • 『よーいドン!』で、処理時間の異なるジョブを同時に起動
  • 両方オッケーになったら後続のジョブにうつる。

このあたりの処理の組み方は、いろんな方法があるかと思います。

ただ、自分以外にも設定を調整してもらう必要があるので、ひとまずあんまりコードを書いたり、複雑な設定をしなくてもサクッと実現できそうなもの…と思って取り入れたのが、Join Pluginです。

せっかくなので、設定のスクリーンショットと、こんなふうに検証してみた、というのを載せてみます。

1. ジョブの準備

実際のジョブはいろんな処理をしますが、とにかくよーいドン、のあと時間差でジョブが終了するというものを確認するために、こんなジョブを用意しました。

試しているのはWindows Server上です。

  1. Nightly-1: 定時に起動する。ただし、後続の2、3のジョブを起動するだけで何もしない。
  2. Nightly-2: 1から起動。”ping –n 30 localhost” というWindowsバッチを起動するだけ。
  3. Nightly-3: 1から起動。”ping –n 20 localhost” というWindowsバッチを起動するだけ。問題なければ2よりも先に終わるハズ。
  4. Nightly-4: 2&3が両方成功した後に実行して欲しいジョブ。これも “ping –n 10 localhost” するだけ。
  5. Nightly-5: 4の終了後に実行。

2. Join Pluginでの設定

さて、実際の設定は、Nightly-1 で行います。

通常のように、後続ジョブとして2&3を設定しますが、さらに、Join Trigger というビルド後のオプションを使い、『全ての下流ジョブが完了したら実行するジョブ』を設定します。今回の例では、Nightly-4を設定します。

config

設定は、ほんとにこれだけです。なお、両方とも成功、というのではなく、両方不安定でもJoinさせるというオプションも選べます。(両方失敗してても、とにかく両方とも終わったらJoinさせる、ということも、いろんなプラグインを組み合わせれば可能です)

ちなみに、最初にこのプラグインを試したのは、1年以上前。説明は英語なので、文面は良く分からなかったのですが、プラグインのページに、スクリーンショットがたくさんあったのも決め手でした。
不明点は、とにかく設定して実際の動きを確かめるという、地味な?方法を取りました。

3. どんな動きになるのかな?

では、実際に処理を実行してみると…。
後続ジョブの追跡は、下記のようなプラグインを使うと判りやすくなります。

Dependencency Graph View を利用できればいいのですが、こちらは画像生成のために専用のライブラリ・バイナリ(graphviz)が必要で、マスタがWindows Serverの場合はちょっと無理?

ひとまず実績から流れをつかめればいいのであれば、後者2つはWindowsでも問題無しです。
とくにBuild Pipline Viewは、見ても楽しいし!

さらに、可視化された形でジョブの実行時間も把握できるし、いろんなアイコンをクリックすると、コンソール出力を表示できたり、途中からジョブを起動できたりと、おススメです。

4. Join Pluginを使ったケースでは?

お試しのケースでは、こんな表示になります。

Build No. 10では、Nightly-1を起点に、後続の2&3が並行して走ります。

設定上はどちらでもNightly-4を呼び出せるようになっていますが、最終的に、あとで完了するNightly-2が、Nightly-4を呼び出しているのが分かります。(Nightly-3からNightly-4の流れは設定としては存在していますが、水色になっていて、実行もされません)

jointrigger

次に、Build Number 11で、Nightly-3が必ず失敗するように設定を変えてみました。(Windowsサーバで、”ls-la” して失敗させる処理を追加)
Nightly-3が失敗すると、Nightly-2が成功しても、その後の処理には遷移していません。(水色になったままです)

ひとまず、検証目的で、pingを打つだけの簡単なジョブを組み合わせてみましたが、想定したような処理ができそうでした。

* * *

ここから実際に呼び出すプログラム、スクリプトをくっつけて、最終的に仕上げていくことになります。また、一連の処理を行っている時に、ほかのジョブが並行で走って欲しくはないケースもあるので、排他制御の設定を加えて行く感じになっています。(ビルドの同時実行数を制限したり、優先順位をつけたり、排他制御用のプラグインをつかったりします)

わたしはプログラムのビルド、テストという仕事ではJenkinsを使っていないので、今回も、ほんとにプラグインの紹介をするだけの内容になってしまいましたが、設定事例を載せてみましたので、何かのお役に立てたなら幸いです。

* * *

おわりに。

今月末には、Jenkinsユーザ・カンファレンス2012が開催されます。
わたしも申込みはしているのですが、ちょっと時間の工面が難しくなってきていて、怪しいです。でも、なんとか参加したいと思っています。

(話すのではなくて参加、というだけなので、偉そうなことは言えませんが…)

コメント

人気の投稿