Cloudbuild - 使用不同步骤的自定义变量构建 docker 镜像

问题描述

我想实现以下构建过程:

  • 根据构建分支决定 environment var 的值
  • 通过差异构建步骤保留此值
  • 使用此变量将其作为 build-arg 传递给 docker build

这是我拥有的一些 cloudbuild 配置:

  - id: 'Get env from branch'
    name: bash
    args:
      - '-c'
      - |-
        environment="dev"
        if [[ "${BRANCH_NAME}" == "staging" ]]; then
          environment="stg"
        elif [[ "${BRANCH_NAME}" == "master" ]]; then
          environment="prd"
        fi
        echo $environment > /workspace/environment.txt

  - id: 'Build Docker image'
    name: bash
    dir: $_SERVICE_DIR
    args:
      - '-c'
      - |-
        environment=$(cat /workspace/environment.txt)
        echo "===== ENV: $environment"
        docker build --build-arg ENVIRONMENT=$environment -t gcr.io/${_GCR_PROJECT_ID}/${_SERVICE_NAME}/${COMMIT_SHA} .

问题出在第二步。如果我使用 bash 步骤映像,那么我没有 docker 可执行文件来构建我的自定义映像。

如果我使用 gcr.io/cloud-builders/docker 步骤图像,那么我将无法执行 bash 脚本。在 args 字段中,我只能为 docker 可执行文件传递参数。这样我就无法提取我在构建步骤中坚持的 environment 值。

我设法实现这两个目标的方法是使用我自己的自定义预构建映像,其中包含 bashdocker 可执行文件。我在容器注册表中有该映像,并将其用作构建步骤映像。但这需要我这边的一些定制工作。我想知道 cloudbuild 的内置工具是否有更好、更标准化的方法。

来源:

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)