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

如何在Jenkins声明性管道中使用节流并发构建

李安歌
2023-03-14

我有几个不同repo的Jenkins声明性管道,它们触发数据库刷新,以及依赖于数据库的单元测试。这些Jenkins作业是从GitHub中的pull请求触发的。

为了避免资源冲突,我需要防止这些作业同时运行——无论是在每个项目内还是在各个项目之间。

“油门并发构建”插件似乎就是为此而构建的。

我已经安装了插件,并配置了如下类别:

我在Jenkins文件中添加了“throttle”选项,其中一个存储库的构建应该被限制:

pipeline {

    agent any

    options {
        throttle(['ci_database_build'])
    }

    stages {
        stage('Build') {
            parallel {
                stage('Build source') {
                    steps {

                        // etc etc...

然而,这似乎并没有阻止两个作业同时执行。作为证据,这里有两个作业(都包含上述文件更改)同时执行

我错过了什么?

共有1个答案

柴深
2023-03-14

选项块中的以下内容应该有效

options {
    throttleJobProperty(
        categories: ['ci_database_build'],
        throttleEnabled: true,
        throttleOption: 'category',
    )
}

完整的语法可以在这里看到:https://github.com/jenkinsci/throttle-concurrent-builds-plugin/pull/68)

 类似资料:
  • 我刚开始使用Jenkins声明性管道。在我支持一些类似的项目时,我考虑将类似的管道步骤(甚至阶段)放入可重用的构建块中。这些区块应保持在一个中心点,然后由单独的管道包括在内(例如:干燥)。 我将共享库视为脚本化管道的一个选项,但我不确定它是否也适用于声明性管道。 你知道在Jenkins声明性管道中使用像构建块这样的东西的方法吗? 举例说明: 如果您有一个用于Maven项目的标准管道(例如Sprin

  • 问题内容: 我的Jenkins 2.19.4使用管道:声明式代理程序API 1.0.1。如果您无法定义变量来分配读取的属性,那么如何使用readProperties? 例如,要捕获SVN版本号,我目前以脚本样式使用以下代码捕获它: 然后我可以使用: 由于以声明式定义svnProp是不合法的,因此如何使用readProperties? 问题答案: 您可以使用标记内的步骤来运行任意管道代码。 所以符合

  • 我的存储库中有一个带有Jenkinsfile的多分支管道,我能够拥有我的CI工作流程(构建 为了设置我的夜间构建,我添加了 但是现在,如果我们只是在晚上构建由cron表达式触发的作业,如何执行分析步骤呢? 我的简化构建阶段如下所示:

  • 我在詹金斯内部写了一个声明性管道。此管道应在远程Docker服务器上的Docker容器中运行。 我阅读了自定义执行环境: 自定义执行环境 Pipeline的设计可以轻松地将Docker映像用作单个阶段或整个管道的执行环境。这意味着用户可以定义其管道所需的工具,而无需手动配置代理。实际上,任何可以打包在Docker容器中的工具。只需对Jenkins文件进行少量编辑即可轻松使用。 它工作,但它使用詹金

  • 问题内容: 我正在尝试将旧样式的基于项目的工作流转换为基于Jenkins的管道。在浏览文档时,我发现有两种不同的语法分别命名为和。例如最近(2016年底)发布的Jenkins网络语法。尽管有一个新的语法版本,Jenkins仍然也支持脚本语法。 现在,我不确定这两种类型的哪种情况最合适。语法将很快被弃用吗?詹金斯管道的未来会是这样吗? 任何可以分享有关这两种语法类型的想法的人。 问题答案: 最初创建

  • 问题内容: 我正在使用声明性管道语法在Docker容器中执行一些CI工作。 我注意到,用于Jenkins的Docker插件使用主机中jenkins用户的用户ID和组ID运行一个容器(即,如果jenkins用户具有用户ID 100和组ID 111,它将运行管道以创建带有命令)。 我遇到了一些问题,因为该容器将以不存在的用户运行(特别是我遇到了用户没有主目录的问题)。所以我想到了创建一个Dockerf