Jenkinsのノード選択をNode and Label parameter pluginでやる
概要
Jenkinsのノード制御はあまりカスタマイズが効きません。そのため、ノードを細かく制御したい場合はジョブを分ける必要があり、ジョブ数が増えて管理コストが上がります。このプラグインはパラメーターでノードを選択できるので、一つのジョブでノードごとにジョブを動かせるようになります。
Jenkinsのノード選択は柔軟性に欠ける
Jenkinsのノード選択がパラメータでできるプラグインです。 Jenkinsでは基本機能として、実行するノードを制限して特定ノードでだけジョブを実行できます。 ですが、この設定項目は柔軟性に欠け、パラメータでノードを切り替えたり、該当するノード全てでビルドするといったことができません。 そのため、例えばgoでWindowsとMac両方でテストを実行したい場合、windows用とmac用というノードごとの個別のジョブを作る必要があります。 しかし、それを続けるとJenkinsのジョブの数が際限なく増えていき、ジョブのメンテが大変になるという問題が出ます。
Node and Label parameter plugin
https://wiki.jenkins-ci.org/display/JENKINS/NodeLabel+Parameter+Plugin
Node and Label parameter pluginは、以上の問題点を解決できるプラグインです。このプラグインを入れると、ビルド時のパラメータにNodeとLabelを追加することができるようになります。
Nodeの場合は文字通り任意のノード名でビルドノードを選択できます。 また、Labelの場合はノードにつけたLabelでビルドするノードを選択できます。 そのため、ノードにwindowsやmac等の適切なラベルをつけることで、任意のノードでビルドすることができるようになります。 また、全てのノードに共通のラベルを一つ定義しておくことで、どれでもいいからとりあえずビルドするといったこともできます。
該当するノード全てでビルドする
このプラグインは、特に設定がない場合は該当するノードのどれか一つでjobが実行されますが、以下のオプションをつけることで該当するノード全てで実行されるようになります。 そのため、複数環境でテストしたい場合も1回ビルドを実行するだけで後は自動で全てのノードでビルドが実行されるようになります。 なお、全ノードで実行される一つのビルドではなく、ノードごとに個別のビルドが実行されるようです。
Pipeline Pluginとの違い
Pipeline Pluginでは、Jenkinsのジョブを丸ごとgroovyで書けるため、このプラグインよりもさらに柔軟に選択できます。 ただ、こちらは本当にジョブの内容を全てgroovyで書く必要があり、既存のJenkinsの知見を活用できなかったり、他のプラグインとの相性はあまり良くないです。 Node and Label parameter pluginはパラメータのみ変更されるため、標準的なジョブ構成であればとても簡単に導入できます。 そのため、どうしても複雑な制御が必要な時にのみPipeline Pluginを使うべきだと思います。
まとめ
- 通常の機能だとノードをあまり制御するのは難しい
- プラグインで任意のノードをパラメーターで選択できる
- 選択方法はノード名とラベル
- ラベルは複数に同じラベルをつけたりといろいろ便利なのでオススメ
- ノード選択部分をさらに柔軟にしたいならPipeline Plugin
- より複雑な事ができるが、導入の敷居も高い
- Jenkins Workflow Pluginで複数slaveを扱うのが楽になる