web-dev-qa-db-ja.com

Jenkinsのダウンストリームビルドのビルド番号またはアーティファクトを取得します

私はジェンキンスで仕事をしています(BIGJOBと呼びます)。ビルド手順のいくつかは、 Parameterized Trigger Plugin を使用して他のジョブ(SMALLJOBと呼びます)でビルドをトリガーし、それらが完了するのを待つことです。私がする必要があるのは、SMALLJOBでトリガーされたビルドからアーティファクトを取得することです。

もともと、私は Copy Artifact Plugin を使用して、トリガーされたSMALLJOBの「最後のビルド」からアーティファクトを取得できると考えていました。また、一度に1つのSMALLJOBしか実行されていない場合、これは確実に機能します。

しかし、私は複数のBIGJOBを実行していて、すべてが複数のSMALLJOBをトリガーしているため、「最後のビルド」の使用は、2つのSMALLJOBが同時に終了するという信頼性がありません。

特定のダウンストリームジョブからアーティファクトを取得するためのより信頼性の高い方法はありますか?ビルド番号を取得できれば、curlを使用してアーティファクトを取得できます。

23
Jason Swager

将来、この質問に(他の)問題が発生した場合:

パラメータ化されたトリガープラグインをビルドステップとして使用する場合、「トリガーされたプロジェクトがビルドを完了するまでブロックする」を有効にしてトリガーを構成すると、次の環境変数が以降のビルドステップで使用できるようになります。

  • LAST_TRIGGERED_JOB_NAME = "最後のプロジェクトが開始されました"
  • TRIGGERED_BUILD_NUMBER_ {プロジェクト名} = "最後にトリガーされたビルド番号"

バージョン2.17以降

  • TRIGGERED_JOB_NAMES = "トリガーされたすべてのプロジェクトのコンマ区切りリスト"
  • TRIGGERED_BUILD_NUMBERS_ {プロジェクト名} = "トリガーされたビルド番号のコンマ区切りリスト"
  • TRIGGERED_BUILD_RESULT_ {プロジェクト名} = "プロジェクトの最後にトリガーされたビルド結果"
  • TRIGGERED_BUILD_RESULT_ {プロジェクト名} RUN {ビルド番号} = "ビルド番号のトリガーされたビルドの結果"
  • TRIGGERED_BUILD_RUN_COUNT_ {プロジェクト名} = "プロジェクトに対してトリガーされたビルドの数"

プラグインのウェブサイトで詳細をご覧ください-質問にリンクされています。

30
tveon

私自身の答えを見つけました。プラグインやすでに設定されている変数ほど簡単ではありませんが、機能します。

Jenkins XML APIをdepth = 1(URLを完全にトラバースし、すべての情報を利用できるようにするために非常にインポート)およびXPATHで使用します。これが私が使用したURLのサンプルです:

http://jenkins/job/SMALLJOB/api/xml?depth=1&xpath=/freeStyleProject/build[action/cause/upstreamProject="%JOB_NAME%" and action/cause/upstreamBuild=%BUILD_ID%]/number/text()

これにより、適切なSMALLJOB(このBIGJOBによって開始されたもの)のビルド番号が返されます。次に、Jenkinsからのhttpダウンロードでその番号を使用して、アーカイブされたビルドファイルを取得します。

10
Jason Swager

あなたはこの関数を参照するかもしれません:

Jenkinsビルド ここで見つけることができます:

jenkinsapi.api.block_until_complete(jenkinsurl、jobs、maxwait = 12000、interval = 30、raise_on_timeout = True、username = None、password = None)

jenkinsapi.api.get_artifacts(jenkinsurl、jobid = None、build_no = None、username = None、password = None)

jenkinsapi.api.get_build(jenkinsurl、jobname、build_no、username = None、password = None)

jenkinsapi.api.get_latest_build(jenkinsurl、jobname、username = None、password = None)

jenkinsapi.api.get_latest_complete_build(jenkinsurl、jobname、username = None、password = None)

jenkinsapi.api.get_latest_test_results(jenkinsurl、jobname、username = None、password = None)

jenkinsapi.api.get_nested_view_from_url(url、username = None、password = None)

jenkinsapi.api.get_view_from_url(url、username = None、password = None)

jenkinsapi.api.grab_artifact(jenkinsurl、jobid、artifactid、targetdir、username = None、password = None)

jenkinsapi.api.install_artifacts(artifacts、dirstruct、installdir、basestaticurl)

jenkinsapi.api.search_artifact_by_regexp(jenkinsurl、jobid、artifactRegExp、username = None、password = None)

0
Kamesh Jungi