首页 > 解决方案 > 仅针对特定分支限制 Jenkins 并发构建

问题描述

我一直在寻找如何做到这一点,我开始认为这是不可能的。与此类似的每个问题似乎都与限制某些节点运行或整个管道有关。

我们在 Jenkins 中有一个多分支管道,用于处理 PR 构建、分段测试和生产发布。这三个中的每一个都通过when每个阶段中的选项进行处理,因为区别在于是否运行某些阶段。

虽然我希望能够为 PR 进行并发构建,因为我们可以打开许多需要更新的文件,但我们希望限制暂存测试的并发执行数量,因为我们需要同时进行一次暂存运行才能能够来正确控制它。

在以前的版本中,我们有几个不同的管道来处理每个场景,但我们正在更新它,使其只有一个多分支管道,并根据正在考虑的分支运行一个或另一个场景。在之前的版本中,我们使用disableConcurrentBuilds()staging test 构建,它运行良好,但使用此选项,我们现在看到整个管道一次只运行一个构建,这使得完成 PR 构建变得非常缓慢。如果 PR 构建正在运行,由于不能同时运行,其余的 PR 只是等待它完成,以便下一个可以开始运行。

有没有一种方法可以限制某些分支或每个分支的并发构建数量?这将允许我们仅对运行暂存测试的分支禁用此功能,同时仍然能够为打开的 PR 并发运行。

谢谢!

标签: jenkinsjenkins-pipeline

解决方案


Jenkins UI 不允许您在每个分支的基础上指定它,但如果您通过 jenkinsfile 配置作业是可能的

if(env.BRANCH_NAME.startsWith("develop")){
  properties([disableConcurrentBuilds()])
} else{
  properties([])
}

如果这对您来说太粗略,因为您不希望多个分支同时到达测试或部署阶段,您可以使用锁和里程碑来尽可能允许并发,但一次只允许单个管道通过给定阶段


推荐阅读