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

扩展:扩大AWS实例并添加更多执行程序。

扩展:扩大AWS实例并添加另一个jenkins从属进程。

向外扩展:使用jenkins从服务器创建另一个AWS实例并将其连接到主服务器

我们想要做2.因为我们在一个大型组织中,我们目前的Jenkins主服务器已经可以访问他需要的每个地方。选项3。“新服务器”很复杂,因为它需要更多的官僚机构的批准,这将需要数周的时间。选项2中有任何技术问题吗?也许每个詹金斯奴隶的执行者都不了解其他奴隶执行者?
总的来说,扩展詹金斯的最佳方法是什么?放大还是缩小?


评论

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

为什么不数字3?将工作发送给詹金斯的通常方法是掌握。主机会根据某些标准将其无缝发送到相应的从机

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

我同意#3更好,但我对此没有论点,也没有反对#1和#2的争论...

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

#1 楼

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


您希望在已配置节点之间具有更多可配置性。假设您设置了一个尽可能多的节点,而另一个节点
仅在需要时才使用。您要在同一机箱上拥有多个主机的从机。没错,有了Jenkins,您确实可以担任两个大师。从站插件。
您希望最大化硬件投资和利用率,同时最大程度地降低运营成本(例如,用于运行空闲从站的公用事业费用)。


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

特别是为了增强构建能力,分析您的实际构建,以确定其如何使用计算机资源,其瓶颈在何处/何处以及它提出了哪些扩展性限制,以揭示扩大规模是否有帮助。

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

#2 楼

使用Kubernetes和Helm。

我建议使用Jenkins Helm图表。它随helm install stable/jenkins一起安装并自动缩放。

https://github.com/kubernetes/charts/tree/master/stable/jenkins

#3 楼

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

有点。我认为您需要更多的执行者,也许您的构建确实需要大量资源?我至少要运行4个,但根据作业情况我们要运行6到8个。我喜欢将核数与选拔器匹配。因此,您可能想扩展节点,我认为我们为4-8个执行器运行了M4大型机。 Jenkins有一个插件,可以根据构建队列中的内容自动在AWS上进行横向扩展。基本上,您可以告诉它有多少个作业以及等待多长时间才能站起一个从站并将作业发送到新的从站。您还可以设置最大从站数量,最小从站数量等。

#4 楼

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