在Google Cloud Platform中,在多阶段的CloudBuild过程中,可以使用共享的/workspace
从一个构建步骤到下一个构建步骤访问内容。
例如,以下cloudbuild.yaml将打印“ hello world”,从第一步开始就可以访问文本hello。
steps:
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args: [ '-c', " echo world > sample.txt" ]
- name: gcr.io/cloud-builders/gcloud
entrypoint: 'bash'
args: [ '-c', "echo hello $( < sample.txt)" ]
但是,当涉及到在docker构建步骤中访问此内容时,此方法似乎不起作用。在docker build步骤中似乎没有一种访问文件的方法。
以下步骤作为上述步骤之后的第三步执行时,将执行Dockerfile,但似乎没有使sample.txt文件可用于其中的命令。
# Build the container image
- name: gcr.io/cloud-builders/docker
args: ['build',
'-t', 'repositoryname:latest',
'.']
我尝试了以下操作:
cloudbuild中是否可以通过一系列步骤(包括docker步骤)逐步构建内容?如果是这样,怎么办?
实际上,这些文件确实保留在工作区环境中。我的问题是无法按以下方式在build命令中使用文件的内容。
# Build the container image
- name: gcr.io/cloud-builders/docker
args: ['build',
'--build-arg', 'GITHUB_AUTH_TOKEN=$( < sample.txt)',
'-t', '$_REPO_PATH/$_PROJECT_ID/$_REPO_NAME:$_TAG_NAME',
'.']
在第一步中,我实际上是使用gcloud从机密管理器中获取机密,然后我想将此作为参数传递给docker构建过程。 我无法使上述构建步骤正常工作,然后读取命令替换对docker参数无效吗?
答案 0 :(得分:1)
问题来自args
解释。这样写,没有任何arg评估。像这样使用脚本模式
# Build the container image
- name: gcr.io/cloud-builders/docker
entrypoint: "bash"
args:
- "-c"
- |
docker build --build-arg GITHUB_AUTH_TOKEN=$( < sample.txt) -t $_REPO_PATH/$_PROJECT_ID/$_REPO_NAME:$_TAG_NAME .