如何在Dockerfile中使用gitlab-ci.yml中的变量

12
例如,有一个名为.gitlab-cy.yml的文件,其中包含ENV_BACKEND_URI变量。
build:
  stage: build
   variables:
     ENV_BACKEND_URI: "http://localhost:4200"
  script:
    - docker-compose build

docker-compose 使用 Dockerfile

FROM node:10-alpine as build-stage
...
...
...
RUN ["chmod", "+x", "/dummy.sh"]
...
...

我希望在 dummy.sh 脚本中使用 ENV_BACKEND_URI 变量。

例如,只需将其输出。

echo $ENV_BACKEND_URI

我该如何将它传递过去?

我已经尝试在docker-compose.yml中进行设置。

environment:
  - ENV_BACKEND_URI=${ENV_BACKEND_URI}

但是在 dockerfile 或者 dymmy.sh 中都不可用。

2个回答

14
如果我理解你的意思正确,那么你想将环境变量的值加入到你的镜像中。请注意,实际上你更应该相反,即建立一个通用的镜像并通过设置环境变量来调整它的行为。然而,这两种方法都很相似。
为了将环境变量的值加入到镜像中,你需要在Dockerfile中使用ARG关键字指定环境变量的值,并通过--build-arg参数在使用docker build时从shell中传递它的值,或者在compose文件中使用args关键字。请考虑以下Dockerfile和docker-compose文件: Dockerfile
FROM alpine

ARG ENV_BACKEND_URI=$ENV_BACKEND_URI

RUN mkdir -p /app
RUN echo $ENV_BACKEND_URI > /app/script.sh

CMD ["cat", "/app/script.sh"]

docker-compose.yml

version: "3.7"

services:
  app:
    build:
      context: .
      args:
        ENV_BACKEND_URI: "google.de"

使用 Dockerfile 中的 ARG 关键字,我们声明希望在构建时使用变量 ENV_BACKEND_URI,并且其值应等于构建期间接收到的环境变量 ENV_BACKEND_URI 的值。在 compose 文件中,我们通过使用 arg 关键字实现这一点。

当调用 docker-compose build && docker-compose up 时,最终会看到输出 app_1 | google.de。如果您更喜欢使用 docker build 命令,则必须首先调用 docker build --build-arg ENV_BACKEND_URI=google.de --tag=foo .,然后通过调用 docker run foo 来执行它。两者产生相同的输出,即它们都将 google.de 打印到 stdout。

对于 CI/CD 使用情况,您必须将 compose 文件中变量的值设置为环境中变量的值,即 ENV_BACKEND_URI: $ENV_BACKEND_URI


4

我正在开发一个React应用。在Gitlab的用户界面中设置了环境变量之后,我在.gitlab-ci.yml中的构建阶段使用了它们,代码如下:

build-image:
  stage: build
  tags:
    - *TARGET_DEV
  script:
    - docker build --rm -f docker/build/Dockerfile
      --build-arg REACT_APP_FSI_IMPORT_QLIKSENSE_URL=$REACT_APP_FSI_IMPORT_QLIKSENSE_URL
      --build-arg REACT_APP_REPORT_QLIKSENSE_URL=$REACT_APP_REPORT_QLIKSENSE_URL

我在Dockerfile的顶部,在FROM下方简单声明即可。

FROM ...

ARG REACT_APP_REPORT_QLIKSENSE_URL 
ARG REACT_APP_FSI_IMPORT_QLIKSENSE_URL

1
https://docs.docker.com/engine/reference/builder/#arg请注意,此链接为Docker构建器中ARG指令的官方文档。 - go2null

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接