我们希望为我们的项目设置持续集成 (CI) 服务。该 CI 服务应控制项目生命周期的所有方面,包括部署。
也就是说,我们希望每次迭代时 CI 代理都采用干净的系统(特别是 Ubuntu Server),在那里部署我们的项目并运行测试。
由于我们的生态系统相当不寻常,我们可能会自己从头开始编写 CI 服务。问题是:如何有效地为每个 CI 迭代提供干净的系统?
项目部署安装了一些 Debian 软件包,配置了几个 nginx 站点,还在系统范围内安装了一些特定于实现语言的软件包管理器 (LuaRocks) 中的软件包。没有什么比这更具有侵入性了(我相信)。因此,能够快速设置一个干净的版本(在现代硬件上一分钟内,更快 — 更好)比确保绝对的隔离和清洁更重要。
我认为有两种方法可以实现我们需要的功能:
- 或者设置某种监狱(例如 lxc)。
- 或者安装一些可以做快照的虚拟机,并使用它们。
但目前我还没有足够的信息来做出决定。
您有什么建议?还有其他选择吗?有具体的工具名称吗?
注意:CI 服务将在 Citrix XenServer 客户机内运行。如果价格合理,付费解决方案是可以的。(通常在这个领域它们并不合理。)远程 CI 解决方案不可以。
答案1
看一眼厨师 / 流浪者。不确定它是否足够快,但值得研究一下。
如果您不熟悉 Chef,它是一款旨在允许基于简单代码配置服务器的服务器。我建议您查看其中一个网络广播。 Django Chef 网络广播
Vagrant、veewee、chef-solo 和 knife-solo 等我认为这一个涵盖了你想要做的大部分事情。
Vagrant 博客文章一篇博客文章展示了如何使用 Vagrant 快速设置服务器。
答案2
答案3
我会使用 VM 基础架构并创建一个基础模板,或者按照 @LarsKotthoff 的建议使用云。它可以轻松快速地启动它们,而且您可以确定从哪里开始。
但是,您最终将需要虚拟机之外的某些东西来协调正在发生的事情(设置机器,并在机器上启动您想要的任何进程)。我会考虑 Jenkins,因为它能够捕获脚本的输出以供以后检查。
尽管 Jenkins 最初是作为 CI 服务器运行的,但我合作过的很多组织现在将其用于更多用途,它实际上是一种启动(手动或计划)和捕获结果的工具,并验证发生的事情是否符合预期。而且它非常灵活。
答案4
我们希望为我们的项目设置持续集成 (CI) 服务。该 CI 服务应控制项目生命周期的所有方面,包括部署。
很多人都提到过 Jenkins。你可以从头开始使用脚本,但 Jenkins 可以为你提供同样的灵活性,而且成本更低。
也就是说,我们希望每次迭代时 CI 代理都采用干净的系统(特别是 Ubuntu Server),在那里部署我们的项目并运行测试。
项目部署安装了一些 Debian 软件包,配置了几个 nginx 站点,还在系统范围内安装了一些特定于实现语言的软件包管理器 (LuaRocks) 中的软件包。没有什么比这更具有侵入性了(我相信)。因此,能够快速设置一个干净的版本(在现代硬件上一分钟内,更快 — 更好)比确保绝对的隔离和清洁更重要。
这时虚拟机映像就派上用场了。您可以设置干净的映像,并让每台机器启动该映像的一个分支。原始映像从未被修改过,但您的测试不会知道其中的区别。您绝对应该能够在一分钟内运行引导映像。
如果价格合理,付费解决方案是可以的。(通常这个领域的价格并不合理。)远程 CI 解决方案不行。
如果你正在寻找同时运行多台机器的方法,请查看灵光(我很无耻,我为他们工作)。对于较小的部署,它是免费的,可让您整合自己的私有云进行测试……或任何其他操作。在 Jenkins 和编排文件之间,您可以启动主机服务器、测试客户端和其他所有内容,以自动运行完整的测试代码,而无需任何交互。