如何在Bitbucket Pipelines中访问Google Secret Manager存储的环境变量
可以实现,不需要把Google Secret Manager里的密钥硬编码到Bitbucket仓库配置中,通过GCP服务账号做鉴权就能在Pipeline运行时拉取所需密钥,具体操作步骤如下:
前置配置
- 在GCP控制台新建独立服务账号,只给这个账号分配Secret Manager Secret Accessor角色,权限范围精确绑定到测试用例要用到的具体密钥上,别给整个项目的宽泛权限,出问题影响面太大。
- 给这个服务账号生成JSON格式的身份密钥,把完整JSON内容存成Bitbucket工作区/仓库的加密变量,变量名可以设为
GCP_SA_KEY,记得打开变量的「保密」开关,防止值被打印到Pipeline日志里泄露。 - 顺便把你的GCP项目ID也存成Bitbucket加密变量,变量名设为
GCP_PROJECT_ID,后面配置直接复用,不用硬写在pipeline文件里。
Pipeline配置逻辑
不用改你原有测试用例的核心代码,只要在测试执行步骤前加鉴权和密钥拉取的逻辑就行,示例配置片段:
pipelines: default: - step: name: 执行测试用例 image: google/cloud-sdk:latest # 直接用预装了gcloud SDK的官方镜像,省掉自己装SDK的步骤 script: # 把服务账号密钥写到临时文件 - echo "$GCP_SA_KEY" > /tmp/sa-key.json # 激活服务账号身份 - gcloud auth activate-service-account --key-file=/tmp/sa-key.json - gcloud config set project "$GCP_PROJECT_ID" # 按需拉取测试依赖的所有密钥,注入为当前步骤的环境变量 - export TEST_API_KEY=$(gcloud secrets versions access latest --secret="test-api-key") - export TEST_DB_PASSWORD=$(gcloud secrets versions access latest --secret="test-db-password") # 用完立刻删掉临时密钥文件,避免残留 - rm -f /tmp/sa-key.json # 执行你原来的测试命令就行,测试进程能直接读到上面注入的环境变量 - pytest # 替换成你实际用的测试执行命令,比如npm test、go test之类的
可选优化
- 如果你不想用gcloud CLI拉密钥,也可以在测试代码里直接引入对应语言的Google Secret Manager SDK,用同一个服务账号初始化客户端,代码运行时直接拉密钥,鉴权逻辑和命令行方案完全一致。
- 要是怕密钥更新影响测试稳定性,可以把命令里的
latest换成固定的密钥版本号,每次测试用的密钥版本就不会变。 - 可以加个简单的判断逻辑,要是密钥拉取失败直接终止Pipeline,不用等测试跑半天报密钥不存在的错,省时间。
安全提醒:绝对不要把服务账号的JSON密钥提交到代码仓库,所有敏感信息都存在Bitbucket的加密变量里;服务账号只给必要的最小权限,别乱绑Editor、Owner这类高权限角色。
内容的提问来源于stack exchange,提问作者ronak patel
相关产品推荐
相关产品推荐

