我们的dockerfile创建应用程序环境(例如env变量,使用apt-get安装库等)。它还会从其git repo中提取并复制python应用程序代码。

但是,我们正在辩论是否应将应用程序测试(某些单元,某些集成)放在docker RUN命令(例如RUN /bin/bash -c "source activate cool_env; pytest")中或在使用CI堆栈(例如Jenkins,Openshift)进行构建之后对已构建的容器执行测试。

评论

还有一个新功能,即多阶段构建,使您可以在同一Dockerfile中进行构建和测试。

#1 楼

我支持J.Doe关于在构建和测试阶段的每个阶段使用单独的Docker文件的建议。这种方法还允许您:


出于任何原因(例如已知的间歇性故障)重新运行测试阶段,而无需重新执行构建阶段
运行多个不同版本使用相同的构建并行测试阶段-例如,而不是运行由序列化测试组成的单个长测试阶段,从而可能显着提高总体管道速度。


#2 楼

如果将所有内容都运行在同一容器中...

PRO:您还解决了内联配置测试环境的CasC难题

CON:您错过了黑盒测试部分,假设您的容器不接受外部连接。糟糕!

可能的解决方案:因此,我将使用基于Docker的多阶段声明性管道:每个工件都沿其级联的每个Docker环境。