如何在构建期间通过 cloudbuild.yaml 正确 get/set env vars?

How to properly get/set env vars during the build via cloudbuild.yaml?

我正在使用 Google Cloud Container Builder 来构建我的图像。我将它连接到我的 GitHub 存储库,因此它是通过推送到特定分支来触发的。 我为我的构建步骤显式提供了一些环境变量并使用了介词。

cloudbuild.yaml

steps:
...
- name: gcr.io/cloud-builders/docker
  args: ['build', '-t', 'eu.gcr.io/${PROJECT_ID}/project-name:${SHORT_SHA}', '.']
  env:
    - 'TEST_ENV=test123'
    - 'TEST=${_TEST}'
...

Docker 文件

FROM alpine:latest

RUN printenv

...

我可以在 Env 的构建详细信息中看到我的环境变量。触发构建时此构建步骤的 Vars 部分:TEST_ENV=test123 TEST=test_prepositon

但是当执行 RUN printenv 时,我只看到 HOSTNAME, SHLVL, HOME, PATH, PWD 环境变量。

我的错误在哪里?提前谢谢你。

您的示例将您的环境变量传递给 docker 命令,但不会传递给 docker 构建上下文。

当您通过 env 设置环境变量时,这些环境变量是在 运行 容器中设置的。但是当 docker 执行 docker build 时,默认情况下它不会将环境传递给构建上下文。

要设置环境变量,以便它们可以通过 RUN 指令在构建上下文中访问,请将您的 docker build 传递给 --build-arg.

Here is Docker's documentation 关于设置 build-time 个变量。

这是您要查找的内容的完整示例。

cloudbuild.yaml:

steps:
  - name: "gcr.io/cloud-builders/docker"
    args: [
      "build",
      "-t",
      "gcr.io/$PROJECT_ID/$REPO_NAME:$SHORT_SHA",
      ".",
      "--build-args", "SOME_ARG=${_VAR_NAME_FROM_GOOGLE_TRIGGERS}"
    ]

Docker 文件:

ARG SOME_ARG
ENV SOME_ENV_VAR_NAME=${SOME_ARG}

可以在 docker 容器中访问变量 SOME_ENV_VAR_NAME

另外,我想添加 2 篇解释 docker arg 和 env 的精彩文章: