部署应用后验证应用

本快速入门介绍了如何在交付流水线中使用 Cloud Deploy 验证已部署的应用。

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

  1. 创建一个 GKE 集群或一个 Cloud Run 服务。

    您也可以在 GKE Enterprise 集群上使用部署验证,但本快速入门仅使用 GKE 和 Cloud Run。

  2. 创建 Skaffold 配置以及 Kubernetes 清单或 Cloud Run 服务定义。

    您可以在 Skaffold 配置文件中配置部署验证容器,以便在部署后运行。

  3. 定义 Cloud Deploy 交付流水线和部署目标。

    在交付流水线配置中,您将引用 skaffold.yaml 中定义的部署验证,以运行该验证。

    此流水线仅包含一个阶段,并且仅使用一个目标。

  4. 创建一个自动部署到目标的版本。

    应用部署后,验证会作为发布的阶段运行。

  5. 使用 Google Cloud 控制台中的 Cloud Deploy 发布详情页面,在 Cloud Build 日志中查看验证结果。

准备工作

  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. Make sure that billing is enabled for your Google Cloud project.

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

    Enable the APIs

  5. Install the Google Cloud CLI.
  6. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  8. Make sure that billing is enabled for your Google Cloud project.

  9. Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.

    Enable the APIs

  10. Install the Google Cloud CLI.
  11. To initialize the gcloud CLI, run the following command:

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

    gcloud components update
    

  13. 确保默认 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. 为您的特定运行时添加开发者角色。
      • 对于 GKE:

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

      • 对于 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"
        

    3. 添加 iam.serviceAccountUser 角色,其中包含部署到运行时的 actAs 权限:

      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
      

创建运行时环境

如果您要部署到 Cloud Run,则可以跳过此命令

对于 GKE,使用默认设置创建一个集群:deploy-verification-cluster。集群的 Kubernetes API 端点必须可通过公共互联网访问。默认情况下,GKE 集群可从外部访问。

gcloud container clusters create-auto deploy-verification-cluster \
                 --project=PROJECT_ID \
                 --region=us-central1

准备 Skaffold 配置和应用清单

Cloud Deploy 使用 Skaffold 提供要部署的内容的详细信息,以及如何将其部署到目标

在本快速入门中,您将创建一个 skaffold.yaml 文件,以标识要用于部署示例应用的清单,还标识要部署后运行的容器(部署验证)。

  1. 打开一个终端窗口。

  2. 创建一个新目录,并导航至该目录。

    GKE

    mkdir deploy-verification-gke-quickstart
    cd deploy-verification-gke-quickstart
    

    Cloud Run

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

    GKE

    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - k8s-pod.yaml
    deploy:
      kubectl: {}
    verify:
    - name: verification-test
      container:
        name: verification-echo
        image: ubuntu
        command: ["/bin/sh"]
        args: ["-c", 'echo "Your test or tests would go here."' ]
    

    Cloud Run

    apiVersion: skaffold/v4beta7
    kind: Config
    manifests:
      rawYaml:
      - service.yaml
    deploy:
      cloudrun: {}
    verify:
    - name: verification-test
      container:
        name: verification-echo
        image: ubuntu
        command: ["/bin/sh"]
        args: ["-c", 'echo "Your test or tests would go here."' ]
    

    此文件包含 verify: 诗节,用于定义部署应用后要运行的容器和命令。在本例中,我们将部署一个 Ubuntu 容器并运行一个简单的 echo 命令。您可以在日志中查看此命令的结果。在更现实的场景中,您需要对已部署的应用运行测试。

    如需详细了解此配置文件,请参阅 skaffold.yaml 参考文档

  4. 为您的应用创建定义,即为 Cloud Run 创建服务定义,或为 GKE 创建 Kubernetes 清单。

    GKE

    创建一个名为 k8s-pod.yaml 的文件,其中包含以下内容:

    apiVersion: v1
    kind: Pod
    metadata:
      name: my-verification-pod
    spec:
      containers:
      - name: nginx
        image: my-app-image
    

    此文件是一个基本的 Kubernetes 清单,用于应用到集群以部署应用。要部署的容器映像在此处设置为占位符 my-app-image,在您创建版本时,系统会将其替换为特定映像。

    Cloud Run

    创建一个名为 service.yaml 的文件,其中包含以下内容:

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

    此文件是一个基本的 Cloud Run 服务定义,用于部署应用。此处将要部署的容器映像设置为占位符 my-app-image,在您创建版本时,系统会将其替换为特定映像。

创建交付流水线和目标

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

  1. 创建交付流水线和目标定义:

    GKE

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

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: deploy-verification-demo-app-gke-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: verify-staging
        profiles: []
        strategy:
          standard:
            verify: true
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: verify-staging
    description: verification staging cluster
    gke:
      cluster: projects/PROJECT_ID/locations/us-central1/clusters/deploy-verification-cluster
    

    Cloud Run

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

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: deploy-verification-demo-app-run-1
    description: main application pipeline
    serialPipeline:
      stages:
      - targetId: verify-staging
        profiles: []
        strategy:
          standard:
            verify: true
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: verify-staging
    description: staging Run 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 服务架构

GKE

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

 gcloud deploy releases create test-release-001 \
   --project=PROJECT_ID \
   --region=us-central1 \
   --delivery-pipeline=deploy-verification-demo-app-gke-1 \
   --images=my-app-image=gcr.io/google-containers/nginx@sha256:f49a843c290594dcf4d193535d1f4ba8af7d56cea2cf79d1e9554f077f1e7aaa

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

Cloud Run

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

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

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

与所有版本(除非包含 --disable-initial-rollout)一样,Cloud Deploy 还会自动创建发布资源。应用会自动部署到为此分发流水线配置的目标。

在应用部署后,我们在 Skaffold 配置中指定的验证作业会在此发布过程中运行。

在 Google Cloud 控制台中查看结果

几分钟后,您的版本会部署到目标运行时。

我们配置的验证作业(仅作示例用途)会将字符串输出到 Cloud Build 日志。我们可以查看该日志,确认验证是否按预期运行。

  1. 在 Google Cloud 控制台中,前往 Cloud Deploy 交付流水线页面,查看您的交付流水线(“deploy-verification-demo-app-gke-1”或“deploy-verification-demo-app-run-1”)。

    打开“交付流水线”页面

  2. 点击交付流水线的名称(“deploy-verification-demo-app-gke-1”或“deploy-verification-demo-app-run-1”)。

    流水线直观显示将显示应用的部署状态。由于流水线中只有一个阶段,因此可视化结果中只显示一个节点。

    显示成功的交付流水线直观图

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

  3. 点击“交付流水线详情”下方的发布标签页。

  4. 点击发布名称可查看发布详情。

    Google Cloud 控制台中的发布

    验证列为作业。

  5. 点击验证

    系统会显示作业运行日志。

  6. 在日志条目列表中向下滚动,找到 verification-test,然后点击它。

    显示“Verify”作业输出的日志条目

    请注意 textPayload。该字符串是 Skaffold 配置Verify 诗节中配置的内容。

清理

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

  1. 删除 GKE 集群或 Cloud Run 服务:

    GKE

    gcloud container clusters delete deploy-verification-cluster --region=us-central1 --project=PROJECT_ID
    

    Cloud Run

    gcloud run services delete my-verification-run-service --region=us-central1 --project=PROJECT_ID
    
  2. 删除交付流水线、目标、版本和发布:

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

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

    打开“Cloud Storage 浏览器”页面

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

后续步骤