2016年4月18日月曜日

[Jenkins] 複数ある上流ジョブの成果物を使う

Jenkins での成果物コピーには Copy Airtifact Plugin を使うことが多いと思います。
Copy Airtifact Plugin は、指定のジョブ、指定のビルドの成果物をワークスペースにコピーするプラグインです。

今回は、以下のようなパイプラインがあったとき、下流ジョブ(TEST)が上流ジョブ(BUILD_DEBUG or BUILD_RELEASE)から成果物をコピーして利用したいケースを考えます。

TEST は BUILD_DEBUG,BUILD_RELEASE のどちらからも流れてきます。
そして TEST ジョブではそれぞれ上流の成果物を利用するとします。

通常、成果物のコピーをする場合、Copy Airtifact Plugin を使うと思いますが、
不特定のジョブからコピーを行う場合も、このプラグインを使います。


まず、コピー元のジョブ名には環境変数を使えます。
2017/2/9 追記
執筆時は、ビルドパラメーターへの設定は必須ではありませんでしたが、現在はここで設定する変数をビルドパラメーターとしておく必要があるようです。

ここでは、ARTIFACT_JOB としました。
この ARTIFACT_JOB を上流ジョブ名にするために、Parameterized Trigger Plugin を使ってジョブ名をパラメータとして引き渡します。
(同様に、ビルド番号も環境変数 ARTIFACT_NUMBER に設定し、上流ジョブから受け取るようにしています。)


設定としては、「Predefined parameters」に
AIRTIFACT_JOB=$JOB_NAME
AIRTIFACT_NUMBER=$BUILD_NUMBER
として引き渡します。

もう1つ重要な設定があります。
コピー元のジョブ名に環境変数を使用した場合、コピー元のジョブからコピーの許可を得る必要があります。
コピー元のジョブの設定に「成果物のコピーの許可」がありますので、コピー先のジョブ名を入力してください。


設定は以上で完了です。
実際に動かしてみましょう。

動作結果
BUILD_DEBUG から実行した場合



BUILD_RELEASE から実行した場合



このように BUILD_DEBUG から debug.txt、BUILD_RELEASE から log.txt が利用されるようになりました。
処理する内容は同じで、対象だけが異なる場合に役立つと思います。
(※ マトリックスを組む手もあります)

今回は以上です。

2 件のコメント:

  1. 下流のジョブ設定で、上流ジョブから渡された引数を定義(初期化?)する必要があるらしいです。

    返信削除
    返信
    1. ありがとうございます!
      これを書いてた時はなくても動いてたんですが、必要になったみたいですね。
      追記しておきました。

      削除