15

这个问题与具有多个存储库的 Jenkins 作业自动触发器有关。

在 Jenkinsfile 中定义了 3 个 repo 以结帐。

 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 中以不同的方式定义“checkout scm”?

4

1 回答 1

9

是的,您可以Pipeline script from SCM通过指定多个存储库(单击Add Repository按钮)使用管道作业中的选项来做到这一点,假设您可以为您的 3 个存储库查看相同的分支,这似乎是您的情况。

在此处输入图像描述

使用此配置(当然还有Poll SCM激活的选项),每次对三个存储库之一进行更改时都会触发构建。

关于此解决方案的更多提示:

  1. 您需要Jenkinsfile每个存储库中
  2. 如果您在两个之间提交了多个项目SCM polls,结果将是不可预测的(您刚刚提交的两个项目中的任何一个最终都可以构建),因此您不应依赖于构建哪个项目
  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...
    }
}
于 2016-08-10T14:10:07.650 回答