gpt4 book ai didi

docker - 在 dockerfile 和 CI 中运行构建和测试?

转载 作者:行者123 更新时间:2023-11-28 20:48:56 25 4
gpt4 key购买 nike

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

我也想构建一个 docker 镜像。我考虑过的一些选项:

  • 在 CI 上构建 docker 镜像并假设工件已经存在。这是最快的方法,但将构建过程与 CI 联系起来。它不能仅使用 1 个命令 (docker build) 手动构建

  • 将测试作为 docker build 的一部分运行。在 CI 上,我需要更多时间才能获得有关失败测试的信息(因为它必须下载图像、依赖项等)。但它允许在本地轻松构建 docker(可能很少使用的功能,但对本地 docker-compose 测试很有用)

  • 参数化构建以默认禁用/启用测试

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

最佳答案

构建您要在 Dockerfile 中部署的应用程序。不要包括仅测试依赖项、IDE、源代码控制工具或其他任何东西:包括实际运行应用程序所需的最少的东西集,仅此而已。不要费心尝试在 Dockerfile 中运行测试:这只是一个打包步骤,您应该在此之前运行测试。

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

尽量减少“生产”和“开发”设置之间的差异。理想情况下,根本没有代码更改,唯一的配置更改是数据库主机名之类的内容。

使用基于 Docker 的设置运行完整的端到端测试。这一步可能涉及到在 Jenkins 中运行 Docker Compose(有点毛茸茸)。它是一种“黑盒”测试,仅与服务的 UI 或外部 API 进行通信。这些测试可能存在于也可能不存在于源代码树中,但它们并未内置到 Docker 容器中。从 SO 问题的数量来看,在 Docker 空间之外启动像 Selenium 这样的工具也可能更容易。

关于docker - 在 dockerfile 和 CI 中运行构建和测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54929211/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com