使用 Cloud Deploy 将应用部署到 Cloud Run

本页面介绍如何使用 Cloud Deploy 将名为 hello 的示例应用映像交付给两个 Cloud Run 服务或两个 Cloud Run 作业的序列。

在本快速入门中,您将执行以下操作:

  1. 创建 Skaffold 配置

  2. 为两项 Cloud Run 服务或两个作业创建配置文件。

    这些文件定义了服务或作业,并指定了要部署的(预构建)容器映像。

  3. 定义 Cloud Deploy 交付流水线和部署目标(指向这两个服务或这两个作业)。

  4. 通过创建一个自动部署到第一个目标的版本来实例化交付流水线。

  5. 将版本提升到第二个目标。

  6. 在 Google Cloud 控制台中查看这两个发布。

准备工作

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Verify that billing is enabled for your Google Cloud project.

  4. Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  5. Install the Google Cloud CLI.

  6. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  7. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  8. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  9. Verify that billing is enabled for your Google Cloud project.

  10. Enable the Cloud Deploy, Cloud Build, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  11. Install the Google Cloud CLI.

  12. 如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

  13. 如需初始化 gcloud CLI,请运行以下命令:

    gcloud init
  14. 如果您已安装 CLI,请确保您运行的是最新版本:

    gcloud components update
    

  15. 确保默认 Compute Engine 服务账号具有足够的权限。

    服务账号可能已经拥有必要的权限。针对默认服务账号停用自动角色授予的项目包含这些步骤。

    1. 添加 clouddeploy.jobRunner 角色:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/clouddeploy.jobRunner"
      

    2. 向默认执行服务账号授予 actAs 权限,以将工作负载部署到 Cloud Run 中:

      gcloud iam service-accounts add-iam-policy-binding $(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/iam.serviceAccountUser" \
          --project=PROJECT_ID
      

    3. 添加 Cloud Run 开发者权限:

      gcloud projects add-iam-policy-binding PROJECT_ID \
          --member=serviceAccount:$(gcloud projects describe PROJECT_ID \
          --format="value(projectNumber)")-compute@developer.gserviceaccount.com \
          --role="roles/run.developer"
      

      如果您在添加其中任一角色时遇到问题,请与您的项目管理员联系。

    准备 Skaffold 配置

    Cloud Deploy 使用 Skaffold 提供要部署的内容的详细信息,以及如何为您的单独目标正确部署这些内容。

    在本快速入门中,您将创建一个 skaffold.yaml 文件,以标识要用于部署示例应用的 Cloud Run 服务或作业定义。

    1. 打开一个终端窗口。

    2. 创建名为 deploy-run-quickstart 的新目录并导航至该目录。

      mkdir deploy-run-quickstart
      cd deploy-run-quickstart
      
    3. 创建名为 skaffold.yaml 且包含以下内容的文件:

      服务

      apiVersion: skaffold/v4beta7
      kind: Config
      metadata: 
        name: deploy-run-quickstart
      profiles:
      - name: dev
        manifests:
          rawYaml:
          - run-service-dev.yaml
      - name: prod
        manifests:
          rawYaml:
          - run-service-prod.yaml
      deploy:
        cloudrun: {}
      

      作业

      apiVersion: skaffold/v4beta7
      kind: Config
      metadata: 
        name: deploy-run-quickstart
      profiles:
      - name: dev
        manifests:
          rawYaml:
          - run-job-dev.yaml
      - name: prod
        manifests:
          rawYaml:
          - run-job-prod.yaml
      deploy:
        cloudrun: {}
      

      此文件是一个最低限度的 Skaffold 配置,用于标识您的 Cloud Run 服务或作业。如需详细了解此文件,请参阅 skaffold.yaml 参考文档

    准备 Cloud Run 服务或作业

    在此快速入门中,您将在同一项目中创建两个不同的 Cloud Run 服务或两个 Cloud Run 作业。Cloud Deploy 还支持跨多个项目进行部署。此外,我们还使用 Skaffold 配置文件,以便在同一项目中拥有两个服务或作业。如果您使用不同的项目,可能不需要使用 Skaffold 配置文件。

    服务

    1. 创建名为 run-service-dev.yaml 且包含以下内容的文件:

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: deploy-run-service-dev
      spec:
        template:
          spec:
            containers:
            - image: my-app-image
      

      此文件定义了 Cloud Run 服务。顾名思义,deploy-run-service-dev 是您的 dev 服务,对应于交付流水线进展中的第一个目标。

    2. 创建名为 run-service-prod.yaml 且包含以下内容的文件:

      apiVersion: serving.knative.dev/v1
      kind: Service
      metadata:
        name: deploy-run-service-prod
      spec:
        template:
          spec:
            containers:
            - image: my-app-image
      

      此文件定义了另一个 Cloud Run 服务,顾名思义,deploy-run-service-prod 是您的 prod 服务,对应于交付流水线进展中的第二个目标。

    这些文件是简单的 Cloud Run 服务定义,用于部署应用。要部署的容器映像在此处设置为占位符 my-app-image,当您创建发布版本时,该占位符会被替换为具体映像。

    作业

    1. 创建名为 run-job-dev.yaml 且包含以下内容的文件:

      apiVersion: run.googleapis.com/v1
      kind: Job
      metadata:
        name: deploy-run-job-dev
      spec:
        template:
          spec:
            template:
              spec:
                containers:
                - image: my-app-image
      

      此文件定义了 Cloud Run 作业。顾名思义,deploy-run-job-dev 是您的 dev 作业,对应于交付流水线进展中的第一个目标。

    2. 创建名为 run-job-prod.yaml 且包含以下内容的文件:

      apiVersion: run.googleapis.com/v1
      kind: Job
      metadata:
        name: deploy-run-job-prod
      spec:
        template:
          spec:
            template:
              spec:
                containers:
                - image: my-app-image
      

      此文件定义了另一个 Cloud Run 作业。顾名思义,deploy-run-job-prod 是您的 prod 作业,对应于交付流水线进展中的第二个目标。

    这些文件是简单的 Cloud Run 作业定义,用于部署应用。要部署的容器映像在此处设置为占位符 my-app-image,当您创建发布版本时,该占位符会被替换为具体映像。

    创建交付流水线和目标

    您可以在一个文件中或在单独的文件中定义流水线和目标。在本快速入门中,您将创建一个文件。

    1. deploy-run-quickstart 目录中,创建包含以下内容的新文件 clouddeploy.yaml

      apiVersion: deploy.cloud.google.com/v1
      kind: DeliveryPipeline
      metadata:
        name: my-run-demo-app-1
      description: main application pipeline
      serialPipeline:
        stages:
        - targetId: run-qsdev
          profiles: [dev]
        - targetId: run-qsprod
          profiles: [prod]
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: run-qsdev
      description: Cloud Run development service
      run:
        location: projects/PROJECT_ID/locations/us-central1
      ---
      
      apiVersion: deploy.cloud.google.com/v1
      kind: Target
      metadata:
        name: run-qsprod
      description: Cloud Run production service
      run:
        location: projects/PROJECT_ID/locations/us-central1
      
    2. 在 Cloud Deploy 服务中注册流水线和目标:

      gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
      

      现在,您已经有了包含目标的流水线,可以将应用部署到第一个目标了。

    3. 确认您的流水线和目标:

      在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线页面,以查看可用交付流水线的列表。

      打开“交付流水线”页面

      此时将显示您刚刚创建的交付流水线,并且目标列会列出了两个目标。

       Google Cloud 控制台中显示的交付流水线

    创建版本

    版本是表示要部署的更改的中央 Cloud Deploy 资源。交付流水线定义该版本的生命周期。请参阅 Cloud Deploy 服务架构,详细了解该生命周期。

    deploy-run-quickstart 目录运行以下命令,以创建表示要部署的容器映像的 release 资源:

    服务

     gcloud deploy releases create test-release-001 \
       --project=PROJECT_ID \
       --region=us-central1 \
       --delivery-pipeline=my-run-demo-app-1 \
       --images=my-app-image=us-docker.pkg.dev/cloudrun/container/hello@sha256:95ade4b17adcd07623b0a0c68359e344fe54e65d0cb01b989e24c39f2fcd296a
    

    作业

     gcloud deploy releases create test-release-001 \
       --project=PROJECT_ID \
       --region=us-central1 \
       --delivery-pipeline=my-run-demo-app-1 \
       --images=my-app-image=us-docker.pkg.dev/cloudrun/container/job@sha256:8eb3f5e72586de6375abe95aa67511c57c61d35fb37d5670e4d68624a68ef916
    

    请注意 --images= 标志,您可以使用该标志将服务或作业定义中的占位符 (my-app-image) 替换为特定的、经过 SHA 验证的映像。Google 建议您以这种方式将服务和作业定义模板化,并在创建发布版本时使用 SHA 限定的映像名称。

    与所有版本一样(除非它们包含 --disable-initial-rollout),Cloud Deploy 也会自动创建部署资源。应用会自动部署到进展中的第一个目标。

    提升版本

    1. 交付流水线页面中,点击 my-run-demo-app-1 流水线。

      打开“交付流水线”页面

      交付流水线详情页面显示交付流水线进展的图形表示。在本示例中,它显示版本已部署到 run-qsdev 目标。

       Google Cloud 控制台中的交付流水线直观显示

    2. 在交付流水线直观显示中的第一个目标上,点击提升

      此时将显示提升版本对话框。它会显示您要提升到的目标的详细信息。

    3. 点击提升

      该版本现已加入队列以部署到 run-qsprod。部署完成后,交付流水线直观显示会将它显示为已部署:

       Google Cloud 控制台中的交付流水线直观显示,其中显示了已部署到生产环境的版本。

    在 Google Cloud 控制台中查看结果

    1. 在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线页面,以查看您的 my-run-demo-app-1 交付流水线。

      打开“交付流水线”页面

    2. 点击交付流水线的名称“my-run-demo-app-1”。

      流水线直观显示将显示应用在流水线中进展。

       Google Cloud 控制台中的交付流水线直观显示

      您的版本列在版本标签页中交付流水线详细信息下。

    3. 点击版本名称 test-release-001

      您的发布会显示在发布下。您可以点击发布以查看其详细信息,包括部署日志。

       Google Cloud 控制台中的发布

    访问 Cloud Run 服务

    默认情况下,您必须通过身份验证才能访问新创建的 Cloud Run 服务。请参阅 Cloud Run 身份验证概览,了解如何提供凭据,以及需要进行哪些 Identity and Access Management 配置才能在无需身份验证的情况下访问服务。这不适用于 Cloud Run 作业。

    清理

    为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

    1. 删除 deploy-qs-dev Cloud Run 服务或作业:

      服务

      gcloud run services delete deploy-run-service-dev --region=us-central1 --project=PROJECT_ID
      

      作业

      gcloud run jobs delete deploy-run-job-dev --region=us-central1 --project=PROJECT_ID
      
    2. 删除 deploy-qs-prod 服务:

      服务

      gcloud run services delete deploy-run-service-prod --region=us-central1 --project=PROJECT_ID
      

      作业

      gcloud run jobs delete deploy-run-job-prod --region=us-central1 --project=PROJECT_ID
      
    3. 删除交付流水线、目标、版本和发布:

      gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
      
    4. 删除 Cloud Deploy 创建的 Cloud Storage 存储分区。

      一个以 _clouddeploy 结尾,另一个是 [region].deploy-artifacts.[project].appspot.com

      打开“Cloud Storage 浏览器”页面

    恭喜,您已经完成快速入门!

    后续步骤