如何在Python中获取GCloud Build步骤输出及Cloud Run服务URL
问题解答
操作中的错误原因
你使用的$BUILDER_OUTPUT不是Cloud Build的内置替换变量,Cloud Build只认可官方定义的、以$_开头的内置替换(比如$_PROJECT_ID、$_OUTPUT_PATH等),自定义替换变量需要提前在构建配置的substitutions字段中声明,否则会被判定为无效参数,触发invalid_argument错误。
其他获取Cloud Run服务URL的方法
方法1:使用Cloud Run Python客户端直接查询
部署完成后,调用google-cloud-run库的API直接获取服务详情,无需依赖Cloud Build的输出:
from google.cloud import run_v2 client = run_v2.ServicesClient() request = run_v2.GetServiceRequest( name="projects/[PROJECT_ID]/locations/[REGION]/services/[SERVICE_NAME]" ) service = client.get_service(request=request) service_url = service.status.url print(service_url)
方法2:在Cloud Build步骤中直接提取URL
修改Cloud Build的gcloud命令,用--format参数直接提取URL,避免使用无效的替换变量:
gcloud run services describe [SERVICE_NAME] --region [REGION] --format='value(status.url)' > /workspace/service_url.txt
之后在Python代码中读取该文件内容即可。如果是在Vertex Pipeline场景下,可将此文件路径绑定为组件输出参数,传递到后续步骤。
方法3:声明自定义替换变量后使用
如果坚持要使用自定义输出路径,需要在构建配置中提前声明BUILDER_OUTPUT作为自定义替换变量:
from google.cloud import cloudbuild_v1 build = cloudbuild_v1.Build() # 声明自定义替换变量 build.substitutions["BUILDER_OUTPUT"] = "/workspace/output" # 添加构建步骤 build.steps = [ { "name": "gcr.io/google.com/cloudsdktool/cloud-sdk", "args": ["gcloud", "run", "deploy", "[SERVICE_NAME]", "--image", "[IMAGE_URI]", "--region", "[REGION]"] }, { "name": "gcr.io/google.com/cloudsdktool/cloud-sdk", "args": ["bash", "-c", "gcloud run services describe [SERVICE_NAME] --region [REGION] > $BUILDER_OUTPUT/output"] } ]
内容的提问来源于stack exchange,提问作者asmaier
相关产品推荐
相关产品推荐

