docker - docker的CI管道?
问题描述
dockerized 项目管道的最佳实践是什么:
1)git pull -> 运行测试 -> docker build && push
2) git pull -> docker build -> 运行测试 -> docker push
如果是第二个,代码在容器内,我们如何运行测试?
在我看来, exec 绝对不是一个选择。
解决方案
首先,这在很大程度上取决于您正在创建的应用程序以及您正在运行什么样的测试......但这是我的观点:
我会建议第二个选项。
当您运行测试时,理想情况下您希望在尽可能接近生产的环境中运行它们。如果您打算将映像部署到生产环境,那么我建议您首先构建映像然后运行测试。
我喜欢使用标记构建的图像:COMMIT_HASH
然后在该图像上运行测试的想法。如果您有多个测试阶段,这意味着您可以重复使用相同的图像,因为您已使用提交哈希对其进行了标记。
例如,如果您的管道类似于Unit -> Integration -> E2E -> Deploy to Staging -> Deploy to Production
,那么在所有步骤中,您将能够通过提交哈希引用相同的标签,并确保您正在测试的内容在所有阶段都完全相同。
测试完成后,只需将图像标记为:latest
即可部署到生产环境
如果代码在容器内,根据您希望运行的测试类型,您可以为测试创建一个 docker-compose.yml 文件,然后您可以使用该文件启动任何其他必要的测试服务(如数据库模拟例如带有浏览器节点的 Selenium hub)
推荐阅读
- java - 将 Integer[] 转换为 int[] 的最佳方法是什么
- java - spring-data-jpa 中的 flush 方法如何工作?
- python - 如何使用python计算ab测试中两个列表的统计显着性
- c# - 为进程 C# 传递参数
- go - 如何将字节数组传递给 HyperLedger Fabric 中的链码
- mysql - 通过 Hashicorp Vault 生成凭据时出现错误 403
- javascript - tensorflowjs如何在cnn预测中获得内层输出
- android - 以编程方式检查共享首选项密钥是否加密
- typescript - 打字稿:无法让泛型与扩展一起使用
- wpf - 通过 ReactiveCommand 生成的事件以意外的顺序运行