Jenkins 从同一个提交多分支管道开始重复构建

Kai*_*Kai 6 continuous-integration jenkins bitbucket-server

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

一个构建被标记为触发:“Branch event at”

另一个由:“提交通知”

我们在插件中设置了 Jenkins 网址

Bitbucket 服务器 Webhook 到 Jenkins

并在 Jenkinsfile 设置中有一个我们的触发器,如下所示:

triggers {
    pollSCM ""
    cron "H 0 * * *"
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,似乎有几个老问题没有具体的答案。

Kai*_*Kai 0

看起来:Branch API Plugin和 the 都Git client plugin在向 Jenkins 发送触发构建的事件。

我们通过抑制自动触发解决了这个问题。

这可以在 UI 中完成,只需转到您的作业,从左侧选择配置,然后添加属性

抑制自动 SCM 触发。

或者,对于代码解决方案(我最终使用的),将其添加到 Seedjob.groovy 中,如下所示:

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' ''
                }             
            }
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

更新:

朱利安的答案似乎有效,但有一个错误,它不会自动触发推送到功能分支。在我们的 Jenkinsfile 中我们添加了:

properties([overrideIndexTriggers(true)])
Run Code Online (Sandbox Code Playgroud)

尽管我们的种子作业中有 NoTriggerBranchProperty,这确保了 git commit 仍然会触发构建。