Jenkinsの実行時に変数を指定できる機能として、Parametarized Buildがあります。コマンドの引数など一部の引数が異なるビルドを複数作る際に便利です。
ビルドのパラメータ化の概要は以下のとおりです。
- 各ジョブの「設定」画面の「ビルドのパラメータ化」をチェックONすると、パラメータを定義できる
- パラメータには型を指定する。コマンド引数を想定すると、文字列型がオーソドックス
- 「名前」はPipelineスクリプト(Jenkinsfile)から参照する変数名。flagという名前をつけた場合、pipelineからはenv.flagという変数で参照できる
- 「デフォルト値」は変数の値。実行時に書き換えて変更も可能
- パラメータを設定したジョブは、「ビルド」が「パラメータ付きビルド」に変わり、実行前にパラメータ確認画面が増える
- リモートビルドのURLも変わる
Pipelineのif判定の際の利用
パラメータ化したからにはpipelineで条件判定に活用するケースが出てきます。構造はif
ブロックで良いのですが、以下のコードは想定した挙動にならないことがあります。
if( env.parameter ) {
// execute when truthy
}
たとえば、このparameterが文字列型の際、画面上の設定が空欄だった場合にもif
ブロックは実行されます。以下のように型キャストすると空文字列はfalse
と評価され、ブロックの実行はスキップされます。
if( env.parameter as Boolean ) {
// execute when truthy
}
これはgroovyの言語仕様によりますが、ほかにも数値の0などもBooleanキャストでfalseになるようです。
また、真偽値(boolean)型のパラメータはチェックボックスで指定するのですが、あろうことかfalseの値が文字列’false’です。
よって、trueのみ実行するifブロックの書き方は以下のようになります。
if( env.parameter == 'true' ) {
// execute when string 'true'
}
⁋ 2020/08/20↻ 2024/12/18
中馬崇尋
Chuma Takahiro
Chuma Takahiro