定义和使用自定义目标类型
本快速入门介绍如何使用 Cloud Deploy 创建自定义目标类型,然后部署到该类型的自定义目标。
在本快速入门中,您将执行以下操作:
- 创建 Skaffold 配置。 - 您可以在 Skaffold 配置文件中配置目标的行为。此配置引用了容器映像以及要在这些映像上运行的 shell 命令,这些命令是渲染和部署操作的操作。 
- 定义自定义目标类型,以及引用该类型的目标。 
- 定义 Cloud Deploy 交付流水线。 - 此流水线仅包含一个阶段,并且仅使用一个目标。在该阶段,您将引用已配置的目标。 
- 创建版本,系统会自动创建发布,从而执行自定义渲染和部署操作。 - 在此版本和发布过程中,系统会同时运行 Skaffold 配置中定义的渲染和部署操作。 
- 查看自定义操作的结果。这包括上传到 Cloud Storage 的已渲染配置文件、写入该文件的字符串,以及包含操作状态的结果文件。 
准备工作
- 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.
- 
    
    
      
        In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 
      Install the Google Cloud CLI. 
- 
          如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 
- 
        如需初始化 gcloud CLI,请运行以下命令: gcloud init
- 
    
    
      
        In the Google Cloud console, on the project selector page, select or create a Google Cloud project. Roles required to select or create a project - Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
- 
      Create a project: To create a project, you need the Project Creator
      (roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
 
- 
  
    Verify that billing is enabled for your Google Cloud project. 
- 
  
  
    
      Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs. Roles required to enable APIs To enable APIs, you need the Service Usage Admin IAM role ( roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles.
- 
      Install the Google Cloud CLI. 
- 
          如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI。 
- 
        如需初始化 gcloud CLI,请运行以下命令: gcloud init
- 确保默认 Compute Engine 服务账号具有足够的权限。服务账号可能已经拥有必要的权限。针对默认服务账号停用自动角色授予的项目包含这些步骤。 
- 首先,添加 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"
- 为您的特定运行时添加开发者角色。
- 
添加 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
- 打开一个终端窗口。 
- 创建一个新目录,并导航至该目录。 - mkdir custom-target-quickstart cd custom-target-quickstart
- 创建名为 - skaffold.yaml且包含以下内容的文件:- apiVersion: skaffold/v4beta7 kind: Config customActions: - name: custom-render containers: - name: render image: gcr.io/google.com/cloudsdktool/google-cloud-cli@sha256:484e8266c1cfc84b283bc6d4eec1f6b61223115178cce76fb59f77b223f26e8e 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:484e8266c1cfc84b283bc6d4eec1f6b61223115178cce76fb59f77b223f26e8e command: ['/bin/bash'] args: - '-c' - |- echo {\"resultStatus\": \"SUCCEEDED\"} > results.json gcloud storage cp results.json $CLOUD_DEPLOY_OUTPUT_GCS_PATH/results.json- 此文件包含 - customActions:stanza,用于定义自定义渲染操作和自定义部署操作。每个自定义操作都引用要运行的容器映像,以及要在该容器上运行的命令。- 如需详细了解此配置文件,请参阅 - skaffold.yaml参考文档。
- 在 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
- 在 Cloud Deploy 服务中注册流水线和目标: - gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID - 现在,您已经有了一条交付流水线,其中包含一个目标。这是使用自定义目标类型的目标,并且此流水线不会将应用部署到运行时。 
- 确认您的流水线和目标: - 在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线页面,以查看可用交付流水线的列表。 - 此时将显示您刚刚创建的交付流水线,并且目标列会列出了一个目标。  
- 在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线页面,以查看您的交付流水线 ( - custom-targets-pipeline)。
- 点击交付流水线的名称 ( - custom-targets-pipeline)。- 流水线直观显示将显示应用的部署状态。由于流水线中只有一个阶段,因此可视化图表仅显示一个节点。  - 您的版本列在版本标签页中交付流水线详细信息下。 
- 点击发布版本名称。 - 系统会显示发布版本详情页面。 
- 点击工件标签页。 
- 在目标制品下,点击查看制品链接。 - 系统会显示呈现的清单文件。在本例中,该文件是您在 - skaffold.yaml配置文件中定义的自定义渲染操作的输出,其中包含字符串“Sample manifest rendered content”。 
- 查找此版本创建的 Cloud Storage 存储分区。 - 系统会显示存储分区页面,其中显示了为此版本创建的两个存储分区。一个存储桶包含交付流水线配置文件和渲染的 - skaffold.yaml。另一个包含自定义操作配置为创建的输出文件。
- 点击名称以 - us-central1.deploy-artifacts开头的存储桶... 
- 点击名称以 - custom-targets-pipeline-开头的文件夹,然后点击- test-release-001文件夹。
- 点击名称为您的发布名称的文件夹,该名称应为 - test-release-001-to-sample-env-0001。
- 点击显示的文件夹(这是一个 UUID),然后点击 - custom-output文件夹。
- 点击 - results.json,然后点击经过身份验证的网址字段中的超链接网址。- 此文件包含您在 - skaffold.yaml中配置为- custom-deploy操作输出的字符串: 
- 删除交付流水线、目标、版本和发布: - gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
- 删除 Cloud Deploy 创建的两个 Cloud Storage 存储分区。 
如果您已安装 Google Cloud CLI,请确保您运行的是最新版本:
gcloud components update
准备 Skaffold 配置
Cloud Deploy 使用 Skaffold 提供要部署的内容的详细信息,以及如何将这些内容部署到您的目标。
在本快速入门中,您将创建一个 skaffold.yaml 文件,用于定义表示自定义目标类型渲染和部署操作的自定义操作。
请注意,本快速入门中提供的自定义操作实际上不会将任何应用部署到运行时。渲染操作和部署操作都会将结果文件上传到 Cloud Storage,以履行 Cloud Deploy 与用户定义的渲染和部署之间的自定义目标合同。
创建交付流水线、自定义目标类型和目标
您可以在一个文件中或在单独的文件中定义交付流水线、自定义目标类型和目标。在本快速入门中,您将创建一个包含所有这三项内容的单个文件。
创建版本
版本是表示要部署的更改的中央 Cloud Deploy 资源。交付流水线定义该版本的生命周期。请参阅 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 控制台中查看结果
几分钟后,部署即会完成。在这种情况下,由于这两个自定义操作是将字符串回显到文件中并将文件上传到 Cloud Storage 的命令,因此不会将任何内容部署到任何目标运行时。
不过,您可以查看该文件及其中的字符串:
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
恭喜,您已经完成快速入门!