我将如何去创build与许多服务CI的docker环境

假设我想将mu验收testingCI环境迁移到docker,所以我可以利用性能改进,并快速设置多个克隆进行慢速验收testing。

我会有很多的服务。 简单的将是postgres,mongodb,reddis等,这些更新很less。

但是,如果我自己的产品有很多的服务,我将如何去呢? – 超过10-20个服务,都需要一起进行testing。 用docker处理这个问题甚至是可行的,也就是说,CI如何有效地自动控制这么多的容器,并使它们克隆并行运行验收testing。

另外,我将如何自动更新CI的容器容易? CI是否需要在每个服务分支的HEAD每次运行开始时重build每个容器? 或者CI会在每个服务上运行git pull和一些update/migrate command

在VM-s很容易控制这些服务,但我想确信,docker是好的或更好的。

我和你一样处于同样的位置,最近这一切都按我的意愿工作。

首先,虽然docker一般是为了运行一个进程,但为了testing,我发现docker容器运行所有需要的服务会更好。 走这条路线有一些重复,但你不必担心共享服务,如Mongo或PostgreSQL。 这可以通过使用像监督: http : //docs.docker.com/articles/using_supervisord/

这个想法是configuration主pipe在容器内启动所有必要的服务,所以他们完全与其他容器隔离。 在我的环境中,我有mongo,xvfb,chrome和firefox全部运行在一个容器中。 所以真的,你还在运行一个进程(主pipe),但是启动了许多其他的进程。

至于为您的容器添加存储库,我只是让主机签出代码,然后当我运行docker时,我使用-v标志将回购添加到容器。 这样你就不需要每次重build容器。 我每晚都用最新的代码构build容器,以便能够在testing时添加所有必要的gem以更快地进行“gem install”。

最后,我有一个脚本作为容器的入口点,允许我通过我想要运行的testing。

然后Jenkins运行docker命令并通过testing运行。 这些可以并行,顺序或任何其他方式完成。 我目前正在考虑让这些testing在AWS的自动扩展组中的从属Jenkins实例上运行。

希望有所帮助。

无人机是一个基于docker的开源CI +在线服务: https : //drone.io

一般来说,它在docker容器中运行构build和testing,并在构build完成后移除所有容器。 您只需要提供一个名为.drone.yml的文件,其类似于.travis.yml的configuration来configuration您的构build。

它将pipe理你的服务,如数据库,caching作为链接的容器。

对于您的构build环境,您可以使用退出的泊坞窗图像作为依赖关系的模板。

到目前为止,它支持github.com和gitlab。 对于您自己的CI系统,您只能使用无人机CLI或其Web界面。

我推荐使用Jenkins docker插件 ,尽pipe它是新的,但它开始揭示jenkins中使用的docker的function,configuration写得很好。 (让我知道如果你有问题)

我计划使用它的策略。

  • 创build不同的应用程序图像来提供不同的服务,如postgres,mongodb,reddis等,由于它很less更新,它们将被提前全局configuration为“云”模板,每个虚拟机都会有标签来指示服务
  • 在每个jenkins作业中,每个图像将被选作从属节点(使用该标签作为名称)

当作业被触发时,它会在几秒内自动启动docker容器作为从站

它应该为你工作。

顺便说一句:正如我回答(2014.5)的时候,插件还不够成熟,但是这是正确的方向。