通过在Jenkinsfile中轮询多个GIT repos来触发作业

时间:2017-11-22 16:34:15

标签: git jenkins-pipeline polling

Jenkinsfile with two git repositories处,这是在单个Jenkins作业中使用多个GIT存储库的示例:

node {
    dir('RepoOne') {
        git url: 'https://github.com/somewhere/RepoOne.git'
    }
    dir('RepoTwo') {
        git url: 'https://github.com/somewhere/RepoTwo.git'
    }

    sh('. RepoOne/build.sh')
    sh('. RepoTwo/build.sh')
}

如何配置此作业以跟踪这两个存储库的SCM更改,以便每次至少有一个存储库有更新时触发作业?

问题是作业轮询不是Jenkinsfile中提到的存储库,而是Jenkinsfile本身的存储库(它存储在一个特殊的存储库中,而不是与源代码一起存储),这在GUI配置中提到工作

使用旧的Jenkins(没有编码管道)和SVN插件非常简单,因为所有N个存储库都可以在GUI配置中提及,签出到单个工作区的单独子目录并同时进行轮询。

如何使用GIT + Jenkins Pipeline-As-Code获得相同的结果?我试图在Jenkinsfile中也使用“poll:true”选项,但它没有帮助。那么这个选项呢?

更新1:这是我真正使用的管道脚本,它不起作用:

properties([
    pipelineTriggers([
        scm('H/5 * * * *')
    ])
])

node {
  stage ('Checkout') {
    dir('cplib') {
      git(
      poll: true,
          url: 'ssh://git@<server>:<port>/base/cplib.git',
          credentialsId: 'BlueOceanMsl',
          branch: 'master'
      )
    }
    dir('cpmffmeta') {
      git(
      poll: true,
          url: 'ssh://git@<server>:<port>/base/cpmffmeta.git',
          credentialsId: 'BlueOceanMsl',
          branch: 'master'
        )
    }
  }

  stage ('Build') {
    ...
  }

2 个答案:

答案 0 :(得分:3)

我找到了问题的原因。这是https://issues.jenkins-ci.org/browse/JENKINS-37731描述的错误。我使用了错误的语法。正确的看起来如此:

properties([
    pipelineTriggers([
        [$class: "SCMTrigger", scmpoll_spec: "H/5 * * * *"],
    ])
])

答案 1 :(得分:0)

git步骤应该有一个“轮询”选项,您将其设置为true,然后将作业配置为在scm更改时轮询。您还可以使用通用scm步骤来进行git checkout并确保将其配置为轮询。如果设置“poll:true”不起作用,那么我怀疑这是一个错误。但是,您可能需要首先手动运行至少一个作业。