如何将 Gitlab 的 Auto DevOps 用于多容器应用程序?

Posted

技术标签:

【中文标题】如何将 Gitlab 的 Auto DevOps 用于多容器应用程序?【英文标题】:How to use Gitlab's Auto DevOps for multi-container application? 【发布时间】:2022-01-05 02:04:47 【问题描述】:

我有一个多容器应用程序,使用 nginx 作为 Web 服务器和反向代理,以及一个简单的 'Hello World' Streamlit 应用程序。 它可以在my Gitlab 上找到。

我是 DevOps 的新手,因此想利用 Gitlab's Auto DevOps 来简化它。 默认情况下,Gitlab 的 Auto DevOps 只需要一个 Dockerfile,并且位于项目的根目录(source) 令人惊讶的是,我只在我的多容器用例中找到了一个旨在回答这个问题的资源:@​​987654324@ 我听从了建议,对我的 dockerfile 路径的 .gitlab-ci.yml 做了细微的更改。

但是我遇到了 Dockerfiles 无法识别其文件夹中的文件的问题: 应用程序的 Dockerfile 找不到 requirements.txt

Nginx 的 Dockerfile 没有找到 project.conf

似乎DOCKERFILE_PATH: src/nginx/Dockerfile 变量本身只提供对 Dockerfile 的访问权限,但不将此路径理解为构建的位置。 如何自定义此 .gitlab-ci.yml 以便构建正确通过? 非常感谢!

【问题讨论】:

【参考方案1】:

找不到文件的原因是由于 docker 的上下文是如何工作的。由于您是从根目录运行 docker build,因此您的上下文将位于根目录中,而不是来自 dockerfile 的路径。这意味着您的 docker build 命令正在尝试查找/requirements.txt 而不是src/app/requirements.txt。您可以通过在运行 docker build 之前执行 cd 以更改到您的 /src/app 目录并从您的 docker build 中删除 -f 标志(因为您不再需要指定文件夹)来相对轻松地解决此问题。

由于每个作业都在一个隔离的容器中执行,因此您无需担心 CD 回到您的构建根目录,因为您的作业从不运行任何其他非 docker 命令。

【讨论】:

以上是关于如何将 Gitlab 的 Auto DevOps 用于多容器应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

Gitlab Auto DevOps 入口端点

Kubernetes 上的 GitLab Auto DevOps 挂起,网络超时,无法执行 yj

Gitlab CI/CD 中的秘密检测

云原生大规模普及,极狐与GitLab引发中国DevOps井喷

官宣!禅道与极狐(GitLab)达成深度合作,携手推进开源开放DevOps生态

Meetup回顾|DevOps&MLOps如何在企业中解决机器学习困境?