【发布时间】:2017-03-30 17:54:16
【问题描述】:
我们看到 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(以及所有最新的管道插件)。
【问题讨论】:
-
这只是一个猜测:如果存储库服务器上的时钟与 Jenkins 服务器上的时钟相比,我已经看到了类似的问题。您可以尝试添加静默期 (jenkins.io/blog/2010/08/11/quiet-period-feature)。
-
@jherb 感谢您提供信息 - 但我找不到如何在 Jenkinsfile 的管道构建中设置静默期(我们需要在脚本上设置它,因为我们正在设置其他构建属性 -这将覆盖通过 GUI 设置的任何其他设置)
-
我猜你可以使用
sleep 60之类的东西,如本例所示:jenkins.io/doc/pipeline/examples/#timestamper-wrapper(在调用 scm 或 git 命令之前) -
您的 2 个构建是否在推送时立即启动?
标签: git jenkins bitbucket jenkins-pipeline bitbucket-server