在我的 CI 管道中使用 docker-compose 与 codeship-services

Using docker-compose vs codeship-services in my CI pipeline

我正在构建一个包含几个 microservices 的应用程序,并尝试使用 CodeshipDocker.

制作 CI/CD 管道的原型

我对使用 codeship-services.ymldocker-compose.yml 之间的区别有点困惑。 Codeship 文档说 -

By default, we look for the filename codeship-services.yml. In its absence, Codeship will automatically search for a docker-compose.yml file to use in its place.

根据我的理解,docker-compose 可能更适合我的情况,因为我想同时为所有 microservices 启动容器以进行集成测试。如果我想串行而不是并行构建我的服务,codeship-services.yml 会有所帮助。

我的理解正确吗?

您可以像使用 docker-compose.yml 一样使用 codeship-services.yml。因此,您可以定义服务并通过 link 键启动多个容器。

我在 codeship-services.yml 中做的完全一样。我对我的前端服务进行了一些测试,当我通过 codeship-steps.yml 运行 时,该服务会启动所有依赖的服务(后端、数据库等),就像在 docker-compose.yml 中一样。

一开始我有点困惑有2个几乎相同的文件。我实际上就这个问题联系了 Codeship 支持,答案是它可能是同一个文件(因为撰写文件中所有不可用的功能都被忽略了,请参阅 here)但在几乎所有情况下他们都看到它是更容易在最后有两个单独的文件,一个用于 CI/CD,一个用于 运行ning docker-compose.

结果对我来说也是如此,因为我需要很多仅用于 CI/CD 的服务,例如部署或仅进行 cURL 测试的特殊测试容器,例如..

希望对您有所帮助,不要让您更加困惑 ;)

codeship-services.yml 视为 docker-compose.yml 的超集,因为 codeship-services.yml 具有 Docker Compose 不提供的附加选项。除此之外,它们完全相同。两者构建镜像的方式相同,并且都可以一次启动所有容器。

也就是说,我同意 Moema 的回答,即在您的项目中同时拥有这两个文件并针对它们的环境优化每个文件通常会更好。例如,缓存只能在 codeship-services.yml 中配置。对于我们的图像,缓存对构建时间有很大的影响,所以我们绝对想使用它。就像 Moema 一样,我们在 CI 上需要很多本地不需要的辅助工具(AWS CLI、curl、测试框架……)。另一方面,我们经常在本地 运行 多个服务实例,这在 Codeship 上是没有必要的。

在我们的项目中同时拥有这两个文件使我们更容易满足 CI 和本地开发的不同要求。