Jenkins管道代码通过GitHub组织文件夹插件自动触发多个存储库
这个问题与具有多个存储库的Jenkins作业自动触发器有关 在Jenkins文件中定义了3个要签出的回购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
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...
}
}