在Jenkins multibranch管道上触发重复构建

Tim*_*ter 6 git bitbucket jenkins bitbucket-server jenkins-pipeline

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

但是,由于某种原因,我们现在看到"双重"构建.如果查看触发的2个构建,一个由"提交通知"触发,另一个由"分支索引"触发.

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

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

我们在管道脚本中设置作业属性,但仅丢弃旧构建:

properties([buildDiscarder(logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '20'))])
Run Code Online (Sandbox Code Playgroud)

混淆的另一个原因似乎是,如果一个人应该启用轮询(没有间隔),以便推送通知适用于Git插件.Git插件的文档表明这是必需的,实际上似乎是"普通"管道构建,但似乎不需要多分支管道构建. 它是否正确? 来自Jenkins Git插件维基:

这将扫描以下所有作业:

具有构建触发器>已启用轮询SCM.不需要投票时间表.配置为在指定的URL上构建存储库配置为构建可选指定的分支或提交ID对于满足这些条件的作业,将立即触发轮询.如果轮询发现值得构建的更改,则会依次触发构建.

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

Rei*_*old 6

正如另一个答案已经建议的那样,您想要的是“不允许并发构建”选项。您可以通过Jenkinsfile

 properties ([
      buildDiscarder(logRotator(artifactNumToKeepStr: '5', daysToKeepStr: '15')),
      disableConcurrentBuilds()
    ])
Run Code Online (Sandbox Code Playgroud)

编辑:

这不是此处实际问题的解决方案。但它似乎仍然对某些人有帮助,因此,只要我们没有更好的答案,我就将其保留。


Ita*_*not 1

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

当您在Jenkins中创建“GitHub组织”作业并添加相关Git信息时,您还需要选择Jenkins构建的触发方式和频率:

在此输入图像描述

Jenkins 将按照您设置的频率扫描您配置的 GitHub 组织下的存储库。

然后,Jenkins 一旦发现有新的提交被提交,就会自动触发构建(只要配置了 Jenkins-Git webhook)。

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

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

我希望这能让我们对此事有所了解。

  • 该设置(如果不以其他方式运行,则定期运行)似乎是失败的推送通知的备份。例如,如果构建在 1 天后没有收到任何通知,则运行索引。这不是我们需要的。另外,“不允许并发构建”也不是我们所需要的——我们想要并发构建。我们遇到的问题是推送通知似乎触发了 2 个构建 - 一个构建了更改(正确),另一个没有列出任何更改(它只是说“分支索引”)... (3认同)