确保“整洁的系统”持续集成服务的有效途径


10

我们想为我们的项目设置一个持续集成(CI)服务。CI服务应该控制项目生命周期的各个方面,包括部署。

也就是说,我们希望CI代理在每次迭代时都采用一个干净的系统(特别是Ubuntu Server),在其中部署我们的项目并运行测试。

我们可能会从头开始自己编写CI服务,因为我们的生态系统很不寻常。问题是:如何为每次CI迭代有效地提供干净的平板系统?

项目部署会安装一些Debian软件包,配置多个nginx站点,并在系统范围的特定于实现语言的软件包管理器(LuaRocks)中安装一些软件包。没有比这更令人讨厌的了(我相信)。因此,比起确保绝对的隔离和整洁,能够快速设置干净的平板(在现代硬件上在一分钟内,更快,更好)更为重要。

我看到两种方法来做我们需要做的事情:

  • 要么设立某种监狱(例如lxc,也许)。
  • 或安装一些可以做快照的虚拟机并使用它们。

但是目前我没有足够的信息来决定。

您有什么建议?还有其他选择吗?任何特定的工具名称?

注意:CI服务将在Citrix XenServer guest虚拟机中运行。如果价格合理,付费解决方案还可以。(通常,它们在该字段中不合理。)远程CI解决方案不可行。

Answers:


5

看一下厨师/流浪汉。不知道它是否足够快,但是有一些需要研究的地方。

以防万一您不熟悉Chef,它是一种服务器,旨在允许基于简单代码的服务器配置。我建议您看一看网络广播。 Django Chef网络广播

流浪汉,素食主义者,厨师独奏和小刀独奏的东西,我认为这涵盖了您想要做的大部分事情。

Vagrant博客文章一个博客文章,显示使用Vagrant快速设置服务器。


谢谢。您是否愿意在答案中提供更多详细信息?
亚历山大·格拉迪什

我自己没有为此使用它,所以,我所能做的就是发布一些我认为应该有所帮助的链接。
菲利普·汀尼

13

看看詹金斯(Jenkins)。它具有允许您在VMWareVirtualBoxAmazon / a Eucalyptus云中的虚拟机中运行构建的插件。对于在云中运行的虚拟机,您可以指定一个初始化脚本,您可以在其中执行安装软件包之类的步骤。


谢谢,但是Jenkins是CI服务器,我想了解自己构建的方法。
亚历山大·格拉迪什

2
@AlexanderGladysh为什么要重新发明轮子?Jenkins构建可以运行从生成文件到普通的shell脚本的所有内容,此外它还具有强大的界面,强大的支持和许多插件。即使您的构建非常复杂,也必须是可以运行
jenkins

即使您不想使用Jenkins,我也认为基于云的技术将是您的理想之选。您可以自定义机器映像以提供所需的软件,并且仅在启动实例时添加配置和代码以进行测试,以减少启动时间。
拉尔斯·科特霍夫

无论如何,无论詹金斯(Jenkins)还是没有詹金斯(Jenkins),如何使用快速获得全新的OS快照?(请停止提及第三方云,它必须在我们自己的服务器上运行。)
Alexander Gladysh,2012年

在自己的服务器上运行Eucalyptus / OpenStack / ...云?
拉尔斯·科特霍夫

2

我将使用VM基础结构并创建基本模板,或者按照@LarsKotthoff建议使用云。轻松快速地将它们旋转起来,您可以确定从哪里开始。

但是,您最终将需要VM之外的其他东西来协调正在发生的事情(设置计算机,并启动您希望在计算机上执行的任何进程)。我将看看Jenkins捕获脚本输出以供以后检查的能力。

尽管Jenkins最初是作为CI服务器开始的,但我与之合作的许多组织现在使用它的功能远不止于此,它确实是一种启动(手动或计划)并捕获结果并验证所发生的事情是否如预期的工具。而且非常灵活。


谢谢,但是我想在Xen VM实例内部而不是外部进行设置-在我的特定情况下,这更容易组织。我将研究詹金斯,但我仍在寻找更狭窄的解决方案。
亚历山大·格拉迪什

另外,请详细说明“使用VM基础结构并创建基本模板”。
亚历山大·格拉迪什

2

我们想为我们的项目设置一个持续集成(CI)服务。CI服务应该控制项目生命周期的各个方面,包括部署。

詹金斯已经被很多人提及。您可以从头开始编写脚本,但是Jenkins将为您提供所有相同的灵活性,而将它们组合在一起的开销却更少。

也就是说,我们希望CI代理在每次迭代时都采用一个干净的系统(特别是Ubuntu Server),在其中部署我们的项目并运行测试。

项目部署会安装一些Debian软件包,配置多个nginx站点,并在系统范围的特定于实现语言的软件包管理器(LuaRocks)中安装一些软件包。没有比这更令人讨厌的了(我相信)。因此,比起确保绝对的隔离和整洁,能够快速设置干净的平板(在现代硬件上在一分钟内,更快,更好)更为重要。

这是虚拟机映像派上用场的地方。您可以设置干净的映像,并让每台计算机启动该映像。原始图像永远不会被修改,但是您的测试不会知道其中的区别。您肯定应该能够在一分钟的时间内运行引导映像。

如果价格合理,付费解决方案还可以。(通常,它们在该字段中不合理。)远程CI解决方案不可行。

如果您要一次运行多台计算机,请查看Nimbula(我很无耻;我为他们工作)。对于较小的部署,它是免费的,可让您将自己的私有云组合在一起进行测试...或其他任何功能。在Jenkins和业务流程文件之间,您可以启动主机服务器,测试客户端以及所有其他内容,以自动运行全部测试代码,而无需任何交互。


啊。也许今天我很慢,但我尝试浏览Nimbula网站,但看不到营销背后的原因。您是否愿意指向描述我该怎么做的理智的文字?(即,设置来宾计算机模板,并从脚本中为每个CI会话实例化并杀死它。)
Alexander Gladysh 2012年

@AlexanderGladysh如果您使用许多机器从大量CI工作中构建,这将非常方便。如果您没有足够的工作量来保证至少包含3台计算机的集群,那么它将毫无用处。
杰夫·费兰德
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.