确保持续集成服务“干净的系统”的有效方法

Ale*_*ysh 10 virtualization linux ubuntu continuous-integration

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

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

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

项目部署安装一些 Debian 包,配置几个 nginx 站点,并在系统范围内在特定于实现语言的包管理器 (LuaRocks) 中安装一些包。没有什么比这更具侵入性的了(我相信)。因此,与确保绝对隔离和清洁相比,能够快速设置干净的状态(在现代硬件上在一分钟内,更快——更好)更重要。

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

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

但在这一点上,我没有足够的信息来决定。

你有什么建议?还有其他选择吗?有具体的工具名称吗?

注意:CI 服务将在 Citrix XenServer 来宾中运行。如果价格合理,付费解决方案是可以的。(通常他们在这个领域是不合理的。)远程 CI 解决方案不行。

小智 13

看看詹金斯。它的插件允许您在VMWareVirtualBoxAmazon/a Eucalyptus 云中的虚拟机中运行构建。对于在云中运行的虚拟机,您可以指定一个 init 脚本,您可以在其中执行安装包等步骤。

  • @AlexanderGladysh 为什么要重新发明轮子?Jenkins 构建可以运行从 make 文件到普通 shell 脚本的所有内容,而且它具有强大的界面、强大的支持和大量插件。即使你的构建非常复杂,它也必须是一个 jenkins 可以运行的 shell 脚本 (2认同)

Phi*_*ney 5

看看Chef / Vagrant。不确定它是否足够快,但需要研究一下。

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

Vagrant、veewee、厨师独奏和刀独奏的东西我认为这涵盖了你想做的大部分事情。

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