3

我习惯于在 Cloud Run 上使用 CI / CD 架构进行部署。每次进行部署时,我都必须手动检索通过电子邮件发送给员工的 URL。我的目标是使用 Google Workflow 自动执行此任务。如何使用 Google Workflow 检索新服务的 URL 或 Cloud Run 服务的标签?

4

3 回答 3

3

放在一起返回云运行服务的 URL

- initialize:
    assign:
      - project: ${sys.get_env("GOOGLE_CLOUD_PROJECT_NUMBER")}
      - zone: us-central1
      - service: service
- getCloudRunDetails:
    call: http.get
    args:
        url: ${"https://"+zone+"-run.googleapis.com/apis/serving.knative.dev/v1/namespaces/"+project+"/services/"+service+"?alt=json"}
        auth:
            type: OAuth2
    result: bitresult
- returnResult:
    return: ${bitresult.body.status.address.url}

预期的输出是:

argument: 'null'
endTime: '2020-11-19T23:05:18.232772542Z'
name: projects/<edited>describeCloudRun/executions/<edited>   
result: '"https://<edited>uc.a.run.app"'
startTime: '2020-11-19T23:05:17.769640039Z'
state: SUCCEEDED
workflowRevisionId: 000020-b11

您在result密钥中拥有自己的价值。

于 2020-11-19T23:07:55.117 回答
1

这可以使用gcloudCLI 轻松完成,但目前 Cloud Workflows 步骤不支持该操作。目前,您唯一的选择是使用Get Service REST API 端点。

这是一个例子:

TOKEN="$(gcloud auth print-access-token -q)"
curl -H "Authorization: Bearer $TOKEN" \
  https://us-central1-run.googleapis.com/apis/serving.knative.dev/v1/namespaces/PROJECT_ID/services/SERVICE_NAME?alt=json

在上面的示例中, noteus-central1是区域并用您的区域替换PROJECT_IDSERVICE_NAME

响应将包含一个 JSON 文档,其中status.address.url将包含https://[...].run.app您的 Cloud Run 服务的 URL。

专业提示:要找出gcloud命令执行的 REST API 调用(例如gcloud run services describe)添加--log-http选项。

于 2020-11-19T18:04:14.057 回答
1

Google 现在提供内置的工作流连接器,包括一个用于 Cloud Run 服务的连接器。

根据服务名称获取 Cloud Run URL 可以如下完成:

main:
    steps:
        - initialize:
              assign:
                  - project_number: ${sys.get_env("GOOGLE_CLOUD_PROJECT_NUMBER")}
                  - cloud_run_location: europe-west2
                  - cloud_run_service_name: my-service-name
        - get_cloud_run_details:
            call: googleapis.run.v1.namespaces.services.get 
            args:
                name: ${"namespaces/" + project_number + "/services/" + cloud_run_service_name}
                location: ${cloud_run_location}
            result: service_obj
        - assign_vars:
              assign:
                  - service_url: ${service_obj.status.address.url}
于 2022-01-07T12:44:51.003 回答