【问题标题】:Executing stages of Jenkins pipeline in parallel on different slaves在不同的 slave 上并行执行 Jenkins 流水线的阶段
【发布时间】:2019-12-14 16:44:19
【问题描述】:

我使用 6 个从站 - 每个 Jenkins 设置 4 个执行器来运行我的脚本化多分支管道。

当我尝试在不同的 slave 而不是 executors 上并行执行管道的 4 个阶段时,就会出现我面临的问题。由于 Jenkins 在多个团队之间共享,我不能将奴隶限制为一个执行者,以确保 1 阶段 - 1 从属关系。我尝试添加 disableConcurrentBuilds() 选项,但仍然没有成功。

如何确保将 4 个并行阶段分配给 4 个不同的从站?

【问题讨论】:

    标签: jenkins-pipeline jenkins-plugins jenkins-groovy


    【解决方案1】:

    在类似的情况下,我们将执行程序的数量限制为 1 个。以前,虚拟机强大到足以运行 4 个执行程序,我们已经销毁它们并创建了 4 个小型虚拟机,每个虚拟机有 1 个执行程序。这保证了不同 VM 上的并行执行。

    这样做的原因是,虽然您可以做出合理的努力来确保您团队的阶段 A 不会干扰您团队的阶段 B(目前看起来他们确实干扰,因此您的问题)-您不能对是否 a) 您的某些阶段不会破坏其他团队的阶段做出任何假设;或b)他们的阶段会打破你的。在我们的例子中,我们在舞台上用完了磁盘空间,所以让我们在之前清理 docker 镜像,对吧? Oopsie - 另一个执行程序正在使用该映像,并且 docker 守护程序在所有执行程序之间共享。这是另一种情况:您的舞台创建了一个大文件 - 存储空间已耗尽 - 最多 四个 作业失败(您的,以及三个无辜的执行者)。

    您最好的行动方案似乎是说服将大型 4 执行器机器替换为 4 台小型 1 执行器机器的权力。

    您的其他选项包括使用“可锁定资源”插件和锁定,例如机器的名称。这不会阻止在同一台机器上调度管道的不同部分,但会保持其中一个阶段,直到前一个阶段完成。根据我们的经验,这会导致管道执行时间大大增加,而没有任何明显的好处。

    【讨论】:

    • 嗨!不幸的是,我需要从机器“强大”到足以运行我非常紧急的 docker 容器,因此降级从机器不是解决方案。我还考虑对每个代理进行唯一标记,并为每个专用代理映射一个阶段,但这将使我的 6 台机器中有 2 台未使用,并且还会使从站之间的 jenkins 负载平衡无法使用。可锁定资源确实是最后的解决方案。
    • 据我所知,标签是每个奴隶的,你不能给特定的执行者一个标签。如果您使用不同的标签映射每个阶段,则您的两个阶段 - 例如来自不同的分支——最终可能会在同一个从属服务器上同时运行。
    • 您应该强制并行执行在不同的标签上运行。那么每个标签的执行者数量无关紧要。
    猜你喜欢
    • 2023-03-07
    • 1970-01-01
    • 2019-05-15
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多