多容器应用如何使用Gitlab的Auto DevOps?

How to use Gitlab's Auto DevOps for multi-container application?

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

上可用

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

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

并且 Nginx 的 Dockerfile 没有找到 project.conf

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

找不到文件的原因是 docker 的上下文工作方式。由于您 运行ning docker 从根目录构建,因此您的上下文将位于根目录中,而不是来自 docker 文件的路径。这意味着您的 docker 构建命令正在尝试查找 /requirements.txt 而不是 src/app/requirements.txt。您可以通过在 运行 docker 构建之前执行 cd 更改到您的 /src/app 目录并从docker 构建(因为您不再需要指定文件夹)。

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