Jenkins管道代码通过GitHub组织文件夹插件自动触发多个存储库

Jenkins管道代码通过GitHub组织文件夹插件自动触发多个存储库,jenkins,jenkins-pipeline,jenkinsfile,github-organizations,Jenkins,Jenkins Pipeline,Jenkinsfile,Github Organizations,这个问题与具有多个存储库的Jenkins作业自动触发器有关 在Jenkins文件中定义了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} } 使用G

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

在Jenkins文件中定义了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作业

在这种情况下,我的Jenkins文件在abc回购中,Jenkins自动触发器在abc回购中工作正常。它不适用于其他回购协议

是否有为2个或更多回购定义自动触发

是否有任何插件可以自动触发2个或更多存储库的作业


我需要在Jenkinsfile中以不同的方式定义“checkout scm”吗?

是的,您可以通过指定多个存储库(单击
添加存储库
按钮)在管道作业中使用来自scm的
管道脚本来实现这一点,假设您可以查看3个存储库的相同分支,这似乎就是您的情况

使用此配置(当然还有激活的
轮询SCM
选项),每次对三个存储库中的一个进行更改时都会触发生成

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

  • 每个存储库中都需要一个
    Jenkinsfile
  • 如果您在两个
    SCM轮询之间提交了多个项目,结果将是不可预测的(您刚刚提交的两个项目中的任何一个都可能最终生成),因此您应该不依赖于生成的是哪个项目
  • 为了解决上述问题并避免代码重复,您可能只需要从每个Jenkins文件中加载一个通用脚本,例如:
  • abc/def/ghi中的文件:
    公共管道.groovy
    脚本:
    对我来说似乎不可行。不想维护多个文件。管道作业不允许使用${env.branch_name}获取当前分支名称。这样,它只是创建单一的工作&我正在寻找3个工作开发,阶段,根据分支机构名称生产。只需在common-pipeline.groovy中保留下面的代码,就会出现错误。node(“slave”){sh”git clone github/test.git“sh”git clone github/hello.git“sh”ls-la”}java.lang.NullPointerException:无法调用org.codehaus.groovy.runtime.NullObject.invokeMethod(NullObject.java:77)上null对象上的方法调用(NullObject.java:77)
    Jenkins作业自动触发多个存储库
    :这怎么不是一个作业??否则,不能使用
    ${env.BRANCH\u NAME}
    ,文档指定它仅用于多分支项目。但是,您仍然可以通过一个小的sh脚本获得它,例如
    sh“echo”gitBranch=\$(gitBranch | cut-d'-f2)>>properties.txt“
    。对于您的最后一个问题,请问另一个问题,因为您的问题与原始问题无关,并且缺乏上下文。感谢您的输入,但在我的情况下,它将不起作用,我无法转移到管道工作。“GitHub Organization Folder Plugin”的一切都很好,除了针对多个repo的SCM轮询。如果我需要为每个repo构建不同的分支,情况会怎样?
    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'
    }()
    
    { ->
        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...
        }
    }