Jenkinsでジョブ間のパラメータの引き渡しが全然上手くいかなかったのでメモ


はじめに

初めてJenkinsでテスト用の簡単なjobを作成したが、なかなか上手くいかなかったので備忘録。

やりたかったこと

表題の通り、Job1からJob2へのパラメータの引き渡しがしたかった。
    

成功手順

①プラグインをインストール

②環境変数のインジェクトを設定

  • Job1のシェルスクリプト内で、下記のようにプロパティファイルを作成し、渡したい変数JOB_PARAMをファイル内に書き込む

※ファイルが生成されない処理ルート(生成前にexit等)が存在すると、後続Jobでエラーが発生するため注意

Job1.sh
JOB_PARAM="aaa";

PROPERTY_FILE="example.properties";
echo "JOB_PARAM=${JOB_PARAM}" > ${PROPERTY_FILE};
  • Job1のビルドタブにて [ビルド手順の追加] ⇒ [環境変数のインジェクト] を選択
  • [プロパティファイルのパス] にexample.propertiesと記入

③ビルド後の処理を設定

  • Job1のビルド後処理タブにて [ビルド後の処理を追加] ⇒ [Trigger parameterized build on other projects] を選択
  • [Projects to build] に渡す先のジョブ名(ここでは「Job2」)を記入
  • [Trigger when build is] で [Stable] を選択
  • [Add Parameters] ⇒ [Predefined parameters] を選択し、渡したいパラメータを
    TARGET_PARAMETER=${JOB_PARAM}のように設定

④パラメータの受け取り

  • Job2のGeneralタブにて [ビルドのパラメータ化] にチェックを入れ、[パラメータの追加] ⇒ [テキスト] を選択
  • [名前] にJob1の [Predefined parameters] で指定した変数名(ここでは「TARGET_PARAMETER」)を記入
  • Job2のシェルスクリプトでJob1で定義したTARGET_PARAMETERを下記のように利用可能
Job2.sh
echo "Job1で設定したAの値:${TARGET_PARAMETER}";

⑤実行結果

Job1で設定したAの値:aaa

はまった点

環境変数のインジェクト

これに気づけませんでした。
単純にビルド後処理に [Predefined parameters] を追加してパラメータを渡すだけでは上手くいかず、
シェルスクリプト内で定義した変数がビルド後の処理に渡されませんでした。
つまりTARGET_PARAMETER=${JOB_PARAM}と [Predefined parameters] で設定するだけだと、
Job2には「${JOB_PARAM}」という文字列が渡されてしまいます。

ビルド処理の中でインジェクト用のファイルを作成し、渡したい変数の値をファイル内に
記述する作業が必要でした。
[環境変数のインジェクト] では上記のファイルを取り出すことができるようです。

実際、ビルド後の処理⇒ [Trigger parameterized build on other projects] ⇒
[Add Parameters] ⇒ [Parameters from properties file] でスクリプト内で書き込んだファイルを直接指定すれば
環境変数のインジェクトを設定しなくても出来ましたが、
個人的には見た目的な分かりやすさの違いなのかなと思っています。
(インジェクトしたいファイルを指定する方が、ビルド後の処理の記述で渡したい変数が明確でスマート)

参考