web-dev-qa-db-ja.com

Jenkins-ジョブ間で変数を渡しますか?

Jenkinsには2つのジョブがありますが、どちらも同じパラメーターが必要です。

パラメーターで最初のジョブを実行して、2番目のジョブをトリガーするときに同じパラメーターが使用されるようにするにはどうすればよいですか?

77
Stefan Kendall

Parameterized Trigger Plugin を使用すると、1つのタスクから別のタスクにパラメーターを渡すことができます。

アップストリームからダウンストリームに渡したこのパラメーターも追加する必要があります。

69
Łukasz Rżanek

1.ビルド後のアクション> [他のプロジェクトのトリガーパラメーター化ビルド]を選択します

2.環境変数に値を入力します。値はJenkins Build Parametersにすることもできます。

詳細な手順はこちらをご覧ください:-

https://itisatechiesworld.wordpress.com/jenkins-related-articles/jenkins-configuration/jenkins-passing-a-parameter-from-one-job-to-another/

役に立てば幸いです:)

29
Vinu Joseph

受け入れられた回答 は、私のユースケースでは機能しません。あるジョブでパラメータを動的に作成し、別のジョブに渡す必要がありました。 Mark McKenna が言及しているように、シェルビルドステップからビルド後のアクションに変数をエクスポートする方法はないようです。

Parameterized Trigger Plugin を使用して回避策を達成しました。値をファイルに書き込み、そのファイルを「Add post-build action」->「Trigger parameterized build ...」でインポートするパラメーターとして使用します[パラメータの追加]-> [プロパティファイルのパラメータ]を選択します。

21
Nigel Kirby

上記の答えには更新が必要だと思います:

アップストリームビルドアーティファクトを格納する動的ディレクトリを作成しようとしていたので、アップストリームジョブのビルド番号をダウンストリームジョブに渡したいと思っていましたが、上記の手順を試してもうまくいきませんでした。仕組みは次のとおりです。

  1. 成果物のコピープラグインを使用して、現在のジョブから成果物をコピーしました。
  2. アップストリームジョブのビルド後のアクションで、「SOURCE_BUILD_NUMBER = $ {BUILD_NUMBER}」などの変数を追加し、ダウンストリームジョブをトリガーするように構成しました。
  3. ダウンストリームジョブがディレクトリを作成するために$ SOURCE_BUILD_NUMBERを取得できなかったことを除いて、すべてが機能しました。
  4. そのため、この変数を使用するには、下の図のように、ダウンストリームジョブで同じ変数をパラメーター変数として定義する必要があることがわかりました。

enter image description here

これは、jenkinsの新しいバージョンでは、ダウンストリームジョブでも変数を定義する必要があるためです。お役に立てば幸いです。

12
Tarun

(グーグル仲間向け)

Build Flow Plugin を使用して深刻なパイプラインを構築している場合、次のようにDSLを使用してジョブ間でパラメーターを渡すことができます。

他のジョブに渡すために、使用可能な文字列パラメーター「CVS_TAG」を想定します。

build("pipeline_begin", CVS_TAG: params['CVS_TAG'])
parallel (
   // will be scheduled in parallel.
   { build("pipeline_static_analysis", CVS_TAG: params['CVS_TAG']) },
   { build("pipeline_nonreg", CVS_TAG: params['CVS_TAG']) }
)
// will be triggered after previous jobs complete
build("pipeline_end", CVS_TAG: params['CVS_TAG'])

利用可能な変数/パラメータを表示するためのヒント:

// output values
out.println '------------------------------------'
out.println 'Triggered Parameters Map:'
out.println params
out.println '------------------------------------'
out.println 'Build Object Properties:'
build.properties.each { out.println "$it.key -> $it.value" }
out.println '------------------------------------'
10
Offirmo

まだコメントできないので、ナイジェルカービーのものに加えて私の答えを追加してください:

動的に作成されたパラメーターを渡すには、「Execute Shell」タイルで変数をエクスポートし、「他のプロジェクトのトリガーパラメーター化ビルド」=>「事前定義パラメーター」=>「YOUR_VAR = $ YOUR_VAR」を渡します。私のチームはこの機能を使用して、ビルドジョブから展開ジョブにnpmパッケージバージョンを渡します

更新:上記はJenkinsが注入したパラメーターに対してのみ機能します。シェルから作成されたパラメーターは同じメソッドを使用する必要があります。例えば。 YOUR_VAR = $ {YOUR_VAR}> variable.propertiesをエコーし​​、そのファイルをダウンストリームに渡します

7
Shawn

PomバージョンをダウンストリームのRundeckジョブに渡す必要があるときに、同じ問題に直面しました。

私がやったことは、プロパティファイルを介したパラメータインジェクションを使用することでした:

1)シェルを介してプロパティファイルにプロパティを作成します。

ビルドアクション:

  • シェルスクリプトを実行する
  • 環境変数を注入する

例: プロパティ定義

2)定義されたプロパティをダウンストリームジョブに渡す:ビルド後のアクション:

  • 他のプロジェクトでパラメーター化ビルドをトリガーする
  • パラメーターの追加:現​​在のビルドパラメーター
  • パラメーターの追加:定義済みパラメーター

例: プロパティ送信

3)その後、ダウンストリームRundeckジョブで$ POM_VERSIONを使用することができました。

/!\ Jenkinsバージョン:1.636

/!\トリガーされたビルドを作成するときに何らかの理由で、プロパティを渡すためにオプション「現在のビルドパラメーター」を追加する必要がありました。

2
Eli Mous

答えを読んで、私が好きな別のオプションが表示されないので、それも提供します。私はジョブのパラメーター化が大好きですが、それが常にうまくスケールするとは限りません。最初のジョブのすぐ下流ではなく、パイプラインのさらに下にあるジョブがある場合、パラメーターを最後まで渡すことができるように、パイプライン内のすべてのジョブをパラメーター化する必要はありません。または、他のさまざまなジョブ(特に1つの親ジョブまたはマスタージョブに必ずしも関連付けられていないもの)で使用される多数のパラメーターがある場合、パラメーター化は機能しません。

これらの場合、値をプロパティファイルに出力し、 EnvInject プラグインを使用して必要なジョブに値を挿入します。これは動的に実行できます。これは、パラメーター化されたジョブがまだ使用されている上記の別の回答からの問題を解決する別の方法です。このソリューションは、多くのシナリオで非常にうまく拡張できます。

2
tbradt

Hudson Groovy builder を使用してこれを行うことができます。

パイプラインの最初の仕事

enter image description here

パイプラインの2番目のジョブ

enter image description here

1
CAMOBAP

この他の投稿で私の答えを見てください:

私のために働いた(パラメータは親ジョブだけでなく両方のジョブで指定する必要がある)

https://stackoverflow.com/a/40348900/2010136

0
user2010136