Cloud Build无法将Secret Manager中的值传递为环境变量,Python脚本无法获取正确值
Cloud Build无法将Secret Manager中的值传递为环境变量,Python脚本无法获取正确值
我看了你的配置,发现几个关键问题导致Secret Manager里的WEBAPP值没正确传递到Python脚本里,咱们一步步来修正:
1. Dockerfile中ARG参数名不匹配
你在Cloud Build步骤里传递的构建参数是WEBAPP=$$WEBAPP,但Dockerfile里写的是ARG GT_WEBAPP——这俩名称完全对不上,Docker根本接收不到WEBAPP的秘密值!
修改你的Dockerfile,把ARG名称改成WEBAPP,确保和Cloud Build传递的参数一致:
FROM python:3.11-slim-buster # 修正ARG名称,和Cloud Build传递的参数对应 ARG WEBAPP ARG GOOGLE_CLOUD_PROJECT # 把ARG的值赋值给环境变量,让Python脚本能读取到 ENV GOOGLE_CLOUD_PROJECT=$GOOGLE_CLOUD_PROJECT ENV WEBAPP=$WEBAPP WORKDIR /app RUN python -m pip install --upgrade pip --no-cache-dir COPY requirements.txt /app/ RUN pip install --no-cache-dir -r requirements.txt COPY main.py /app/ # 非root用户运行(安全建议) RUN useradd -m image_user USER image_user CMD ["python", "main.py"]
2. 修正Cloud Build中的变量名笔误
你的substitutions里写了_DATABASE_PORT,但值是镜像仓库地址,而后面步骤用的是${FORECASTS_IMAGE}——这明显是变量名写错了,会导致镜像标签替换失败。把变量名改成_FORECASTS_IMAGE:
substitutions: _FORECASTS_IMAGE: 'us-central1-docker.pkg.dev/${PROJECT_ID}/forecasts-repo/get-forecasts'
这样Cloud Build就能正确识别${FORECASTS_IMAGE}这个变量了。
3. 验证Python脚本的环境变量读取
你的Python代码用os.getenv的方式是对的,不过可以加个调试打印,方便确认值是否正确获取:
import os PROJECT_ID = os.getenv('GOOGLE_CLOUD_PROJECT') web_url = os.getenv('WEBAPP') # 调试打印,确认值是否正确 print(f"获取到的PROJECT_ID: {PROJECT_ID}") print(f"获取到的WEBAPP地址: {web_url}")
最后,确认Cloud Build的Secret配置
你已经开启了dynamicSubstitutions: true,并且正确配置了secretEnv和Secret Manager版本,这部分没问题——只要上面的参数名匹配、变量名修正,秘密值就能正确传递到Docker构建过程,最终被Python脚本读取到。
修改完这些后,重新触发Cloud Build构建,你的Python脚本应该就能拿到正确的WEBAPP和GOOGLE_CLOUD_PROJECT值了。
备注:内容来源于stack exchange,提问作者Estaar
相关产品推荐
相关产品推荐

