最近流行
(ちょっと出遅れてますが…)のズンドコキヨシを Jenkins でやってみました。
ズンドコキヨシまとめ - Qiita
どうやってやったのか?ですが、ジョブでズンドコキヨシを表現してみました。
まずは結果をご覧ください。(小さいのでクリックしてみてください)
www.oyama-dansen.co.jp
構成
ジョブは以下の4つ。
最初の起点となる「きよしのズンドコ節」ジョブと、「ズン」、「ドコ」、「キヨシ」ジョブの4つのジョブが以下のようにつながっています。
ランダムに下流ジョブを実行
「ズン」と「ドコ」をランダムに実行させるために、
Groovy Postbuild Plugin と
Flexible Publish Plugin を使用しました。
Groovy Postbuild でランダムにビルドステータスを「不安定」か「失敗」に変更しています。
(コードは後述。
Gist にも公開してます。)
Flexible Publish で「不安定」の場合は、「ズン」。「失敗」の場合は、「ドコ」を実行するように設定しています。
ズンドコキヨシ
メインのズンドコ関数ですが、まず判定は Groovy Postbuild で行っています。
判定コード:
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 タグを挿入しています。
画像ファイルはワークスペースに配置すれば、ビルドページからワークスペースへの相対パスで参照できます。
具体的にはこんな感じに設定しています。
manager.createSummary("clipboard.gif").appendText("<img src=\"../ws/KIYOSHI.jpg\">
キ・ヨ・シ!!", false, false, false, "red")
来週はこれをもう少しカスタマイズして、成果物の画像ファイルを貼り付ける方法を紹介します。
最後に
今回は
Pipeline Plugin (旧Workflow Plugin) を使いませんでした。(自分がほとんど使ってないので)
Jenkinsでビルドのパイプラインを作るぞー!(2016年2月版) - Mitsuyuki.Shiiba
あとはもう少し見た目をよくしたいなと思いましたが、時間がないのでここまでにしました。
誰かこの辺もチャレンジしてくれたらな~(私が大変喜びます)と言って締めたいと思います。では~