定义和使用自定义目标类型

本快速入门介绍了如何使用 Cloud Deploy 创建自定义目标类型,然后部署到该类型的自定义目标。

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

  1. 创建 Skaffold 配置。

    您可以在 Skaffold 配置文件中配置 目标。此配置会引用容器映像以及要在这些映像上运行的 Shell 命令,这些命令是渲染和部署操作的操作。

  2. 定义自定义目标类型,以及引用该类型的目标。

  3. 定义 Cloud Deploy 交付流水线。

    此流水线仅包含一个阶段,且只使用一个目标。在此阶段,您将引用您配置的目标。

  4. 创建一个版本,该版本会自动创建发布,从而生成 正在执行的自定义渲染和部署操作。

    在此版本发布和部署过程中,系统会运行 Skaffold 配置中定义的渲染和部署操作。

  5. 查看自定义操作的结果。这包括 上传到 Cloud Storage 的配置文件,以及写入该文件的字符串 文件,以及包含操作状态的结果文件。

准备工作

  1. 登录您的 Google Cloud 账号。如果您是 Google Cloud 新手,请创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. 确保您的 Google Cloud 项目已启用结算功能

  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. 确保您的 Google Cloud 项目已启用结算功能

  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. 如果您已安装 Google Cloud 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. 为特定运行时添加开发者角色。
    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
      

准备 Skaffold 配置和应用清单

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

在本快速入门中,您将创建一个 skaffold.yaml 文件,用来定义 表示自定义操作的渲染和部署 定位类型。

请注意,本快速入门中提供的自定义操作 任何应用。呈现和部署操作都会将结果文件上传到 Cloud Storage,以便实现 Cloud Deploy 与用户定义的呈现和部署之间的自定义目标协定。

  1. 打开一个终端窗口。

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

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

    apiVersion: skaffold/v4beta7
    kind: Config
    customActions:
    - name: custom-render
      containers:
      - name: render
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018
        command: ['/bin/bash']
        args:
          - '-c'
          - |-
            echo "Sample manifest rendered content" > manifest.txt
            gcloud storage cp manifest.txt $CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt
            echo {\"resultStatus\": \"SUCCEEDED\", \"manifestFile\": \"$CLOUD_DEPLOY_OUTPUT_GCS_PATH/manifest.txt\"} > results.json
            gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
    - name: custom-deploy
      containers:
      - name: deploy
        image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:66e2681aa3099b4e517e4cdcdefff8f2aa45d305007124ccdc09686f6712d018
        command: ['/bin/bash']
        args:
          - '-c'
          - |-
            echo {\"resultStatus\": \"SUCCEEDED\"} > results.json
            gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json
    

    此文件包含 customActions: 节,用于定义自定义渲染 和自定义部署操作每项自定义操作都会引用要运行的容器映像以及要在该容器上运行的命令。

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

创建交付流水线、自定义目标类型和目标

你可以在一个集中定义交付流水线、自定义目标类型和目标 还是在单独的文件中在本快速入门中,您将创建一个包含这三者的文件。

  1. 在 custom-target-quickstart 目录中,创建一个名为 clouddeploy.yaml 的新文件,并在其中添加以下内容:

    apiVersion: deploy.cloud.google.com/v1
    kind: DeliveryPipeline
    metadata:
      name: custom-targets-pipeline
    serialPipeline:
      stages:
      - targetId: sample-env
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: Target
    metadata:
      name: sample-env
    customTarget:
      customTargetType: basic-custom-target
    ---
    
    apiVersion: deploy.cloud.google.com/v1
    kind: CustomTargetType
    metadata:
      name: basic-custom-target
    customActions:
      renderAction: custom-render
      deployAction: custom-deploy
    
  2. 在 Cloud Deploy 服务中注册流水线和目标:

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

    现在,您已拥有一个只有一个目标的交付流水线。这是使用自定义目标类型的目标,此流水线不会将应用部署到运行时。

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

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

    打开“交付流水线”页面

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

    Google Cloud 控制台中的交付流水线页面,其中显示了您的流水线

创建版本

版本是代表 正在部署的更改交付流水线定义该版本的生命周期。请参阅 Cloud Deploy 服务架构 了解有关该生命周期的详细信息。

custom-target-quickstart 目录运行以下命令,以 创建表示要部署的自定义操作的 release 资源:

gcloud deploy releases create test-release-001 \
  --project=PROJECT_ID \
  --region=us-central1 \
  --delivery-pipeline=custom-targets-pipeline

与所有版本(除非包含 --disable-initial-rollout)一样,Cloud Deploy 还会自动创建发布资源。系统会执行该发布的所有阶段,包括呈现和部署。

在 Google Cloud 控制台中查看结果

几分钟后,您的部署就会完成。在本示例中,由于两个 自定义操作是一些命令,用于 echo 到文件中并将文件上传到 Cloud Storage 不会将任何内容部署到任何目标运行时中。

不过,您可以查看该文件及其中的字符串:

  1. 在 Google Cloud 控制台中,前往 Cloud Deploy 交付流水线页面,查看您的交付流水线 (custom-targets-pipeline)。

    打开“交付流水线”页面

  2. 点击交付流水线的名称 (custom-targets-pipeline)。

    流水线可视化图表会显示应用的部署状态。因为有 流水线中只有一个阶段,则可视化图表仅显示一个节点。

    交付流水线可视化图表显示成功

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

  3. 点击相应版本名称。

    随即会显示发布版本详情页面。

  4. 点击工件标签页。

  5. 目标制品下,点击查看制品链接。

    系统会显示呈现的清单文件。在本例中,该文件是您在 skaffold.yaml 配置文件中定义的自定义渲染操作的输出,其中包含字符串“Sample manifest rendered content”。

    自定义呈现操作的输出

  6. 查找此版本创建的 Cloud Storage 存储分区。

    打开“Cloud Storage 浏览器”页面

    系统随即会显示存储桶页面,其中显示了为此版本创建的两个存储桶。一个存储桶包含交付流水线配置文件和渲染的 skaffold.yaml。另一个包含我们的自定义操作配置为创建的输出文件。

  7. 点击名称以 us-central1.deploy-artifacts 开头的存储桶...

    Cloud Storage 存储分区列表

  8. 点击名称以 custom-targets-pipeline- 开头的文件夹,然后 点击 test-release-001 文件夹。

  9. 点击发布作业名称(应为 test-release-001-to-sample-env-0001

  10. 点击显示的文件夹(即 UUID),然后点击 custom-output 文件夹中。

  11. 点击 results.json,然后点击已验证身份 网址字段。

    此文件包含您在 skaffold.yaml 中配置为 custom-deploy 操作输出的字符串:

    部署自定义操作的输出

清理

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

  1. 删除交付流水线、目标、发布和发布:

    gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
    
  2. 删除 Cloud Deploy 创建的两个 Cloud Storage 存储桶。

    打开“Cloud Storage 浏览器”页面

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

后续步骤