如何在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
相关产品推荐
相关产品推荐

