如何将 GitLab CI 文件变量传递给 Dockerfile 和 docker 容器?

rob*_*liv 13 gitlab docker gitlab-ci dockerfile devops

GitLab CI 允许向项目添加自定义变量。

它允许使用类型的秘密变量,file其中我指定了一个作为变量名称的密钥和作为文件内容的值(例如证书的内容)

然后在管道执行期间,内容将保存为临时文件,调用变量名称将返回创建文件的路径。

最终,我需要将此文件复制到构建项目时创建的 Docker 容器中。(docker build ...在yml中)

当如果变量作品测试,我想echo $VARIABLE.gitlab-ci.yml和它的作品,临时文件的路径返回。但是在RUN echo $VARIABLEin 中执行时Dockerfile,它是空的。因此我也不能使用ADD $VARIABLE /tmp/这是我的目标。

有没有办法解决这个问题并使这个文件可供Dockerfile? 我是 Docker 和 GitLab 的新手,不知道还能去哪里找。

rob*_*liv 10

必须使用 .yml 文件docker build参数--build-arg VARIABLE并在 Dockerfile 中使用,ARG VARIABLE因此 Dockerfile 知道它需要使用环境中的变量。


Nic*_*ter 7

不幸的是,这是不可能的,因为 CI/CD 变量中的文件在构建时被复制到不在 docker 构建上下文中的 tmp 目录 ($CI_PROJECT_DIR.tmp)。然而,ADD由于需要的文件存在于构建上下文记录

解决方法可能是在 docker ${CI_PROJECT_DIR}build 命令之前复制当前目录中文件的内容(假设 Dockerfile 在 中):

cat $VARIABLE > ${CI_PROJECT_DIR}\mynewfile
Run Code Online (Sandbox Code Playgroud)

并引用 Dockerfile 中的文件:

ADD mynewfile /tmp/
Run Code Online (Sandbox Code Playgroud)