Cloudbuild - 使用来自不同步骤的自定义变量构建 docker 图像
Cloudbuild - build docker image with custom variable from a different step
我想实现如下构建过程:
- 根据构建分支决定
environment
var 的值
- 通过 diff 构建步骤保留此值
- 使用此变量将其作为
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
的值。
我设法实现这两个目标的方法是使用我自己的自定义预构建映像,其中包含 bash
和 docker
可执行文件。我在容器注册表中有该映像,并将其用作构建步骤映像。但这需要我这边的一些定制工作。我想知道 cloudbuild
.
的内置工具是否有更好、更标准化的方法
来源:
您可以通过添加 entrypoint:
参数来更改默认入口点
- name: 'gcr.io/cloud-builders/docker'
entrypoint: 'bash'
args:
- -c
- |
echo $PROJECT_ID
environment=$(cat /workspace/environment.txt)
echo "===== ENV: $environment"
docker build --build-arg ENVIRONMENT=$environment -t gcr.io/${_GCR_PROJECT_ID}/${_SERVICE_NAME}/${COMMIT_SHA} .
我想实现如下构建过程:
- 根据构建分支决定
environment
var 的值 - 通过 diff 构建步骤保留此值
- 使用此变量将其作为
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
的值。
我设法实现这两个目标的方法是使用我自己的自定义预构建映像,其中包含 bash
和 docker
可执行文件。我在容器注册表中有该映像,并将其用作构建步骤映像。但这需要我这边的一些定制工作。我想知道 cloudbuild
.
来源:
您可以通过添加 entrypoint:
参数来更改默认入口点
- name: 'gcr.io/cloud-builders/docker'
entrypoint: 'bash'
args:
- -c
- |
echo $PROJECT_ID
environment=$(cat /workspace/environment.txt)
echo "===== ENV: $environment"
docker build --build-arg ENVIRONMENT=$environment -t gcr.io/${_GCR_PROJECT_ID}/${_SERVICE_NAME}/${COMMIT_SHA} .