在dockerfile和CI上运行构建和测试?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在dockerfile和CI上运行构建和测试?相关的知识,希望对你有一定的参考价值。
在CI上运行测试的最快方法是./gradlew test
或./gradle build
。它将下载所有必要的依赖项(可以某种方式缓存在CI上),运行测试并生成工件(jar文件)
我还想建立一个码头图像。我考虑过的一些选择:
- 在CI上构建docker镜像并假设该工件已经存在。这是最快的方式,但将建设过程与CI联系起来。它不能只用1命令手动构建(docker build)
- 将测试作为docker build的一部分运行。在CI上我需要更多的时间来获取有关测试失败的信息(因为它必须下载图像,依赖项等)。但它允许在本地轻松构建docker(可能很少使用的功能,但对于本地docker-compose for tests非常有用)
- 参数化构建默认情况下禁用/启用测试
处理这些要求的标准方法是什么?任何最佳做法?
构建要在Dockerfile中部署的应用程序。不要包含仅测试依赖项,IDE,源代码控制工具或其他任何内容:包括实际运行应用程序所需的最少组件,仅此而已。不要试图在Dockerfile
中运行测试:它只是一个打包步骤,你应该在此之前运行测试。
编写好的本地测试(例如,在Java领域,使用JUnit)并确保它们通过。如果您需要依赖于代码详细信息和外部服务的“白盒”集成测试,请在本地或CI系统中运行它们,但在Docker之外。
最大限度地减少“生产”和“开发人员”设置之间的差异。理想情况下,根本没有代码更改,唯一的配置更改是数据库主机名等。
使用基于Docker的设置运行完整的端到端测试。这一步可能涉及在Jenkins中运行Docker Compose(稍微毛茸茸)。这是一个“黑盒子”测试,只与服务的UI或外部API通信。测试可能存在也可能不存在于源树中,但它们不会内置在Docker容器中。在Docker空间之外启动像Selenium这样的工具可能更容易,从获得该设置的SO问题的数量来判断。
以上是关于在dockerfile和CI上运行构建和测试?的主要内容,如果未能解决你的问题,请参考以下文章
Swift 测试在本地通过,但在 Travis-CI 上构建失败
Gitlab Ci使用docker和mysql服务进行缓慢构建