Gitlab CI/CD 到 Digital Ocean 使用 docker-compose 进行多个 repos

Posted

技术标签:

【中文标题】Gitlab CI/CD 到 Digital Ocean 使用 docker-compose 进行多个 repos【英文标题】:Gitlab CI/CD to Digital Ocean for multiple repos using docker-compose 【发布时间】:2020-10-30 16:25:57 【问题描述】:

目前我在 Gitlab 中有一个项目 (repo),它是一个 Angular 应用程序。我正在使用 Gitlab CI/CD 来构建、测试、发布和部署。发布将构建一个新的 docker 映像,将其推送到 Gitlab 注册表,然后在我的 Digital Ocean 液滴上的 docker 容器中将其部署到 nginx 上。这很好用。

假设我想像 MEAN 堆栈一样向它添加一个后端,这样我就可以使用 docker-compose 文件运行 2 个容器。

容器 1 - 角度 容器 2 - Node.js、Express.js 和 MongoDB

当发生更改时(自己的 Dockerfile 和 gitlab-ci.yml 文件)必须单独构建 2 个 gitlab 项目(repo),但使用 docker-compose 文件一起部署。

我在哪里管理/放置 docker-compose 文件?

如果我的假设正确,我希望我的解释很清楚。

提前致谢。

【问题讨论】:

这能回答你的问题吗? In CI/CD how to manage dependency between frontend and backend? In CI/CD how to manage dependency between frontend and backend? 可能不是一个完全重复的问题,但总体思路似乎也适用于您的用例:您可以在第三个存储库中添加带有专用集成测试的 docker-compose.yml 文件,然后依靠标签命名约定来提取正确的后端/前端版本,可能只有 2 个存储库,前端存储库中的 docker-compose.yml 文件。 否则,请遵循所谓的 monorepo 设置,即具有多个文件夹和单个 CI 的单个 repo。 您好,感谢您的回复。 Monorepos 有一些很大的优势,尤其是在这种情况下,但我认为 Gitlab CI 不可能使用 monorepo,这就是我假设创建 2 个 repos 的原因。这是我第一个使用 Gitlab CI/CD 的项目。我会尝试进一步研究。 如果您从 GitLab CI 开始,我首先建议您将 .gitlab-ci.yml YAML 参考手册 (docs.gitlab.com/ee/ci/yaml) 加入书签。接下来,GitLab CI 确实支持 monorepo 工作流程,参见。 this doc page 给出了使用 changes: 键的示例;另见例如this article 依赖 Docker 或 that article 利用 needs: 键。 【参考方案1】:

根据您的评论,我知道您有兴趣采用 monorepo 配置。

在这种情况下,对于问题

我在哪里管理/放置 docker-compose 文件?

您可以将 docker-compose.yml 文件放在 GitLab CI 项目的根目录下,这将导致如下目录结构:

monorepo-project/
├── backend/
│   ├── Dockerfile
│   ├── .dockerignore
│   └── src/
├── frontend/
│   ├── Dockerfile
│   ├── .dockerignore
│   └── src/
├── docker-compose.yml
├── .git/
├── .gitignore
└── .gitlab-ci.yml

正如https://docs.gitlab.com/ee/user/packages/workflows/monorepo.html 中指出的那样(此页面的原始版本已被this commit 删除,在this URL 仍然可用),您可以使用changes: 键调整您的配置,这样如果只有一个项目的一部分发生变化(例如,前端),然后 CI 会相应地运行。

进一步的指针

有关更多示例,请参见例如this article in Medium 专门依赖于Docker,或that blog article 使用needs: 键。

最后,GitLab CI YAML conf 文件的语义在 https://docs.gitlab.com/ee/ci/yaml/ 中有详细记录(要加入书签!)。

【讨论】:

以上是关于Gitlab CI/CD 到 Digital Ocean 使用 docker-compose 进行多个 repos的主要内容,如果未能解决你的问题,请参考以下文章

gitlab 添加 CI CD

Gitlab CI/CD自动部署方案探索

Gitlab CI/CD自动部署方案探索

Gitlab CI/CD自动部署方案探索

自托管gitlab CI / CD推送注册表到ECS服务

gitlab-ci-runner安装