You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Cloud Build部署使用Secret Manager密钥的Cloud Functions?

问题根因

你遇到的报错是Cloud Build的参数解析逻辑和本地Shell解析逻辑的差异导致的:

  • 本地执行CLI命令时,Shell会自动剥离--set-secrets参数外层的单引号,最终传递给gcloud的实际参数值是env_1=secret_1:latest,env_2=secret_2:latest,符合格式要求。
  • Cloud Build的args数组会将每个元素直接作为原始参数传递给gcloud,不会做Shell引号解析处理,你配置中的单引号会被当成参数值的一部分,最终传递的参数变成'env_1=secret_1:latest','env_2=secret_2:latest',多余的单引号触发了格式校验错误。
修复方案

两种写法二选一即可,更推荐第一种拆分写法,可读性更高且不容易出错:

方案1:拆分多个--set-secrets参数(推荐)

每个密钥单独对应一条--set-secrets配置,不需要加引号、不需要用逗号分隔:

steps:
- name: 'gcr.io/cloud-builders/gcloud'
  args:
  - beta
  - functions
  - deploy
  - myfunction
  - --source=src
  - --trigger-topic=mytopic
  - --region=europe-west1
  - --runtime=python39
  - --set-secrets=env_1=secret_1:latest
  - --set-secrets=env_2=secret_2:latest

方案2:保留逗号分隔,移除多余引号

如果要保持逗号分隔的写法,直接去掉外层的单引号即可:

# 仅修改最后一行即可
- --set-secrets=env_1=secret_1:latest,env_2=secret_2:latest
额外注意事项

你还需要提前为Cloud Build默认服务账号授予对应密钥的访问权限,否则部署后函数会无法拉取密钥:

  • Cloud Build默认服务账号格式为:[项目编号]@cloudbuild.gserviceaccount.com
  • 需为该账号授予roles/secretmanager.secretAccessor权限,可按单个密钥粒度授权,避免权限过大。

内容的提问来源于stack exchange,提问作者Emil Bonne Kristiansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:36:03