web-dev-qa-db-ja.com

Jenkinsパイプラインコードは、GitHub組織フォルダープラグインを介して複数のリポジトリーで自動トリガーします

この質問は、複数のリポジトリを持つJenkinsジョブ自動トリガーに関連しています。

Jenkinsfileでチェックアウトする3つのリポジトリを定義しました。

 node('slave'){
 git clone github.com/owner/abc.git -b ${env.BRANCH_NAME}
 git clone github.com/owner/def.git -b ${env.BRANCH_NAME}
 git clone github.com/owner/ghi.git -b ${env.BRANCH_NAME}
 }

Github組織プラグインを使用してJenkinsジョブを構成しました。

この場合、私のJenkinsfileはabcリポジトリにあり、Jenkins自動トリガーはabcリポジトリで正常に機能しています。他のリポジトリでは機能しません。

とにかく、2つ以上のリポジトリの自動トリガーを定義する方法はありますか?

2つ以上のリポジトリのジョブを自動トリガーできるプラグインはありますか?

Jenkinsfileで「チェックアウトscm」を別の方法で定義する必要がありますか?

14
Nitin

はい、Pipeline script from SCMオプションをパイプラインジョブで指定し、複数のリポジトリを指定します(Add Repositoryボタン)、3つのリポジトリの同じブランチを監視できると想定します。

enter image description here

この構成(そしてもちろんPoll SCMオプションがアクティブ化されている場合)、3つのリポジトリのいずれかに変更が加えられるたびにビルドがトリガーされます。

この解決策に関するいくつかのヒント:

  1. a Jenkinsfile各リポジトリにが必要です
  2. 2つの間に複数のプロジェクトをコミットした場合SCM polls結果は予測不可能です(先ほどコミットした2つのプロジェクトのどちらかが最終的にビルドされる可能性があります)。したがって、ビルドするプロジェクトに依存しないを実行する必要があります。
  3. 以前のポイントを解決し、コードの重複を回避するには、次のような一般的なスクリプトを各Jenkinsfileからロードする必要があります。

Abc/def/ghiのJenkinsfile:

node {
    // --- Load the generic pipeline ---
    checkout scm: [$class: 'GitSCM', branches: [[name: '*/master']], extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: 'http://github/owner/pipeline-repo.git']]]
    load 'common-pipeline.groovy'
}()

common-pipeline.groovy 脚本:

{ ->
    node() {
       git clone github.com/owner/abc.git
       git clone github.com/owner/def.git
       git clone github.com/owner/ghi.git            

       // Whatever you do with your 3 repos...
    }
}
8
Pom12