在CI上运行测试的最快方法是./gradlew test
或./gradle build
。它将下载所有必要的依赖项(可以某种方式缓存在CI上),运行测试并生成工件(jar文件)
我还想建立一个码头图像。我考虑过的一些选择:
处理这些要求的标准方法是什么?任何最佳做法?
构建要在Dockerfile中部署的应用程序。不要包含仅测试依赖项,IDE,源代码控制工具或其他任何内容:包括实际运行应用程序所需的最少组件,仅此而已。不要试图在Dockerfile
中运行测试:它只是一个打包步骤,你应该在此之前运行测试。
编写好的本地测试(例如,在Java领域,使用JUnit)并确保它们通过。如果您需要依赖于代码详细信息和外部服务的“白盒”集成测试,请在本地或CI系统中运行它们,但在Docker之外。
最大限度地减少“生产”和“开发人员”设置之间的差异。理想情况下,根本没有代码更改,唯一的配置更改是数据库主机名等。
使用基于Docker的设置运行完整的端到端测试。这一步可能涉及在Jenkins中运行Docker Compose(稍微毛茸茸)。这是一个“黑盒子”测试,只与服务的UI或外部API通信。测试可能存在也可能不存在于源树中,但它们不会内置在Docker容器中。在Docker空间之外启动像Selenium这样的工具可能更容易,从获得该设置的SO问题的数量来判断。