最近流行
(ちょっと出遅れてますが…)のズンドコキヨシを Jenkins でやってみました。
ズンドコキヨシまとめ - Qiita
どうやってやったのか?ですが、ジョブでズンドコキヨシを表現してみました。
まずは結果をご覧ください。(小さいのでクリックしてみてください)


www.oyama-dansen.co.jp
構成
ジョブは以下の4つ。

最初の起点となる「きよしのズンドコ節」ジョブと、「ズン」、「ドコ」、「キヨシ」ジョブの4つのジョブが以下のようにつながっています。
ランダムに下流ジョブを実行
「ズン」と「ドコ」をランダムに実行させるために、
Groovy Postbuild Plugin と
Flexible Publish Plugin を使用しました。
Groovy Postbuild でランダムにビルドステータスを「不安定」か「失敗」に変更しています。
(コードは後述。
Gist にも公開してます。)
Flexible Publish で「不安定」の場合は、「ズン」。「失敗」の場合は、「ドコ」を実行するように設定しています。
ズンドコキヨシ
メインのズンドコ関数ですが、まず判定は Groovy Postbuild で行っています。
判定コード:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
import hudson.model.Cause.UpstreamCause
static setNext(manager)
{
def r = Math.floor( Math.random() * 2 ) as int
manager.listener.logger. println r
if ( r ) {
manager.buildUnstable()
} else {
manager.buildFailure()
}
}
static checkZUN(manager, cause, count )
{
def causes = cause.getUpstreamCauses()
def name = cause.getUpstreamProject()
manager.listener.logger. println name
if ( name == "ZUN" ) {
count += 1
if ( count == 4 ) {
return true
}
} else {
return false
}
cause = null
causes. each {
if ( it instanceof UpstreamCause ) {
cause = it
return
}
}
return checkZUN(manager, cause, count )
}
static check(manager)
{
def name = manager.build.getProject().getName()
manager.listener.logger. println name
if ( name == "DOKO" ) {
def cause = manager.build.getCause(UpstreamCause. class )
if ( checkZUN(manager, cause, 0 ) ) {
return true
}
}
setNext(manager)
return false
}
|
ズンドコの判定は「ドコ」ジョブで行います。

check(checkZUN) 関数では、UpstreamCause を辿って上流ジョブのジョブ名を取得していきます。
取得したジョブ名を使って、「ズン」、「ズン」「ズン」、「ズン」「ドコ」となったらビルドを「成功」にします。
ならなかった場合は、次のジョブにつなげるためにまたランダムでステータス変更をします。
ズンドコが成立すると「成功」ステータスになるので、あとは「成功」ステータスのときのトリガーを追加すれば完成です。
画像
最後にお遊びで付けた画像ですが、これは createSummary, appendText で img タグを挿入しています。
画像ファイルはワークスペースに配置すれば、ビルドページからワークスペースへの相対パスで参照できます。
具体的にはこんな感じに設定しています。
1 2 |
manager.createSummary( "clipboard.gif" ).appendText("<img src=\"../ws/KIYOSHI.jpg\">
キ・ヨ・シ!! ", false, false, false, " red")
|
来週はこれをもう少しカスタマイズして、成果物の画像ファイルを貼り付ける方法を紹介します。
最後に
今回は
Pipeline Plugin (旧Workflow Plugin) を使いませんでした。(自分がほとんど使ってないので)
Jenkinsでビルドのパイプラインを作るぞー!(2016年2月版) - Mitsuyuki.Shiiba
あとはもう少し見た目をよくしたいなと思いましたが、時間がないのでここまでにしました。
誰かこの辺もチャレンジしてくれたらな~(私が大変喜びます)と言って締めたいと思います。では~