2016-11-16 76 views
4

我们看到在Jenkins多分支管道项目上触发重复构建。通常使用来自使用此插件的Bitbucket的推送通知来触发构建:https://marketplace.atlassian.com/plugins/com.nerdwin15.stash-stash-webhook-jenkins/server/overview在Jenkins多分支管道上触发的重复构建

但是,我们现在看到'double'构建出于某种原因。如果您查看触发的两个构建版本,则由“提交通知”触发,另一个由“分支索引”触发。

什么导致分支索引,为什么它触发构建?我们不添加或删除分支,这只是一个正常的提交/推送。

为了使它更复杂,它不会一直发生。有一次,我认为这只发生在合并后,但事实并非如此。此外,阻止它的一种方法似乎是删除作业的构建历史记录(这显然不是理想的)。

我们正在从管道脚本任务设置属性,但只废旧构建:

properties([buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '20'))]) 

混乱的另一个来源似乎是,如果一个人应该有顺序启用轮询(无间隔)推送通知为Git插件工作。 Git插件的文档表明这是必需的,确实看起来是用于'普通'管道构建,但似乎并不需要多分支管道构建。 这是正确的吗?从詹金斯的Git插件维基:

这将扫描的所有作业:

有建立触发器>民意测验SCM启用。没有轮询时间表是 必需的。被配置为在指定的URL上构建存储库 被配置为构建可选的指定分支或提交ID 对于满足这些条件的作业,轮询将立即触发 。如果轮询发现值得构建的变化,则构建将会触发 。

我们使用的是Bitbucket 4.8.4和Jenkins 2.30(以及所有最新的管道插件)。

+0

这只是一个猜测:如果存储库服务器上的时钟与Jenkins服务器上的时钟相比,我已经看到类似的问题。您可能会尝试添加安静期(https://jenkins.io/blog/2010/08/11/quiet-period-feature/)。 – jherb

+0

@jherb感谢您的信息 - 但我找不到如何在Jenkinsfile的管道中创建安静期(我们需要在脚本上设置它,因为我们正在设置其他构建属性 - 这将覆盖其他任何设置集通过图形用户界面) –

+0

我想你可以像在这个例子中使用'sleep 60'这样的东西:https://jenkins.io/doc/pipeline/examples/#timestamper-wrapper(在你调用scm或git命令之前) – jherb

回答

0

我也在使用多分支管道,我可能会为您提供一些信息。

当您在詹金斯一“GitHub的组织”的工作,并添加相应的Git的信息,你还需要选择詹金斯如何构建被触发的时间和频率:

enter image description here

詹金斯将扫描您所配置的GitHub组织下的存储库就像您设置的时间一样多。然后,只要Jenkins-Git webhook被配置,Jenkins就会自动触发一个构建,一旦它发现一个新的提交已经被提交(只要Jenkins-Git的webhook已经配置)。

当分支索引发生时,它也会触发构建。

在其他Jenkins作业样式中,您可以配置“不允许并发构建”,但我找不到多分支作业样式的此设置。

我希望对此有所了解。

+0

该设置(定期,否则运行)似乎是失败的推送通知的备份。例如,如果构建版在1天后没有收到任何通知,则运行索引。这不是我们所需要的。另外,'不允许并发构建'也不是我们所需要的 - 我们想要并发构建。我们遇到的问题是,推送通知似乎触发了2个构建 - 一个构建更改(正确),另一个不列出任何更改(它只是说'Branch Indexing')... –

4

由于其他答案已经建议“不允许并发构建”选项是你想要的。 你可以得到通过Jenkinsfile

properties ([ 
     buildDiscarder(logRotator(artifactNumToKeepStr: '5', daysToKeepStr: '15')), 
     disableConcurrentBuilds() 
    ]) 

编辑:

这不是这里的实际问题的解决方案。但对某些人来说似乎仍然有帮助,所以只要我们没有更好的答案,我就会离开它。

+0

是但我们想要并发构建。禁用它们只会排队他们不是吗?我不想要的是构建被触发,不应该。 –

+0

你对排队是正确的。我会编辑我的答案,至少清楚它不能回答你的具体问题。 – Reinhold

0

您表示您在使用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/server/overview。请注意它是如何表示您需要“至少Bitbucket服务器的bitbucket-webhooks-plugin的这一提交”in the bitbucket branch source plugin docs。我们正在使用它,并且我从来没有见过两个构建是由相同的推送通知触发的。当你手动触发构建时,是的,但不是通过相同的推送通知。 :)

相关问题