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

Posted

技术标签:

【中文标题】在我的 CI 管道中使用 docker-compose vs codeship-services【英文标题】:Using docker-compose vs codeship-services in my CI pipeline 【发布时间】:2018-03-02 03:55:12 【问题描述】:

我正在构建一个包含几个microservices 的应用程序,并尝试使用CodeshipDockerCI/CD 管道进行原型设计。

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

默认情况下,我们会查找文件名 codeship-services.yml。在其 缺席时,Codeship 将自动搜索 docker-compose.yml 文件来代替它的位置。

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

我的理解正确吗?

【问题讨论】:

【参考方案1】:

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

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

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

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

我希望这对您有所帮助并且不会让您更加困惑;)

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于在我的 CI 管道中使用 docker-compose vs codeship-services的主要内容,如果未能解决你的问题,请参考以下文章

如何从 gitlab CI 管道中推送到仓库?

gitlab ci 管道部署 ftp 失败

GitLab Runner CI 管道内的 SSH 连接无法验证主机密钥

如何从VSTS CI管道为解决方案中的每个项目单独发布工件?

Gitlab CI/CD 管道给出 Dockerfile 错误

具有复杂子文件夹的 Gitlab CI 父/子管道