【问题标题】:Kubernetes Jenkins Plugin concurrent slaves not workingKubernetes Jenkins插件并发从属不工作
【发布时间】:2025-12-12 20:30:01
【问题描述】:

我在 Jenkins 2.73.2.1 上并使用 Kubernetes-jenkins 插件 1.4 来启动动态从属。但是,我无法启动并行构建。 Jenkins 总是将其放入构建队列并一次执行一个。

我在启动 jenkins 时尝试过设置,但也无济于事:

-Dhudson.slaves.NodeProvisioner.initialDelay=0
-Dhudson.slaves.NodeProvisioner.MARGIN=50
-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85

在插件配置结束时我们还需要为并行 pod 运行做其他设置吗?

【问题讨论】:

    标签: jenkins kubernetes


    【解决方案1】:

    对我们有用的解决方案是结合上述 JVM 参数以及在 kubernetes 容器模板部分选择“仅使用与当前标签匹配的作业”。

    我们能够在不同的 pod 中并行运行所需的作业

    【讨论】:

      【解决方案2】:

      您必须正确配置以下参数才能按照您的期望同时运行从站:

      Kubernetes Pod Template下,

      1) 为 Pod 模板正确设置 Labels

      • 确保您有 Jenkins Job 并配置了相同的标签。
      • 在该 jenkins 作业的配置中,标记 Restrict where this project can be run 并提供与您在 Jenkins 配置的 Labels 字段中提供的相同标签。

      2) 设置Max number of instances。这个参数会告诉 Jenkins How many maximum slaves it can launch with the given label

      3) 设置Time in minutes to retain agent when idle。这个参数会告诉 Jenkins Till how much time to retain slave (with the given label) on which no build is running

      • 正确配置这将使您免于Kubernetes Pod Creation time
      • 确保Pod Retention 策略为Default

      Cloud 部分下,

      1) 设置Container Cap。这个参数会告诉 Jenkins How many slaves can be spawned on Kubernetes

      • 这是 Jenkins 可以在 Kubernetes cluster 上创建的 Pod 总数的限制。
      • 此限制累积适用于所有标签。
      • 因此,如果Max number of instances 大于Container Cap。 Jenkins 最多只能为标签创建等于 Container Cap 的 slave。
      • 所以理想情况下保持Container Cap 等于Sum of (Max number of instances) of all labels

      starting Jenkins

      • 默认情况下,Jenkins 会保守地生成代理。说,如果有 2 在队列中构建,它不会立即产生 2 个执行器。它会 产生一个执行者并等待某个时间让第一个执行者成为 在决定产生第二个执行者之前被释放。詹金斯让 确保它产生的每个执行器都被最大限度地利用。
      • 如果您想覆盖此行为并为 每个构建队列立即无需等待,您可以使用这些 Jenkins 启动期间的标志:
      -Dhudson.slaves.NodeProvisioner.initialDelay=0
      -Dhudson.slaves.NodeProvisioner.MARGIN=50
      -Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
      

      Jenkins Kuberenetes Plugin' Github repo 对所有参数都有很好的一行描述

      【讨论】:

      • 是否可以自动扩展从属 pod?