首页 文章

如何使用GitHub Org插件从jenkins管道(jenkinsfile)触发另一个作业?

提问于
浏览
81

如何从 Jenkinsfile 中触发另一个作业的构建?

我假设这个作业是同一个github organization下的另一个存储库,它已经有了自己的Jenkins文件 .

我也想在分支名称为master时执行此操作,因为触发任何本地分支的下游构建没有意义 .

更新:

stage 'test-downstream'
node {
     def job = build job: 'some-downtream-job-name'
}

仍然,执行时我得到一个错误

找不到名为some-downtream-job-name的参数化作业

我确信这个工作存在于jenkins中,并且与当前工作文件夹在同一组织文件夹下 . 另一项工作有自己的 Jenkinsfile .

请注意,此问题特定于GitHub Organization Plugin,它为您的GitHub组织中的每个存储库和分支自动创建和维护作业 .

3 回答

  • 65

    除了上面提到的答案:我想通过传递给第二个管道的简单参数开始一个工作,并在https://dzone.com/refcardz/continuous-delivery-with-jenkins-workflow找到答案 .

    所以我用过:

    stage ('Starting ART job') {
        build job: 'RunArtInTest', parameters: [[$class: 'StringParameterValue', name: 'systemname', value: systemname]]
    }
    
  • 18

    管道中的命令 build 用于触发jenkins中的其他作业 .

    Example on github

    该工作必须存在于Jenkins中并且可以进行参数化 . 至于分支,我想你可以read it from git

  • 81

    首先,在 node 中包装 build 步骤是浪费执行程序槽 . 您的上游执行者将无缘无故地闲置 .

    其次,从multibranch项目中,您可以使用环境变量 BRANCH_NAME 使逻辑以当前分支为条件 .

    第三, job 参数采用绝对或相对作业名称 . 如果您给出一个没有任何路径限定的名称,那么它将引用同一文件夹中的另一个作业,在多分支项目的情况下,这将意味着同一个存储库的另一个分支 .

    因此,你打算写的可能是

    if (env.BRANCH_NAME == 'master') {
        build '../other-repo/master'
    }
    

相关问题