使用Ansible、Jenkins和Docker构建快速测试环境

6
我计划使用Ansible、Jenkins和Docker一起构建测试环境。计划如下。
为您的环境中使用的每个工具创建Ansible Playbooks,并将它们存储在Git上。 使用Jenkins创建作业,在开发服务器上创建Docker容器并使用Ansible Playbooks来提供Docker容器。 创建Jenkins作业,以便用户可以选择要与Docker容器一起使用的Playbooks,并相应地构建容器。
整个概念可以总结如下图所示。

Devops

我看到的好处是:

自动复制完全相同的生产环境。
根据需求扩展测试环境。
在单个服务器上为应用程序测试提供不同的平台。
更快的集成测试。
推广敏捷方法。
自由开发和定制测试环境。
即使不知道操作系统、配置,开发人员和测试人员也可以自己创建环境。
在干净的环境中测试应用程序的部署,进行新的构建。

有人实施过这种类型的环境架构吗?我想讨论其可行性和实际好处。


完成得如何?你成功了吗?请分享你的经验。 - Anuvrat Parashar
2个回答

4
我正在使用一种类似但不同的方法:
  • 定义Dockerfiles或chef/puppet/ansible/salt provisioning。这与您的方法相同。

  • 将这些描述放入版本控制中。这也与您的方法相同。

  • 使用Jenkins A来进行CI和夜间构建镜像,并将其上传到仓库中。以便管理不同的版本并保留旧的镜像。这在您的图表中引入了一个镜像仓库。

  • 使用Jenkins-Swarm slaves扩展这些镜像。这使得您的Jenkins环境能够进行即时部署。

在这里,我将软件构建和构建构建Slave本身分开。

  • 我部署了一个Jenkins B来构建不同环境下的软件。

  • 现在我需要选择要永久部署的容器和按需部署的构建容器。

    • 常驻容器被构建作业大量使用,作为swarm从节点启动,并在夜间构建时每天更换一次。
    • 临时容器由Jenkins-Docker-Plugin管理。
    • 对于更复杂的环境配置,我使用docker-compose来管理临时可用性。
    • 对于临时环境,即用于运行这些配置的VM,我使用docker-swarm。

图示: enter image description here


感谢分享您的用户案例,看起来很不错,我也会去查看。 - thinkingmonster
能否请您添加一个像@thinkmonster所做的图表? - Tuan
谢谢 @maybeg,这让我更清楚了。 - thinkingmonster
@maybeg 顺便问一下,你在这个地方为什么有两个Jenkins呢?我的意思是,你可以配置不同的任务,并且可以使用单个Jenkins来管理所有内容。也许我没有理解,但请告诉我们是否有使用两个Jenkins的特殊含义。 - thinkingmonster
我在Github上维护了一个Jenkins Docker容器:blacklabelops/jenkins。因此,我倾向于部署更多的实例,因为这样更容易。我可以根据任务分别处理实例,并保持灵活性以重组我的基础设施,例如从云端移动到另一个云端。当然,如果您将所有作业放在一个实例中,对Jenkins来说并没有太大的差别! - blacklabelops
@maybeg,我真的很喜欢你的方法。对于一个开源软件项目,我在hub.docker.com上使用https://github.com/zbeekman/nightly-docker-rebuild建立了GCC trunk的夜间docker构建(因为该项目是由GCC采用的Coarray Fortran的官方实现)。 - zbeekman

0

如果您想使用具有给定操作系统上给定软件包的最新可用版本的docker镜像进行测试,则需要设置夜间docker镜像重建。我有一个非常小而简单的项目,可以让您在https://github.com/zbeekman/nightly-docker-rebuild上运行夜间docker镜像重建。我使用它从源代码重新构建GCC trunk,但您也可以轻松地使用它来安装/升级软件包管理器中的软件包,或处理可能会更新上游并对您的项目产生潜在影响的任何其他构建/运行时依赖项。这样,您就可以在客户/用户遇到问题之前及早发现问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接