2016年3月23日水曜日

Jenkins でズンドコキヨシ

最近流行(ちょっと出遅れてますが…)のズンドコキヨシを Jenkins でやってみました。
ズンドコキヨシまとめ - Qiita

どうやってやったのか?ですが、ジョブでズンドコキヨシを表現してみました。
まずは結果をご覧ください。(小さいのでクリックしてみてください)

www.oyama-dansen.co.jp

構成
ジョブは以下の4つ。

最初の起点となる「きよしのズンドコ節」ジョブと、「ズン」、「ドコ」、「キヨシ」ジョブの4つのジョブが以下のようにつながっています。

ランダムに下流ジョブを実行
「ズン」と「ドコ」をランダムに実行させるために、
Groovy Postbuild PluginFlexible 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
あとはもう少し見た目をよくしたいなと思いましたが、時間がないのでここまでにしました。
誰かこの辺もチャレンジしてくれたらな~(私が大変喜びます)と言って締めたいと思います。では~

0 件のコメント:

コメントを投稿