当前位置: 首页 > 知识库问答 >
问题:

在Jenkins多分支管道上触发的重复构建

常甫
2023-03-14

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

然而,出于某种原因,我们现在看到了“双重”构建。如果查看触发的两个生成,一个由“提交通知”触发,另一个由“分支索引”触发。

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

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

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

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

另一个困惑的来源似乎是,是否应该启用轮询(没有间隔),以便推送通知为Git插件工作。Git插件的文档表明,这是必需的,而且似乎适用于“正常”管道构建,但似乎不适用于多分支管道构建。这是正确的吗?从Jenkins Git插件wiki:

这将扫描所有的工作:

拥有构建触发器

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

共有3个答案

於英朗
2023-03-14

我也在使用一个多分支管道,我可能有一些信息给你。

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

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

然后,Jenkins会在发现新提交后自动触发构建(只要配置了Jenkins Git webhook)。

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

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

我希望这能对这件事有所帮助。

靳睿
2023-03-14

在Jenkins多分支项目配置中,将“发现分支”从“所有分支”更改为“排除作为PR归档的分支”。

平俊茂
2023-03-14

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

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

编辑:

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

 类似资料:
  • 我对使用Jenkins文件和GIT插件的Jenkins多分支pipleline有一个问题。 问题是,每次向暂存分支推送都会触发master管道。所需的行为是,推送到暂存分支仅触发用于暂存的管道,而推送到主分支仅触发主管道 这是我的詹金斯档案 我将分享一些日志:这是主分支的日志 这是主分支的日志,但只有暂存有一个新的提交: 注意“已发现更改”,即使主分支上的头未更改 詹金斯·弗。2.190.1 Gi

  • 问题内容: 我目前正在测试Jenkins 2.0的管道方法,以查看它是否适用于我正在使用的构建环境。 首先是环境本身。当前它由多个SCM存储库组成。每个存储库都包含多个分支,用于开发的不同阶段,并且每个分支都使用多种配置构建。并非所有配置都适用于每个存储库。 当前,每个存储库/分支都被设置为适用于不同配置的矩阵项目。每个项目将其构建结果作为工件公开,并且这些工件在下游项目中使用。 不同的存储库彼此

  • 我有一个参数化的Jenkins多分支管道,使用GitHub repo作为Jenkins文件和一些脚本的源。管道被配置为在Webhook上触发分支和拉请求,但我还希望只对主分支使用参数化的cron触发器,特别是在工作日每4小时一次。 我使用声明性管道语法,但如果必要,我愿意使用脚本化管道。 我使用参数化调度器插件来实现带有参数的cron触发器。 这个管道示例捕获了我试图实现但不支持的内容: 这项功能

  • 我有一个Jenkins管道作业(不是多分支管道),管道内的逻辑之一是,当gitlab scm上有一个合并请求时,我想基于触发此生成的合并请求的源分支构建一些东西。 我的问题是,在Jenkinsfile中,我如何动态地获取这个源分支,签出代码,并创建一个工作区,以便在这个分支上运行构建?

  • 问题内容: 标题大多是这样说的。如何从远程git存储库触发Jenkins多分支管道项目构建? “ Trigger远程构建”构建触发器选项似乎不起作用,因为没有保存您设置的令牌。 问题答案: 目前(Jenkins 2.22),“触发触发器远程构建”构建触发选项在多分支管道作业配置中可见,但不起作用(如果您检查并指定了令牌,则无论如何保存后都会重置)。根据这个,这是故意的触发器不能确定,但一个错误,它

  • 我目前设置了一个 Jenkins 多分支管道作业,该作业基于 Gitlab 服务器上托管的 Git 存储库。Jenkins 可以读取存储库中的分支,并为存储库中的每个分支创建一个作业。但是我不知道如何在Gitlab中使用webhook触发作业。 我的问题是: > < li> 如何从Gitlab服务器触发在Jenkins中创建新的分支作业?我看不到一个新分支的webhook被推。 如何触发单个分支的