在dockerfile和CI上运行构建和测试?

问题描述 投票:0回答:1

在CI上运行测试的最快方法是./gradlew test./gradle build。它将下载所有必要的依赖项(可以某种方式缓存在CI上),运行测试并生成工件(jar文件)

我还想建立一个码头图像。我考虑过的一些选择:

  • 在CI上构建docker镜像并假设该工件已经存在。这是最快的方式,但将建设过程与CI联系起来。它不能只用1命令手动构建(docker build)
  • 将测试作为docker build的一部分运行。在CI上我需要更多的时间来获取有关测试失败的信息(因为它必须下载图像,依赖项等)。但它允许在本地轻松构建docker(可能很少使用的功能,但对于本地docker-compose for tests非常有用)
  • 参数化构建默认情况下禁用/启用测试

处理这些要求的标准方法是什么?任何最佳做法?

docker testing continuous-integration
1个回答
0
投票

构建要在Dockerfile中部署的应用程序。不要包含仅测试依赖项,IDE,源代码控制工具或其他任何内容:包括实际运行应用程序所需的最少组件,仅此而已。不要试图在Dockerfile中运行测试:它只是一个打包步骤,你应该在此之前运行测试。

编写好的本地测试(例如,在Java领域,使用JUnit)并确保它们通过。如果您需要依赖于代码详细信息和外部服务的“白盒”集成测试,请在本地或CI系统中运行它们,但在Docker之外。

最大限度地减少“生产”和“开发人员”设置之间的差异。理想情况下,根本没有代码更改,唯一的配置更改是数据库主机名等。

使用基于Docker的设置运行完整的端到端测试。这一步可能涉及在Jenkins中运行Docker Compose(稍微毛茸茸)。这是一个“黑盒子”测试,只与服务的UI或外部API通信。测试可能存在也可能不存在于源树中,但它们不会内置在Docker容器中。在Docker空间之外启动像Selenium这样的工具可能更容易,从获得该设置的SO问题的数量来判断。

© www.soinside.com 2019 - 2024. All rights reserved.