16

我正在与 Jenkins 运行并行测试。

我设置它的方式是我有一个构建流程作业,它并行执行三个其他作业。其他三个作业连接到单独的测试 XML 文件。

当我最初开始这个时,我遇到了一个问题,即只有两个作业会同时执行,第三个作业只有在其他一个作业完成后才会执行。

我发现这是因为我的 Jenkins 将执行者的数量设置为2,现在设置为5

但是,出于兴趣,只是为了未来的规划,Jenkins 是否对您可以拥有的 executor 数量设置了上限?或者有一个你不应该超过的推荐数字?还是完全取决于您运行它的环境?

如果有上限/建议数量不超过?我认为解决这个问题的最佳方法是使用主/从方案并将工作负载分散到多个虚拟机上。

例如,如果我将其设置为 6 个执行程序,这是否意味着我将在每个 VM 上拥有 6 个执行程序?还是在虚拟机之间共享 6 个执行程序?

4

2 回答 2

10

这实际上取决于您的环境以及分配给该 Jenkins 实例的资源量。我不相信 Jenkins 允许的执行者数量有任何限制。我们目前运行一个带有 20 个执行器的 Jenkins 实例,没有任何问题。当然,根据您的构建管道和提交模式,您可能会发现您设置的执行器数量过多。您只需要注意您是否在任何给定时间实际使用了所有执行程序。

如果您发现您的 Jenkins 实例的资源已接近上限,并且您无法增加资源限制,那么您将希望开始使用从站。

我们关注资源使用的一种方法是通过监控插件

***编辑:

由于我们的管道实际在做什么,我们最近不得不重新评估我们的执行器与处理器的比率。您确实需要确定您的管道/作业的 CPU 约束程度。这将不可避免地因用例而异。

在我们的案例中,我们的管道非常受 CPU 限制,并且随着我们优化系统、引入并行处理等而变得更多。我们最终每个 cpu 核心有一个执行器,还有一些额外的“管理员”执行器来运行快速/轻量级任务.

我们目前在具有 20 个内核的单台机器上运行 jenkins,但同样,这将取决于您的用例。我们必须根据构建频率和目标构建时间进行大量计算来确定我们需要多少个执行器/cpu 内核。当我们最终不得不增加我们的处理能力时,我们最终会利用奴隶在多台机器之间分配作业。

另一个注意事项:您还需要考虑可用内存,因为增加执行器的数量会增加消耗的内存量。我们有一个案例,我们有足够的处理能力但没有足够的内存,这导致 Jenkins 的进程由于 OutOfMemory 错误而崩溃。

于 2016-06-29T11:35:21.810 回答
5

我一直在寻找同样的问题,并在 Jenkins 本身的字段旁边找到了这个:

编辑:更具体地说,Jenkins 版本 2.73.3,在 UI 中,在您的工作配置中?,每个字段的右侧应该有小 s。如果您单击它们,它们将为您提供有关该字段预期内容的更多详细信息。对于 executors 字段,您应该找到它。

Jenkins 可以在此代理上执行的最大并发构建数。一个好的开始值是机器上的 CPU 内核数。设置更高的值会导致每次构建花费更长的时间,但可能会增加整体吞吐量。例如,一个构建可能受 CPU 限制,而同时运行的第二个构建可能受 I/O 限制——因此第二个构建可以利用当时的空闲 I/O 容量。

代理人必须至少有一名执行人。要暂时阻止在代理上执行任何构建,请使用代理页面上的标记此节点暂时脱机按钮。

这不适用于 Jenkins 主节点——将执行者的数量设置为零将阻止任何构建在主节点上执行。

据我所知,这取决于你的工作到底在做什么;我们的部署脚本只执行gcloud命令,因此我们在具有更多执行器的实例上运行这些命令。然而,我们的 selenium 测试在具有 1 个执行程序/核心的实例上运行。不过,从表面上看,我们是在安全的一边玩它。

于 2018-06-26T23:32:20.213 回答