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")

我们看到我们的Jenkins多分支管道的多个构建被Bitbucket中的同一个合并提交触发

一个生成标记为由“处的分支事件”触发

另一个是“提交通知”

我们在插件中设置了Jenkins URL

Bitbucket服务器到Jenkins的Webhook

并在Jenkins文件设置中设置触发器,如下所示:

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的作业


也许这就是原因?

我们的问题是两个插件都发送了触发构建的事件。有关我们如何解决它的更多信息,请参见上面的答案。请查看。也许它会帮助你,因为问题是相似的。