Kubernetes Jenkins插件并发从属不工作

Posted

技术标签:

【中文标题】Kubernetes Jenkins插件并发从属不工作【英文标题】:Kubernetes Jenkins Plugin concurrent slaves not working 【发布时间】:2018-03-26 21:31:18 【问题描述】:

我在 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 运行做其他设置吗?

【问题讨论】:

【参考方案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?

以上是关于Kubernetes Jenkins插件并发从属不工作的主要内容,如果未能解决你的问题,请参考以下文章

在 Jenkins 上使用 Groovy 配置 amazon-ecs 从属插件

使用 Jenkins 中的 Kubernetes 插件未进行卷挂载

如何在 Jenkins ECS 插件中使用 ECR Image

使用 Jenkins ECS 插件生成多个代理(等待下一个可用的执行程序)

Jenkins-Kubernetes插件实现使用Pod作为 Agent-超详细

2. Jenkins+Git+Kubernetes+Pipeline配置详细说明