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

如何在Bitbucket部署的GCP应用中读取Secret Manager存储的环境变量

问题根因
  • 你当前配置的核心错误是:App Engine Flex 的 test.yaml 配置文件不支持直接通过 $变量名 的格式自动读取GCP Secret Manager的密钥,也不会自动读取Bitbucket流水线的变量,你写的$MONGODB_CONNECTION_URI在部署时会被直接当成普通字符串传递到应用环境,不会被替换为真实值。
  • 额外的认知偏差:GCP Secret Manager的密钥默认不会自动注入到App Engine应用的运行时环境变量中,需要你主动通过两种路径获取:部署时通过流水线注入、或者应用代码主动调用API拉取。
可选解决方案

方案1:通过Bitbucket流水线注入变量(改造成本最低)

这种方案不需要修改应用代码,只需要调整流水线和配置:

  1. 进入Bitbucket仓库的「Repository settings > Deployments」,找到你用的test部署环境,新增变量MONGODB_CONNECTION_URI,填入你的数据库连接串,勾选「Secure」选项隐藏值。
  2. 修改bitbucket-pipelines.yml的部署步骤,在调用部署pipe之前,先替换test.yaml中的占位符为真实值:
branches:
    develop:
      - step:
          name: Deploy
          deployment: test
          script:
            # 新增这行,替换yaml内的变量占位符为Bitbucket中存储的真实值
            - envsubst < test.yaml > test.yaml.out && mv test.yaml.out test.yaml
            - pipe: atlassian/google-app-engine-deploy:1.0.0
              variables:
                  KEY_FILE: $GCP_SECRET
                  PROJECT: 'test-project'
                  DEPLOYABLES: 'test.yaml'
                  PROMOTE: 'false'
                  STOP_PREVIOUS_VERSION: 'false'
  1. 无需修改原有test.yaml的配置,重新运行流水线即可。

方案2:应用运行时直接读取GCP Secret Manager(安全性最高)

这种方案敏感值不会经过Bitbucket流水线,也不会出现在任何配置文件中,安全性更强:

  1. 进入GCP IAM控制台,给App Engine默认服务账号 你的项目ID@appspot.gserviceaccount.com 授予Secret Manager Secret Accessor角色,授权范围限定为MONGODB_CONNECTION_URI密钥即可。
  2. 项目中安装Secret Manager客户端依赖:
npm install @google-cloud/secret-manager
  1. 修改应用的数据库连接代码,启动时主动拉取密钥:
const {SecretManagerServiceClient} = require('@google-cloud/secret-manager');
const client = new SecretManagerServiceClient();

async function getMongoUri() {
  // 本地开发时仍读本地.env变量
  if (process.env.NODE_ENV === 'local') {
    return process.env.MONGODB_CONNECTION_URI;
  }
  // 线上环境从Secret Manager拉取
  const [version] = await client.accessSecretVersion({
    name: 'projects/你的项目ID/secrets/MONGODB_CONNECTION_URI/versions/latest',
  });
  return version.payload.data.toString();
}

// 调用示例
const uri = await getMongoUri();
  1. 删除test.yaml中MONGODB_CONNECTION_URI的相关配置即可。

内容的提问来源于stack exchange,提问作者larsesen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:18:02