はじめに
「開発者(個人)のための」としているのは、別に自分でやっても良いんだけど Jenkins に任せられるなら任せたい、くらいのモチベーションを表現したつもりです。
環境
- Ubuntu 14.04 LTS
- Jenkins 1.575
Jenkins ジョブのパラメータ化
Jenkins は、パラメータを使いはじめると、その便利さに拍車がかかります。似たようなジョブを量産する必要がなくなります。
ここでは、Jenkinsに標準搭載されているパラメータのうち、String, Text, Choice を中心に紹介します。
さきにざくっとまとめると、以下のようなイメージです。
用途 | パラメータ |
---|---|
文字列(短い、一行、ビルド毎に変わる) | String パラメータ |
文字列(長い、複数、ビルド毎に変わる) | Text パラメータ or String パラメータを複数用意 |
文字列(使用する文字列は一定) | Choice パラメータ |
真偽値 | Boolean パラメータ |
たくさんパラメータがあって、ジョブに定義するのが面倒 | EnvInjection or Parameterized Trigger Plugin |
String, Text
String と Text はどちらも文字列を扱うパラメータです。
違うのは、String は 1行、Textは複数行を受け取るパラメータだということです。
ただし、Textはシェルの実行上では、改行 -> 空白 に変換されます。
Textパラメータの改行は、改行のまま変数に入っていました。
echo が改行を空白にしていました。ダブルクォートで挟まないといけませんでした...
このパラメータを echo し、od コマンドで 16 進数で出力すると、次のようになります。
Choice
ドロップボックス形式のパラメータを作成します。
私がよく設定する例を示します。
選択値の先頭に半角スペースを使っているのがミソです。
デフォルトの選択値を用意したくない時に使います。
半角スペースなしにただ改行しただけだと、再度ジョブの設定を編集した際に、改行の部分が無かったことにされます。
File
マシンからファイルをアップロードします。
アップロード先は、WORKSPACE 直下です。
毎ビルドごとにファイルをアップロードする作業が面倒くさいので、個人的にはあまりメリットの感じないパラメータです。
適当な Gitリポジトリを作って pull してもらう方がずっと楽です。
真偽値
その名の通りです。true または、false が入ります。
ビルド
「プロジェクト」で指定したプロジェクトのビルドが選択でき、パラメータとして使えます。
例えば↓のような設定をして、
echo $BUILD
とすると
+ echo http://localhost:8080/job/GitSample/52/
http://localhost:8080/job/GitSample/52/
このように、選択したビルドのURLになります。APIを使うときに便利そうですね。
個人的には API を使い出すとメンテし辛いのであまり使いませんが...。
あいにく、このパラメータで指定した「プロジェクト」名は、呼び出し先のジョブ名を変更しても自動更新されません。
Parameterized Trigger Plugin
Jenkins でパラメータを使い始めたら、この Plugin が欲しくなります。
何も考えずインストールしておくべき Plugin の1つです。
ビルド後に、パラメータを下流ビルドに引き継ぐ
一番良く使う、「Parameterized Trigger Plugin」という名の通りの機能です。
パラメータの有無にかかわらず、下流ビルドの実行は全て「Parameterized Trigger Plugin」でやっていいと思います。
「Trigger When build is」とあるように、
ビルドの結果によって下流ビルドを実行するか・しないか、を制御できます。
Jenkins が標準でもつ「他のプロジェクトのビルド」でも制御できますが選択肢が少ないです。
「Trigger build without parameters」は、Add Parameters で引き渡すパラメータを何も指定しなかった時に起きるエラーを無視します。
要するに、「Trigger build without parameters」をチェックすれば、「他のプロジェクトのビルド」と同じ機能になるということです。
「Add Parameters」では、どのパラメータを下流ビルドに渡すのか指定します。
私がよく使うものを列挙します。
名前 | 用途 |
---|---|
Current build parameters | このビルドのパラメータをそのまま下流ビルドに渡す |
Build on the same node | 下流ビルドを同じノード(スレーブ)上で実行させる。私はこの設定より、NodeLabel Parameter Pluginを良く使います |
Predefined parameters | 下流ビルドに渡すパラメータを定義する。記法はJVMプロパティ方式。シェル変数の定義とは違うので注意 |
Parameters from properties file | プロパティファイルに設定されたパラメータを下流ビルドに渡す。こちらもJVMプロパティ方式 |
ビルド中の処理として、下流ビルドを実行
「Parameterized Trigger Plugin」を使えば、ビルド後ではなく、ビルドの処理の中で、下流ビルドを実行する事が可能になります。
「Block until the triggered projects finish their builds」をチェックすると、下流ビルドが完了するまで、次のビルドの処理を実行しません。
「Add ParameterFactories」は少し特殊な機能です。
下流ビルドを、パラメータの値を変えて連続して実行することができます。
例として「For every matching file, invoke one build」の使用例を示します。
まずはじめに、このような感じでファイルを2つ用意します。
次に、「Add ParameterFactories」を↑のように設定します。
「Block until the triggered projects finish their builds」のチェックがないと想定通り動きませんでした。
こうすると、ジョブ「ParameterSampleChild」に対して、prop1.file と、prop2.file を渡した場合の 2 パターンを自動的に連続してビルドしてくれます。
実際にビルド結果を見てみます。
2回ビルドされていることが分かります。
こちらは、prop1.file
こちらは、prop2.file が転送さています。
備考
Conditional BuildStep Pluginと組み合わせることで、ビルドの実行を細かく制御することができます。
個人で使うJenkinsに、そこまで複雑なジョブフローを構築する必要はないと思いますので、紹介するだけにとどめます。
その他 プラグイン
Parameterized Trigger Plugin 以外にも、パラメータと関連したプラグインをいくつか列挙します。
時間があれば、別途記事にまとめようと思っています。
-
EnvInject Plugin
- ビルド前中後、それぞれのタイミングで環境変数を追加できる
- Jenkinsで使用する環境変数を初期化できる
-
Extended Choice Parameter plugin
- ジョブのパラメータに、ラジオボックスや複数選択などの選択方式を追加できる
- 選択肢をファイルで読み込んだり、Groovyで生成できる
-
Mask Passwords Plugin
- Jenkins本体が持つパスワードパラメータは、echo すると丸見えなので、ちゃんと隠したい時に使う
-
NodeLabel Parameter Plugin
- ビルドを実行する時のスレーブを指定するパラメータが使える
-
Configuration Slicing Plugin
- 複数のジョブのパラメータを、一括して修正できる
- Choiceパラメータの選択値を追加・削除する時に便利