使用主/从Jenkins服务器vs维护3个独立的服务器?

背景:

我是一名软件开发人员,他在configuration持续集成解决scheme方面有一定的经验,但我不太了解某些持续集成策略的优缺点,并且希望得到关于两种服务器pipe理策略的好处和挑战的build议。

题:

我们有3个独立的,复杂的Android应用程序,我正在创build持续集成服务器。 我成功地创build了一个运行Windows Server 2008的原型虚拟机,它成功地编译了代码,启动了一个模拟器并运行了Androidunit testing。 另外我也可以运行我们希望运行在这个代码上的静态分析,以便为开发者提供反馈。

在之前使用CruiseControl.NET而不是jenkins的configuration中,我们成功地维护了3个独立的虚拟机,所有虚拟机均具有独立的虚拟化硬件。 这种设置的好处是分区 – 一个项目可以改变他们的构build服务器,而不会影响到其他项目。

然而,转移到Jenkins,我注意到它支持主/从节点 ,这可以让我configuration一个Jenkins主实例多个项目,然后configuration一些奴隶节点,据我所知,将执行任何Jenkins任务 – 编译,unit testing,静态分析并将这些信息传回给主服务器。 这个设置的好处似乎是:

  • 可伸缩性 – 我可以轻松地添加第4或第5个项目,并保持相同数量的从站
  • 仅需要设置1个主站和3个从站,这可能比3个独立的主站更容易设置。

这种情况的挑战似乎是:

  • 我将不得不学习如何创build奴隶
  • 我将不得不处理客户和奴隶之间的沟通
  • 我可能会遇到需要UI交互的unit testing的问题 – 描述如何运行无头的奴隶

是否还有其他直接的好处或挑战,我忘记了,还是有经验的jenkins有意见,哪种方法更合适?

你的理解相当完整。 我唯一可以补充的是,在我看来,jenkins / hudson中的“主/从”术语有点败坏。 由于“奴隶”更像执行者在触发工作/build设/项目的分布式scheme。 我不会认为有3个独立的jenkins大师在你的情况下是合理的。

1) – 我将不得不学习如何创build奴隶 – 这不是一个真正的问题,它只是一个奴隶的jar文件。 可以很容易地安装在不同的操作系统上(Linux,Windows,Unix)可以作为服务/守护进程运行。 那么你只需要把这个奴隶附在主人身上。

2) 我将必须处理客户端和从站之间的通信 – 这也是相当简单的,因为所有你需要pipe理的ssh密钥和用户帐户的奴隶连接到客户端。

3) 我可能会遇到运行需要UI交互的unit testing的问题 – 这不应该是一个问题。 现在应该有很多解决scheme。

再一次,我真的鼓励你在开发CI和CD的开发工作stream程中使用jenkins,真的没有什么事情是jenkins不能做到的。 3年前开始使用它,永远不会回头。

我在你的特定情况下看到的唯一的一块石头是它是一个新的工具,并且在从旧的工作stream程中迁移时可能会有一些学习曲线和一些调整,但最有可能的是,它将大大有利于你和你的团队长远来看。

希望这可以帮助。