16

我们将 Jenkins 用于我们的 CI 构建系统。我们还使用“并发构建”,以便 Jenkins 独立构建每个更改。这意味着我们经常同时运行 5 或 6 个相同作业的构建。为了适应这一点,我们有 4 个从站,每个从站有 12 个执行器。

问题是 Jenkins 并没有真正在它的奴隶之间“负载平衡”。它尝试在之前构建的同一个从站上构建作业(大概是为了减少从源代码控制同步的时间)。这是一个问题,因为 Jenkins 将在同一个从站上构建我们构建的所有 6 个实例(或者更有可能在 2 个从站之间)。一台构建机器陷入困境并且运行非常缓慢,而其他机器则处于闲置状态。

如何配置 Jenkins 的负载平衡行为,以及它如何控制其从属服务器?

4

5 回答 5

22

我们面临着类似的问题。因此,我整理了一个插件,可以更改 Jenkins 中的负载均衡器,以选择当前负载最小的节点 - https://plugins.jenkins.io/leastload/

任何反馈表示赞赏。

于 2013-06-04T19:35:17.773 回答
4

如果您的构建机器无法轻松处理超过 1 个构建,为什么要为它们配置 12 个执行器?如果确实如此,您应该将执行者的数量减少到 1。我的 Jenkins 有 30 个奴隶,每个奴隶有 1 个执行者。

于 2012-06-18T22:06:14.017 回答
2

如果您没有找到自动执行此操作的插件,请参考以下内容:

  • 安装节点标签参数插件
  • SLAVE参数添加到您的作业中
  • 限制作业运行${SLAVE}
  • 添加将执行以下操作的触发器作业:

    • 通过 System Groovy 脚本分析负载分布并决定下一次构建的节点。
    • 通过为SLAVE参数 分配适当的值,使用Parametertized Trigger 插件在该节点上调度构建。

为了分析负载分布,您需要安装Groovy 插件并熟悉Jenkins Main Module API。这里有一些有用的初始指针

于 2012-06-14T08:37:02.120 回答
1

您还可以使用Throttle Concurrent Builds 插件来限制一个作业的多少实例可以在同一节点上并行运行

于 2015-11-16T10:40:31.453 回答
0

我有两个标签——一个用于小任务,一个用于大任务。我有一个执行大任务的执行者和四个小任务的执行者。这确实平衡了一些事情。

于 2019-06-27T22:46:44.013 回答