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

如何限制Jenkins并发多分支管道构建?

公冶伟
2023-03-14

我正在考虑在Jenkins中将并发构建的数量限制在一个特定的数量,利用多分支管道工作流,但在docs或google中还没有找到任何好的方法来做到这一点。

一些文档说这可以在Jenkinsfile的阶段步骤中使用并发来完成,但我在其他地方也读到这是一种不推荐的方式。

看起来最近发布了一些通过作业属性限制并发性的东西,但我找不到相关文档,而且我在遵循代码方面遇到了问题。我发现的唯一一件公关展示了以下内容:

properties([concurrentBuilds(false)])

但我很难让它工作。

有没有人知道或有一个好例子来说明如何限制给定多分支项目的并发构建数量?也许是一个Jenkinsfile片段,它展示了如何限制或限制多分支并发构建的数量?

共有3个答案

聂和宜
2023-03-14

正如@VadminKotov所指出的,也可以使用jenkins声明性管道禁用并发构建:

pipeline {
    agent any
    options { disableConcurrentBuilds() }
    stages {
        stage('Build') {
            steps {
                echo 'Hello Jenkins Declarative Pipeline'
            }
        }
    }
}

禁用ConcurrentBuilds

不允许同时执行管道。可用于防止同时访问共享资源等。例如:options{disableConcurrentBuilds()}

松俊才
2023-03-14

使用可锁定资源插件(GitHub)可以限制并发构建或阶段。我总是使用这种机制来确保不同时执行发布/发布步骤,而可以同时构建正常阶段。

echo 'Starting'
lock('my-resource-name') {
  echo 'Do something here that requires unique access to the resource'
  // any other build will wait until the one locking the resource leaves this block
}
echo 'Finish'
凌嘉志
2023-03-14

找到了我正在寻找的东西。您可以使用Jenkinsfile中的以下块来限制并发构建。

node {
  // This limits build concurrency to 1 per branch
  properties([disableConcurrentBuilds()])
  
  //do stuff
  ...
}

同样可以通过声明性语法实现:

pipeline {
    options {
        disableConcurrentBuilds()
    }
}
 类似资料:
  • 问题内容: 我正在利用多分支管道工作流,在Jenkins中将并发构建的数量限制为特定数量,但是在docs或google中找不到任何好的方法。 一些文档说这可以在Jenkinsfile步骤中使用并发来完成,但是我在其他地方也读过,这是不推荐使用的方式。 似乎最近发布了一些用于限制并发通过的东西,但是我找不到它的文档,并且在遵循代码时遇到了麻烦。我唯一发现的PR显示以下内容: 但是我很难让它工作。 是

  • 有人知道如何使用跨分支的多分支作业中设置的声明性管道来限制并发构建吗? 每当我们为某个阶段设置代理时,就会分配一个新的执行者。这会导致死锁,例如,当您为尽可能多的分支同时触发生成时,您有执行者。不设置代理会导致阶段随机选择执行者,这是不可接受的,因为某些阶段需要在某些代理上运行。。。 经典的方法不起作用: Throttle并发构建插件不适用于多分支 设置属性([disableConcurrentB

  • 是否可以将多分支管道限制为一次只构建一个分支? 我有一个管道,它包含签出、构建、测试,然后部署的步骤。部署阶段在特定的机器上复制/执行一些文件,这些工作无法与其他分支作业并行完成。 我尝试过: 但这只限制了基于分支的并发,因此仍然有多个分支将并行运行。 此外,在常规非流水线Jenkins作业中,有一个选项复选框: “必要时执行并发生成” 但这在多分支配置中也不可用。 是否有其他配置来实现这一点,或

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

  • Jenkins多分支管道总是在主节点上执行签出。在我的例子中,我想在另一个节点上构建。我在Jenkinsfile中的脚本如下所示: 我被迫结账再次在我的节点上分支以执行构建。从头开始在选定的节点上执行管道构建会好得多,但我找不到如何做到这一点。

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