我使用标准的gcr.io/k8s-skaffold/pack
build
函数来构建我的应用程序,以便使用谷歌云构建来运行谷歌云。
在我的cloudbuild.yaml
中,我从谷歌机密管理器加载2个机密,并将其传递给构建函数。谷歌云构建可以访问这些秘密,否则我会收到一条错误消息(我在一开始设置构建时遇到了这种错误,现在它似乎可以访问(。
然而,环境变量似乎没有设置好。
我认为这可能是一个语法问题,即我如何尝试传递变量。
这是精简版cloudbuild.yaml
steps:
- name: gcr.io/k8s-skaffold/pack
args:
- build
- '$_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA'
- '--builder=gcr.io/buildpacks/builder:v1'
- '--network=cloudbuild'
- '--path=.'
- '--env=SEC_A=$$SEC_A'
- '--env=SEC_B=$$SEC_B'
secretEnv: ['SEC_A', 'SEC_B']
id: Buildpack
entrypoint: pack
availableSecrets:
secretManager:
- versionName: projects/<pid>/secrets/SEC_A/versions/latest
env: SEC_A
- versionName: projects/<pid>/secrets/SEC_B/versions/latest
env: SEC_B
我侵入构建进行检查的一条错误消息显示,在这个构建步骤中,env-var是空的。
我尝试使用$,$$(如上所述(,&${…},用于替换。但也许问题出在其他地方。
是的,这是一个常见的问题,也是云构建中的一个陷阱。事实上,如果使用args[]数组传递参数,则无法读取机密。你必须使用脚本模式,就像
steps:
- name: gcr.io/k8s-skaffold/pack
entrypoint: bash
args:
- -c
- |
pack build $_GCR_HOSTNAME/$PROJECT_ID/$REPO_NAME/$_SERVICE_NAME:$COMMIT_SHA --builder=gcr.io/buildpacks/builder:v1 --network=cloudbuild --path=. --env=SEC_A=$$SEC_A --env=SEC_B=$$SEC_B
secretEnv: ['SEC_A', 'SEC_B']
id: Buildpack