首页 > 解决方案 > docker的CI管道?

问题描述

dockerized 项目管道的最佳实践是什么:

1)git pull -> 运行测试 -> docker build && push

2) git pull -> docker build -> 运行测试 -> docker push

如果是第二个,代码在容器内,我们如何运行测试?

在我看来, exec 绝对不是一个选择。

标签: dockercontinuous-integrationdevopsqa

解决方案


首先,这在很大程度上取决于您正在创建的应用程序以及您正在运行什么样的测试......但这是我的观点:

我会建议第二个选项。

当您运行测试时,理想情况下您希望在尽可能接近生产的环境中运行它们。如果您打算将映像部署到生产环境,那么我建议您首先构建映像然后运行测试。

我喜欢使用标记构建的图像:COMMIT_HASH然后在该图像上运行测试的想法。如果您有多个测试阶段,这意味着您可以重复使用相同的图像,因为您已使用提交哈希对其进行了标记。

例如,如果您的管道类似于Unit -> Integration -> E2E -> Deploy to Staging -> Deploy to Production,那么在所有步骤中,您将能够通过提交哈希引用相同的标签,并确保您正在测试的内容在所有阶段都完全相同。

测试完成后,只需将图像标记为:latest即可部署到生产环境

如果代码在容器内,根据您希望运行的测试类型,您可以为测试创建一个 docker-compose.yml 文件,然后您可以使用该文件启动任何其他必要的测试服务(如数据库模拟例如带有浏览器节点的 Selenium hub)


推荐阅读