我们看到 Jenkins 多分支管道项目触发了重复构建。通常使用来自 Bitbucket 的推送通知(使用此插件)触发构建:https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview
但是,由于某种原因,我们现在看到了“双重”构建。如果您查看触发的 2 个构建,一个是由“提交通知”触发,另一个是由“分支索引”触发。
是什么导致了分支索引,为什么会触发构建?我们不是添加或删除分支,这只是正常的提交/推送。
更复杂的是,这种情况并不总是发生。有一次我认为这只会在合并后发生,但事实并非如此。另外,阻止它的一种方法似乎是删除作业的构建历史记录(这显然不理想)。
我们正在通过管道脚本设置作业的属性,但只是为了丢弃旧版本:
properties([buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '20'))])
另一个令人困惑的来源似乎是是否应该启用轮询(无间隔)以便推送通知适用于 Git 插件。 Git 插件的文档表明这是必需的,并且确实似乎是“正常”管道构建所需的,但多分支管道构建似乎不需要。 这是正确的吗? 来自 Jenkins Git 插件 wiki:
这将扫描所有符合以下条件的作业:
启用构建触发器 > 轮询 SCM。没有投票时间表 必需的。配置为在指定的 URL 构建存储库 配置为构建可选指定的分支或提交 ID 对于满足这些条件的职位,将立即进行投票 触发。如果轮询发现值得构建的更改,则构建将 依次被触发。
我们正在使用 Bitbucket 4.8.4 和 Jenkins 2.30(以及所有最新的管道插件)。
正如其他答案已经建议的那样,“不允许并发构建”选项就是您想要的。 您可以通过
Jenkinsfile
: 获得该信息
properties ([
buildDiscarder(logRotator(artifactNumToKeepStr: '5', daysToKeepStr: '15')),
disableConcurrentBuilds()
])
编辑:
这不是实际问题的解决方案。但它对某些人来说似乎仍然有帮助,所以只要我们没有更好的答案,我就会离开它。
在 Jenkins 多分支项目配置中,将“发现分支”从“所有分支”更改为“排除归档为 PR 的分支”。
您表示您正在使用https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview。如果您仍在使用该插件,我怀疑您会对现在似乎是 jenkins/stash (又名 bitbucket 服务器)集成支持的插件感到更满意:https://marketplace.atlassian.com/plugins/nl .topicus.bitbucket.bitbucket-webhooks/服务器/概述。请注意它如何表示您需要“至少需要 Bitbucket 服务器的 bitbucket-webhooks-plugin 的此提交”在 bitbucket 分支源插件文档中。我们正在使用它,我从未见过同一个推送通知触发两个构建。当您手动触发构建时,是的,但不是通过相同的推送通知。 :)
当多分支管道配置为“发现分支”时,检查构建脚本是否没有额外的触发器。在我们的例子中,管道 Groovy 脚本中有一个
trigger
部分,有时会触发单独的构建:
pipeline {
triggers {
bitbucketPush()
}
...
从 groovy 脚本中删除
trigger
部分会停止双重构建。
我知道这是一个老问题。希望这个答案能让其他人对检查内容有更多的了解。