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

时间:2019-10-02 15:14:56

标签: docker docker-compose environment-variables gitlab-ci

例如有 .gitlab-cy.ymlENV_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"]
...
...

我想在ENV_BACKEND_URI脚本中使用此dummy.sh变量

例如只是回声

echo $ENV_BACKEND_URI

我如何将其传递到那里?

我已经尝试在docker-compose.yml中设置它

environment:
  - ENV_BACKEND_URI=${ENV_BACKEND_URI}

但是dockerfiledymmy.sh都无法使用

1 个答案:

答案 0 :(得分:1)

如果我对您的理解正确,那么您希望将环境变量的值烘焙到图像中。请注意,您宁愿相反,即构建通用映像并通过设置环境变量来调整其行为。不过,这两种方法都是相似的。

为了将环境变量的值烘焙到图像中,您必须使用Dockerfile中的ARG关键字指定环境变量的值,并在以下情况下通过--build-arg传递其值在外壳中使用docker build,或在撰写文件中使用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的值在建设期间收到。我们使用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打印到标准输出。

对于CI / CD用例,必须将撰写文件中的变量值设置为环境中的变量值,即ENV_BACKEND_URI: $ENV_BACKEND_URI