2

假设我想将 mu 当前的验收测试 CI 环境移动到 docker,这样我就可以利用性能改进并快速设置多个克隆以进行缓慢的验收测试。

我会有很多服务。最简单的是 postgres、mongodb、reddis 等,它们很少更新。

但是,如果我自己的产品也有很多服务,我该怎么办?- 超过 10-20 种服务,所有这些服务都需要一起进行测试。使用 docker 处理这个问题是否可行,即 CI 如何有效地自动控制这么多容器并克隆它们以并行运行验收测试。

另外,我将如何轻松地为 CI 自动更新容器?CI 是否只需要在每次运行开始时使用每个服务分支的 HEAD 重建每个容器?或者 CI 会git pullupdate/migrate command每项服务上运行吗?

在 VM-s 中,很容易控制这些服务,但我想确信 docker 对它也有好处或更好。

4

3 回答 3

2

我和你处于同样的位置,最近这一切都符合我的喜好。

首先,虽然 docker 通常旨在运行单个进程,但为了测试,我发现 docker 容器运行所需的所有服务效果更好。走这条路有一些重复,但您不必担心共享服务,如 Mongo 或 PostgreSQL。这可以通过使用类似主管的东西来完成:http: //docs.docker.com/articles/using_supervisord/

这个想法是配置supervisor在容器内启动所有必要的服务,因此它们与其他容器完全隔离。在我的环境中,我有 mongo、xvfb、chrome 和 firefox 都在一个容器中运行。所以真的,你仍然在运行一个进程(主管),但它启动了许多其他进程。

至于将存储库添加到您的容器,我只是让主机检查代码,然后当我运行 docker 时,我使用 -v 标志将存储库添加到容器中。这样您就不需要每次都重建容器。我每晚使用最新代码构建容器,以便能够添加所有必要的 gem,以便在测试时更快地“安装”gem。

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

然后 Jenkins 只需运行 docker 命令并通过测试即可运行。这些可以并行、顺序或您喜欢的任何其他方式完成。我目前正在研究让这些测试在 AWS 的自动扩展组中的从属 Jenkins 实例上运行。

希望有帮助。

于 2014-06-09T16:40:11.317 回答
2

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

通常它在 docker 容器中运行构建和测试,并在构建后删除所有容器。您只需要提供一个.drone.yml具有类似配置的文件,例如.travis.yml配置您的构建。

它将管理您的服务,例如数据库,缓存作为链接容器。

对于您的构建环境,您可以使用现有的 docker 镜像作为依赖项模板。

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

于 2014-05-21T21:57:08.863 回答
1

我推荐使用Jenkins docker plugin,虽然它是新的,但它开始暴露 jenkins 内部使用的 docker 的强大功能,那里的配置写得很好。(如果你有问题,请告诉我)

我计划使用它的策略。

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

当job被触发时,它会在几秒钟内自动启动docker容器作为slave

它会为你工作。

BTW:正如我回答的时间(2014.5),插件还不够成熟,但它是正确的方向。

于 2014-05-24T13:45:45.167 回答