【问题标题】:Run same pipeline in parallel in Jenkins在 Jenkins 中并行运行相同的管道
【发布时间】:2023-08-11 14:41:01
【问题描述】:

我对 Jenkins 比较陌生。 我在 Jenkins 中创建了一个声明性管道,要求用户输入他们的分支名称,然后 Jenkins 构建该特定分支(例如,origin/mybranch)。 这让我可以为特定的分支运行一组快速的测试。

开发人员可以多次运行管道,今天我阻止多个这样的管道同时运行,因为如果他们这样做,一个会覆盖另一个。

发生这种情况是因为第一个管道写入 c:\Jenkins\workspace\QuickBuild,而当另一个此类作业运行写入完全相同的文件夹时,会终止原始运行。

阻塞是我发现的防止这种情况的解决方案,但我希望这样当一个运行完成时(使用少于 8 个内核),队列中的下一个运行将已经开始运行,并且释放了任何内核。

虽然这将是 Jenkins 的一个基本概念,但我想。 我错过了什么吗?我做错了吗?

【问题讨论】:

  • 您的构建需要单独的工作区。请参阅有关 workspace 指令的文档。
  • 通常情况下,Jenkins 会为项目的每次并行运行自动分配一个新的工作空间。如果您echo WORKSPACE,您应该会看到每个额外的并行运行都会附加一个数字,例如c:\Jenkins\workspace\QuickBuild@2

标签: jenkins parallel-processing jenkins-pipeline workspace


【解决方案1】:

按照 MaratC 和 Zett42 的建议,我最终将其添加到我的脚本中:

    agent
    {
        node {
            customWorkspace "${params.Branch}"
        }
    }

这会导致 Jenkins 在不同的文件夹中创建每个构建,并且它们不会踩到彼此的脚趾。

唯一的缺点是您不能同时构建相同的分支,但这是一个极端情况。 另外,我也可以向工作区添加一个随机数来启用它。

【讨论】: