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的主要内容,如果未能解决你的问题,请参考以下文章