如何获取或生成 Google Cloud Run 服务的部署 URL

fus*_*ngs 13 google-cloud-run

如何在 CI 环境中以编程方式获取已部署服务的 URL?成功部署后会记录 URL,但是如果我想以编程方式提取和使用 URL,作为部署后需求的一部分,例如发布 URL 以进行验收测试,该怎么办。

Ste*_*ren 13

只需使用标志:--format='value(status.url)'gcloud run services describe

这是整个命令:

$ gcloud run services describe SERVICE --platform managed --region REGION --format 'value(status.url)'
Run Code Online (Sandbox Code Playgroud)


Dan*_*ndo 7

有几种方法可以获得所需的信息:

  1. 您可以使用Cloud Run API 中的namespaces.services.get方法和curl 命令。请注意,它将需要一个身份验证标头和一个 OAuth 范围。
curl -i https://[REGION]-run.googleapis.com/apis/serving.knative.dev/v1/namespaces/[PROJECT_NAME]/services/[CLOUD_RUN_SERVICE_NAME] -H "Authorization: Bearer [YOUR-BEARER-TOKEN]" | tail -n +13 | jq -r ".status.url"
Run Code Online (Sandbox Code Playgroud)
  1. 您可以在构建步骤之一中使用gcloud run services list命令来获取所需的值。例如,如果您的服务是完全托管的,您可以使用以下命令来获取上次更新的 Cloud Run 服务:
gcloud run services list --platform managed | awk 'NR==2 {print $4}'
Run Code Online (Sandbox Code Playgroud)
  1. 使用 Goolge API 客户端库(例如Cloud Run Google API Client for Python )构建脚本。


qew*_*jhb 5

扩展斯特伦的回答

使用这些 Bash 命令,您可以获取 url 并将其保存在 Secrets Manager 中:

首先创建空的 Secret:

gcloud secrets create "CLOUDRUN_URL" --project $PROJECT_ID --replication-policy=automatic
Run Code Online (Sandbox Code Playgroud)

然后:

gcloud run services describe $APP_NAME --platform managed --region $CLOUD_REGION --format 'value(status.url)' --project $PROJECT_ID | gcloud secrets versions add "CLOUDRUN_URL" --data-file=- --project $PROJECT_ID
Run Code Online (Sandbox Code Playgroud)

或添加了“/some/address”的版本

CLOUDRUN_URL=$(gcloud run services describe $APP_NAME --platform managed --region $CLOUD_REGION --format 'value(status.url)' --project $PROJECT_ID)   # capture first string.
echo "$CLOUDRUN_URL/some/address/" | gcloud secrets versions add "CLOUDRUN_URL" --data-file=- --project $PROJECT_ID
Run Code Online (Sandbox Code Playgroud)

然后您可以根据需要从 Secrets Manager 加载它:

export CLOUDRUN_URL=$(gcloud secrets versions access latest --secret="CLOUDRUN_URL" --project $PROJECT_ID )

Run Code Online (Sandbox Code Playgroud)