Jenkins从同一提交多分支管道开始重复构建
我们看到我们的Jenkins多分支管道的多个构建被Bitbucket中的同一个合并提交触发 一个生成标记为由“处的分支事件”触发 另一个是“提交通知” 我们在插件中设置了Jenkins URL Bitbucket服务器到Jenkins的Webhook 并在Jenkins文件设置中设置触发器,如下所示:Jenkins从同一提交多分支管道开始重复构建,jenkins,continuous-integration,bitbucket-server,Jenkins,Continuous Integration,Bitbucket Server,我们看到我们的Jenkins多分支管道的多个构建被Bitbucket中的同一个合并提交触发 一个生成标记为由“处的分支事件”触发 另一个是“提交通知” 我们在插件中设置了Jenkins URL Bitbucket服务器到Jenkins的Webhook 并在Jenkins文件设置中设置触发器,如下所示: triggers { pollSCM "" cron "H 0 * * *" } multibranchPipelineJob("${service.name}-build")
triggers {
pollSCM ""
cron "H 0 * * *"
}
multibranchPipelineJob("${service.name}-build") {
// ... unrelated code omitted
configure { project ->
project.remove(project / 'sources' / 'data' / 'jenkins.branch.BranchSource' / 'strategy' / 'properties')
def s = project / 'sources' / 'data' / 'jenkins.branch.BranchSource' / 'strategy' {
properties(class: 'java.util.Arrays$ArrayList') {
a(class: 'jenkins.branch.NoTriggerBranchProperty') {
'jenkins.branch.NoTriggerBranchProperty' ''
}
}
}
}
}
不幸的是,似乎有两个老插件没有具体的答案。看起来:
分支API插件和Git客户端插件都向Jenkins发送了触发构建的事件
我们通过抑制自动触发解决了这个问题
这可以在UI中完成,只需转到作业,从左侧选择configure,然后添加属性
抑制SCM自动触发
或者,对于代码解决方案(我最终使用了该解决方案),将其添加到seedjob.groovy中,如下所示:
triggers {
pollSCM ""
cron "H 0 * * *"
}
multibranchPipelineJob("${service.name}-build") {
// ... unrelated code omitted
configure { project ->
project.remove(project / 'sources' / 'data' / 'jenkins.branch.BranchSource' / 'strategy' / 'properties')
def s = project / 'sources' / 'data' / 'jenkins.branch.BranchSource' / 'strategy' {
properties(class: 'java.util.Arrays$ArrayList') {
a(class: 'jenkins.branch.NoTriggerBranchProperty') {
'jenkins.branch.NoTriggerBranchProperty' ''
}
}
}
}
}
更新:
朱利安的答案似乎有效,但有一个bug,它没有自动触发推送功能分支。在我们的Jenkins文件中,我们添加了:
properties([overrideIndexTriggers(true)])
这确保了git commit仍然会触发构建,尽管我们的seedjob中没有设置BranchProperty。我们在使用Bitbucket与Jenkins集成时遇到了这个问题。我们的问题是,在Bitbucket webhook上,我们从push和PR中选择了通知。此配置创建了一个具有分支名称的作业,并在创建PR时创建了另一个名为PR-XXX的作业
也许这就是原因?我们的问题是两个插件都发送了触发构建的事件。有关我们如何解决它的更多信息,请参见上面的答案。请查看。也许它会帮助你,因为问题是相似的。