Jenkinsでジョブ間のパラメータの引き渡しが全然上手くいかなかったのでメモ
はじめに
初めてJenkinsでテスト用の簡単なjobを作成したが、なかなか上手くいかなかったので備忘録。
やりたかったこと
表題の通り、Job1からJob2へのパラメータの引き渡しがしたかった。
成功手順
①プラグインをインストール
- Jenkins Parameterized Trigger pluginのプラグインを利用可能な状態にする
②環境変数のインジェクトを設定
- Job1のシェルスクリプト内で、下記のようにプロパティファイルを作成し、渡したい変数
JOB_PARAM
をファイル内に書き込む
JOB_PARAM
をファイル内に書き込む※ファイルが生成されない処理ルート(生成前にexit等)が存在すると、後続Jobでエラーが発生するため注意
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
を下記のように利用可能
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] でスクリプト内で書き込んだファイルを直接指定すれば
環境変数のインジェクトを設定しなくても出来ましたが、
個人的には見た目的な分かりやすさの違いなのかなと思っています。
(インジェクトしたいファイルを指定する方が、ビルド後の処理の記述で渡したい変数が明確でスマート)
参考
Author And Source
この問題について(Jenkinsでジョブ間のパラメータの引き渡しが全然上手くいかなかったのでメモ), 我々は、より多くの情報をここで見つけました https://qiita.com/stranger_broccoli/items/cd5c13a0ad578057d3de著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .