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

如何在GCP中生成generate_env_file.py?附AWS参考代码

GCP环境下的generate_env_file.py脚本实现

以下是适配GCP Secret Manager的版本,功能与原AWS SSM版本完全对齐:

前置依赖

先安装GCP Secret Manager的Python SDK:

pip install google-cloud-secretmanager

完整脚本代码

import os
from google.cloud import secretmanager

# 初始化Secret Manager客户端
client = secretmanager.SecretManagerServiceClient()

# 获取CI环境变量
ci_ref = os.environ["CI_REF"]
# 获取GCP项目ID(优先读取环境变量GOOGLE_CLOUD_PROJECT,也可手动指定)
project_id = os.environ.get("GOOGLE_CLOUD_PROJECT", "your-gcp-project-id")

# 定义Secret名称映射,对应GCP Secret Manager中的secret命名
secret_paths = {
    "apiUrl": f"infra-dev/{ci_ref}/api_url"
}

secret_values = {}

for key, secret_name in secret_paths.items():
    print(key, secret_name)
    # 构建secret的完整资源路径
    secret_version_name = client.secret_version_path(project_id, secret_name, "latest")
    # 获取并解密secret内容
    response = client.access_secret_version(name=secret_version_name)
    secret_values[key] = response.payload.data.decode("UTF-8")

# 生成额外环境变量
secret_values['apiVersion'] = "/latest" if ci_ref.startswith("dev-") else "/stable"
secret_values['collabVersion'] = "https://XXXX.cloud" if ci_ref == "prod" else f"https://XXX.{ci_ref}.XXX.cloud"

# 替换.env.terraform文件中的占位符
for env_key, env_value in secret_values.items():
    os.system(f"find . -type f -name .env.terraform -exec sed -i 's+<<<{env_key}>>>+{env_value}+g' {} \\;")

# 开发环境追加额外变量
if ci_ref.startswith("dev-"):
    with open(".env.terraform", "a") as f:
        f.write("\nREACT_APP_LATEST_API_VERSION = '/latest'\nREACT_APP_STABLE_API_VERSION = '/stable'\n")

注意事项

  • 认证配置:在GCP环境或CI中运行时,需通过服务账号密钥(环境变量GOOGLE_APPLICATION_CREDENTIALS)或默认应用凭据完成身份认证
  • Secret命名:GCP Secret Manager中的secret名称需与脚本secret_paths定义的格式一致,例如infra-dev/dev-xxx/api_url
  • 权限设置:运行脚本的身份需拥有secretmanager.versions.access权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 10:55:21