如何正确缩放詹金斯?


27

在我的项目中,我们有一台运行Jenkins Master的AWS服务器+ 1个Jenkins从属服务器(2个执行程序)...并且我们需要更多
以增强构建能力,我们有以下三种选择:

  1. 扩大规模:使AWS实例更大,并添加更多执行程序。
  2. 向上扩展扩大 AWS实例并添加另一个jenkins从属进程。
  3. 向外扩展:使用jenkins从服务器创建另一个AWS实例,并将其连接到主服务器

我们想做的是2.我们身处一个大组织中,而我们目前的Jenkins Master已经可以访问他需要的每个地方。选项3。“新服务器”很复杂,因为它需要更多的官僚机构的批准,这将需要数周的时间。

所以我的问题是:

  • 选项2是否有任何技术问题?。也许每个詹金斯奴隶的执行者都不知道其他奴隶的执行者?
  • 通常,扩展Jenkins的最佳方法是什么?向上扩展还是向外扩展?

您将有一个陷阱,如果您转移到其他硬件类型,则更改实例类型可能会遇到问题,因为必须在新实例中备份和还原卷。
Tensibai

2
为什么不加3?将工作发送给詹金斯的通常方法是掌握。并且主根据某些标准将其无缝发送给适当的从属
Romeo Ninov

FWIW,您还需要分析构建结构,以查看其如何使用构建计算机的资源-向上扩展可能无济于事-我遇到了以下情况:同一台计算机上2个并行构建的构建时间长于相同的2个构建顺序执行,不重叠。在这种情况下,#3确实是唯一可行的选择。
Dan Cornilescu

我同意#3更好,但是我对此没有争议,也没有反对#1和#2的争论……
Oscar Foley

如果您有机会在自己的环境中工作,我将寻求临时解决方案。看到您已经在AWS中,您可以在处理工作负载时根据需要轻松地上下移动计算机。wiki.jenkins.io/display/JENKINS/Amazon+EC2+Plugin
Casey vega

Answers:


11

在同一台计算机上运行多个jenkins从属服务器没有基本的技术问题。实际上,在同一台计算机上运行多个从设备列出了这样做的几个很好的理由:

尽管正确使用执行程序可以避免在同一台计算机上使用多个从属实例,但是需要考虑一些独特的用例:

  • 您希望已配置节点之间具有更多可配置性。假设您设置了一个尽可能多地使用的节点,而另一个节点仅在需要时使用。
  • 您可能有多个Jenkins主安装程序构建了不同的东西,因此此配置将允许您在同一机箱上具有多个主服务器的从设备。没错,有了詹金斯,您真的可以担任两位大师。
  • 您可能希望利用启动/停止/替换虚拟机的简便性,也许与诸如Libvirt Slaves Plugin之类的Jenkins插件结合使用。
  • 您希望最大程度地利用硬件投资和利用率,同时又将运营成本(例如,运行空闲从站的公用事业费用)降至最低。

通常,最好进行横向扩展,这主要是因为向上扩展的能力通常受可用物理资源的类型/大小限制。

特别是为了增强构建能力,我建议您对实际构建进行分析,以确定它如何使用机器资源,其瓶颈在哪里/在哪里以及它提出了哪些可扩展性限制,以显示是否可以扩大规模。

例如,我遇到这样的情况,其中在同一台机器上进行2个并行构建的构建时间比在同一台机器上顺序执行(不重叠)的同一2个构建的组合构建时间长。在这种情况下,我什至不考虑扩大规模,因为这实际上会降低整体建筑能力。



3

我认为您都不应该这样做;)

好吧 我认为您需要更多的执行者,也许您的构建确实需要大量资源?我至少要运行4个,但根据作业情况我们要运行6到8个。我喜欢将#个核心与选举人匹配。因此,您可能想扩展您的节点,我认为我们为4-8个执行程序运行了M4大型程序。

我还认为您应该向外扩展,但是应该明智地这样做。Jenkins有一个插件,可以根据构建队列中的内容自动在AWS上进行横向扩展。基本上,您告诉它有多少个作业以及等待多长时间才能站起一个从站并将作业发送到新的从站。您还可以设置最大数量的奴隶,最小数量等。


2

我选择了横向扩展而不是纵向扩展,转到选项3。我们进行了设置,使所有Jenkins代理都在具有自动扩展组的ECS(基于Docker的定制Jenkins)上运行。我们让所有Jenkins管理员都与ECS进行通信,从而共享ECS上的工作量,而无需在扩展练习中重新创建Jenkins管理员。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.