如何将Vagrant与Jenkins结合起来以形成完美的持续集成环境?


85

您有一个要运行一些软件需求的项目(例如:特定版本的Apache,PHP版本,MySQL数据库实例以及其他几个软件)。

您已经发现Vagrant,因此您的虚拟环境已全部设置好。您可以在配置文件和食谱之外创建框。

您还已经了解了诸如Jenkins之类的持续集成系统的优势。

现在,您想结合这两个世界(Vagrant和Jenkins)以获得完美的持续集成环境。更具体地说,您不希望在运行Jenkins的计算机上安装项目所需的软件,而是要使用Vagrant提供的虚拟环境定期在其顶部构建项目。CI软件(Jenkins)将为您构建Vagrant框,并在其顶部构建和测试您的项目。

您将如何设置环境来实现这一目标?


4
此外,您的Jenkins设置是一个Vagrant框,因此您可以在多个平台上运行此CI环境,因为它们之间存在很多差异。
2011年

1
您创造了这样的环境吗?Docker和Jenkins的组合已经众所周知,但是,对于Windows环境而言,这是不够的,在这种情况下,唯一的好选择IMO是Vagrant + Jenkins。需要考虑一些方面,例如,我们是否真的需要从属设备?在什么情况下,或者我们可以根据需要使用单个服务器为每个项目创建无所事事的构建环境(在许多公司中,只有很少的项目在不断构建,而大多数项目却很少构建),还是应该在重复数据删除系统之上使用它来减少磁盘占用量。
majkinetor 2014年

Answers:


35

我的建议是对构建系统来说是一个很好的解决方案:

  1. 您当前的jenkins作为主CI(可能由用户jenkins启动)
  2. 在同一台计算机或另一台计算机上创建另一个用户以充当詹金斯从机模式
    • 可以从jenkins主服务器调用jenkins从服务器,并且它可以使用像vagrant这样的具有流浪者许可和环境的用户,因此不会干扰原始的jenkins主服务器
    • 创建您的基本无用信息框,然后可以将其重复使用以加快部署速度
  3. 大多数安装信息(程序包)都可以由puppet(或Chef)管理,以加载到vm box中。

也许您可以看看veewee,它可以快速创建无业游民的盒子。

这是我与Jenkins CI和Vagrant一​​起使CI更容易的建议。


1
不幸的是,您的链接断开了
langlauf.io '19

2
如果有人对断开的链接感兴趣,可以使用Jenkins CI和Vagrant
GilbertoTreviño19

12

您可以尝试目前支持Jenkins CD 1.532.3的JenkinsVagrant插件

您可以在http://unethicalblogger.com/2012/03/13/vagrant-plugin-in-action.html上查看运行此插件的演示


7
该插件不支持1.490以上的Jenkins,因此存在很大的局限性:-(
kenyee 2014年

也不支持在奴隶上运行无业游民:(
Christophe Furmaniak

1
是的,但是您必须自己处理VM的所有生命周期(在工作结束时创建,销毁或不结束,...)。插件背后的想法是,插件为您完成了此任务,然后您就可以专注于主要目的:将VM用作隔离容器。
Christophe Furmaniak 2014年

2
提到的插件有令人烦恼的问题,这些问题仍未解决(issue.jenkins-ci.org/browse/JENKINS-26326),并且一年前停止了开发。不推荐。
Ross Ivantsiv

1
按需运行流浪者实例以进行构建听起来像是正确的事情。如果此插件仍然无法正常运行?
Atifm

1

我个人建议使用Hashicorp Packer为开发人员构建Vagrant框,然后再使用它输出可在CI系统上运行的Docker或AWS或OpenStack映像。Vagrant是一个很棒的工具,但是对于CI系统来说,VM的开销可能会有点高,因为CI系统不断地上下旋转它们,尤其是在您希望获得快速反馈的情况下。

在以前的客户端上,我们基本上是用系统引导Vagrant机器一次,然后在这些VM内运行Docker / virtualenv构建,并且在发生重大升级或环境行为不正常时,我们会定期销毁它们。

https://www.packer.io/docs/builders/openstack.html


如果我可能要问,您是否以单独用户身份运行jenkins?如果是这样,您如何设法提供对无业游民的访问权限?谢谢
Jaswanth Manigundan

只要正常安装了vagrant,它就会放在系统路径上。盒子本身通常被加载到当前用户的主目录中,但是您可以使用环境变量覆盖无业游民的主目录。我们将所有这些加在一起,使包装盒与构建过程的特定版本一起拉出,以便将其缓存一次,然后重新使用。
dragon788 '17
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.