web-dev-qa-db-ja.com

Jenkins:アップストリームの変更でマルチブランチパイプラインをトリガーする

現在、Jenkins 2.0のパイプラインアプローチをテストして、使用しているビルド環境で機能するかどうかを確認しています。

まず、環境自体について。現在、複数のSCMリポジトリで構成されています。各リポジトリには、開発のさまざまな段階の複数のブランチが含まれ、各ブランチは複数の構成でビルドされます。すべての構成がすべてのリポジトリに適用されるわけではありません。

現在、すべてのリポジトリ/ブランチは、異なる構成の Matrix Project として設定されています。各プロジェクトは、ビルド結果を成果物として公開し、これらの成果物はダウンストリームプロジェクトで使用されます。

異なるリポジトリは互いに依存しているため、アップストリームジョブでビルドが成功すると、特定のダウンストリームジョブがトリガーされます。現在はすべて動作しますが、多くの異なるプロジェクトを手作業で変更する必要があるため、新しいブランチのセットアップや構築プロセスの調整に必要な作業量は膨大です。

次に、新しいパイプラインを試してみたいと思いました。私のアイデアは、マルチブランチパイプラインプロジェクトを作成し、ビルドの指示を含むリポジトリ内にJenkinsfileを配置することでした。

主な問題は、基本的に特定のアップストリームブランチのビルドがダウンストリームブランチをトリガーする必要があるため、ビルドが相互にトリガーされるようにすることです。どのようなダウンストリームブランチをトリガーする必要があるかという情報は、アップストリームプロジェクトでは認識されていません。各ダウンストリームプロジェクトは、いくつかのアップストリームブランチからアーティファクトを取得します。アーティファクトのソースであるアップストリームビルドがビルドを完了した場合にダウンストリームビルドがトリガーされる場合が理想的なソリューションです。

問題は、下流のプロジェクトだけが本当に必要な成果物を知っていることです。ほとんどの場合、ブランチ名が一致する可能性は低いため、アップストリームプロジェクトからビルドをトリガーするのは非常に困難です。

現在、これは ReverseBuildTrigger を使用して解決されています。しかし、このことはパイプラインに近づいたらすぐに機能しなくなります。

私はこれをどのように機能させるかについて本当に迷っています。 ReverseBuildTrigger のようなものをパイプラインスクリプト内で動作させる方法はありますか?

また、1つのブランチのアップストリームが変更された場合に、すべてのブランチのダウンストリームビルド全体をトリガーすることはオプションではありません。これにより、同等のビルドが多くなりすぎます。

22
Nitram

現在、これを展開のために機能させようとしています。私が持っている最も近いものは、下流のJenkinsfileに以下を追加することです。

properties([
    pipelineTriggers([
        triggers: [
            [
                $class: 'jenkins.triggers.ReverseBuildTrigger',
                upstreamProjects: "some_project", threshold: hudson.model.Result.SUCCESS
            ]
        ]
    ]),
])

少なくともJenkinsは、「some_project」がビルドされたとき、つまり「構成の表示」ページに表示されたときにトリガーする必要があることを認識します。

ただし、これまでのところ「some_project」のビルドは、期待どおりにダウンストリームプロジェクトをトリガーしません。

言われていることは、おそらくあなたはもっと幸運があるでしょう。うまくいくかどうか教えてください。

(他の誰かが同様の質問をしました Jenkinsのマルチブランチパイプラインと上流プロジェクトの指定

10
cscutcher

宣言型マルチブランチパイプライン を使用している場合、次を使用できます。

triggers {
  upstream(upstreamProjects: "some_project/some_branch", threshold: hudson.model.Result.SUCCESS)
}

依存関係をまたいでブランチマッチングを実行する場合は、次を使用できます。

triggers {
  upstream(upstreamProjects: "some_project/" + env.BRANCH_NAME.replaceAll("/", "%2F"), threshold: hudson.model.Result.SUCCESS)
}
34
Japster24

パイプラインジョブ 構成はネイティブサポートビルドトリガー、リバースビルドトリガーを含む、ビルド後他のプロジェクトがビルドされますPipeline Multi-branchプロジェクトからブランチを指定することもできます。

残念ながら、逆トリガーは使用できませんPipeline Multi-branchjobs。逆トリガーに最も近い方法は Promoted Builds Plugin を使用することです。ただし、ブランチごとの設定はできません。

さらにSnippet Generatorは次のことを明確にします:

現在、パイプラインスクリプト内では次の変数は使用できません。

NODE_LABELS WORKSPACE SVN_REVISIONなどのSCM固有の変数

追伸たぶん唯一の方法は、upstreamからdownstreamにプロンプ​​トを出すことです。

2
luka5z