Downstreamジョブから情報を収集する

JenkinsにおいてジョブAから別のジョブBを呼び出した後、ジョブAの中でジョブBに関連する情報を参照したいケースがあったりしますよね。例えば、ジョブBの中でAMIを作成し、ジョブAでは作成されたAMIのami-idを知りたいとか。こんな時どうするか。

ざっくり言うと下記。 - 取得したい情報をジョブBの中で環境変数に設定する - ジョブAでは、ジョブBのジョブ情報から環境変数を取得する

下記がジョブのサンプル。 - ジョブB (呼び出される側)

node {
    stage("set env") {
        env.DOWNSTREAM_MSG = "Hello, upstream"
        echo env.DOWNSTREAM_MSG
    }
}
  • ジョブA (呼び出す側)
node {
    stage('call downstream') {
        def my_job = build job: 'downstream-job', wait: true
        echo my_job.getBuildVariables().DOWNSTREAM_MSG
    }
}
  • ジョブAでは、build jobを利用してジョブBを呼び出している
  • このbuild stepは、RunWrapperオブジェクトを返す
  • RunWrapperオブジェクトにあるgetBuildVariables()メソッドは当該ジョブ(downstreamジョブ)の中で設定された環境変数のmapを返す
  • keyは環境変数名で、valueがその値
  • このmapから取得する

参考