2015年10月19日月曜日

[Jenkins] 同じノードで繰り返し実行されないようにする方法

Workflow Plugin を使ったらこれについても制御できるかもしれないですが、
まだ Workflow Plugin 使えてないので、別の方法を紹介します。

Groovy Label Assignment plugin
Groovy Label Assignment plugin を使います。
このプラグインを使うと Groovy を使って、
動的に実行ラベルを設定することができます。

ジョブの設定ページを開くと、
「Groovy スクリプトで実行するノードを制限」があるので有効にし、スクリプトを入力します。
文字列を返すとそれが新しいラベル式になります。なにも返さなかった場合は、もとのラベル式が使われます。


前回実行ノードを除外するときは、こんな感じに書きます。
def label = currentJob.assignedLabel
def last = currentJob.getLastBuild()
if( last == null ) return
def node = last.getBuiltOnStr()
if( node == null || node == "" ) node = "master"
if( node )
  return "${label}&&!" + node 
実行しようとしているジョブは currentJob にバインドされているので、そこからラベルと前回実行時のノード名を取得して新しいラベルを生成します。


さまざまなスレーブでまんべんなく実行したい場合はマトリックスを組むのが良いですが、この方法も覚えておくと便利かもしれません。

0 件のコメント:

コメントを投稿