在 Cloud Build 构建步骤中访问 GCP Secret
Access GCP Secret during Cloud Build build step
假设我有一个 cloudbuild.yaml 文件,如下所示:
steps:
- name: 'gcr.io/cloud-builders/docker'
id: build
args: ['build', '-t', 'us.gcr.io/${PROJECT_ID}/image_name', '--build-arg', 'secret=$$SECRET', '.']
secretEnv: ['SECRET']
images:
- 'us.gcr.io/${PROJECT_ID}/image_name'
availableSecrets:
secretManager:
- versionName: projects/project/secrets/my_secret/versions/latest
env: 'SECRET'
现在,--build-arg 正在为 Docker secret
arg 分配值 $SECRET
而不是实际存储在秘密中的值。在此步骤中如何访问秘密值?我可以在网上找到的所有示例都说要添加一个 bash 入口点,但仅适用于实际上没有进行构建调用的步骤。
将机密分配给 docker args 的语法似乎与普通环境变量的语法略有不同。以下片段摘自我自己的一个工作项目并正确访问了秘密,你可以看到与普通环境变量相比的区别:
...
env:
- PROJECT_ID=$PROJECT_ID
- NO_DEPLOY=$_NO_DEPLOY
- NO_E2E=$_NO_E2E
secretEnv:
- "EXAMPLE_API_KEY"
args:
- --destination=gcr.io/$PROJECT_ID/api
- --cache=true
- --build-arg=PROJECT_ID
- --build-arg=EXAMPLE_API_KEY
- --build-arg=NO_DEPLOY
- --build-arg=NO_E2E
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/example-api-key/versions/latest
env: "EXAMPLE_API_KEY"
...
这是 Cloud Build 和 Secret Manager 集成的常见问题。您只能在脚本中访问秘密,而不是在 entry-point 和参数(您的情况)
中
试试看
steps:
- name: 'gcr.io/cloud-builders/docker'
id: build
entrypoint: 'bash'
args:
- -c
- |
docker build -t us.gcr.io/${PROJECT_ID}/image_name --build-arg secret=$$SECRET .
secretEnv: ['SECRET']
假设我有一个 cloudbuild.yaml 文件,如下所示:
steps:
- name: 'gcr.io/cloud-builders/docker'
id: build
args: ['build', '-t', 'us.gcr.io/${PROJECT_ID}/image_name', '--build-arg', 'secret=$$SECRET', '.']
secretEnv: ['SECRET']
images:
- 'us.gcr.io/${PROJECT_ID}/image_name'
availableSecrets:
secretManager:
- versionName: projects/project/secrets/my_secret/versions/latest
env: 'SECRET'
现在,--build-arg 正在为 Docker secret
arg 分配值 $SECRET
而不是实际存储在秘密中的值。在此步骤中如何访问秘密值?我可以在网上找到的所有示例都说要添加一个 bash 入口点,但仅适用于实际上没有进行构建调用的步骤。
将机密分配给 docker args 的语法似乎与普通环境变量的语法略有不同。以下片段摘自我自己的一个工作项目并正确访问了秘密,你可以看到与普通环境变量相比的区别:
...
env:
- PROJECT_ID=$PROJECT_ID
- NO_DEPLOY=$_NO_DEPLOY
- NO_E2E=$_NO_E2E
secretEnv:
- "EXAMPLE_API_KEY"
args:
- --destination=gcr.io/$PROJECT_ID/api
- --cache=true
- --build-arg=PROJECT_ID
- --build-arg=EXAMPLE_API_KEY
- --build-arg=NO_DEPLOY
- --build-arg=NO_E2E
availableSecrets:
secretManager:
- versionName: projects/$PROJECT_ID/secrets/example-api-key/versions/latest
env: "EXAMPLE_API_KEY"
...
这是 Cloud Build 和 Secret Manager 集成的常见问题。您只能在脚本中访问秘密,而不是在 entry-point 和参数(您的情况)
中试试看
steps:
- name: 'gcr.io/cloud-builders/docker'
id: build
entrypoint: 'bash'
args:
- -c
- |
docker build -t us.gcr.io/${PROJECT_ID}/image_name --build-arg secret=$$SECRET .
secretEnv: ['SECRET']