定义和使用自定义目标类型
本快速入门介绍如何使用 Cloud Deploy 创建自定义目标类型,然后部署到该类型的自定义目标。
在本快速入门中,您将执行以下操作:
定义自定义目标类型,您可以在其中配置目标的行为。此配置引用了容器映像以及要在这些映像上运行的 shell 命令,这些命令是渲染和部署操作的操作。
定义引用自定义目标的目标。
定义 Cloud Deploy 交付流水线。
此流水线仅包含一个阶段,并且仅使用一个目标。在该阶段,您将引用已配置的目标。
创建发布所需的 Skaffold 配置。
创建版本,系统会自动创建发布,从而执行自定义渲染和部署操作。
在此版本和发布过程中,系统会同时运行自定义目标类型配置中定义的渲染和部署操作。
查看自定义操作的结果。这包括上传到 Cloud Storage 的已渲染配置文件、写入该文件的字符串,以及包含操作状态的结果文件。
准备工作
- 登录您的 Google Cloud 账号。如果您是 Google Cloud新手,请 创建一个账号来评估我们的产品在实际场景中的表现。新客户还可获享 $300 赠金,用于运行、测试和部署工作负载。
-
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 role
(
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.-
安装 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 role
(
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.-
安装 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
如果您已安装 Google Cloud CLI,请确保您运行的是最新版本:
gcloud components update
创建交付流水线、自定义目标类型和目标
您可以在一个文件中或在单独的文件中定义交付流水线、自定义目标类型和目标。在本快速入门中,您将创建一个包含所有这三项内容的单个文件。
打开一个终端窗口。
创建一个新目录,并导航至该目录。
mkdir custom-target-quickstart cd custom-target-quickstart在 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 tasks: render: type: 'container' 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 deploy: type: 'container' 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自定义目标类型定义包含
tasksstanza,用于定义渲染任务和部署任务。每个任务都引用要运行的容器映像,以及要在该容器上运行的命令。在 Cloud Deploy 服务中注册流水线和目标:
gcloud deploy apply --file=clouddeploy.yaml --region=us-central1 --project=PROJECT_ID
现在,您已经有了一条交付流水线,其中包含一个目标。这是使用自定义目标类型的目标,并且此流水线不会将应用部署到运行时。
确认您的流水线和目标:
在 Google Cloud 控制台中,导航到 Cloud Deploy 交付流水线页面,以查看可用交付流水线的列表。
此时将显示您刚刚创建的交付流水线,并且目标列会列出了一个目标。

创建 Skaffold 配置文件
本快速入门中的发布需要 Skaffold 配置文件,但该文件不需要有意义的配置。
创建名为
skaffold.yaml且包含以下内容的文件:apiVersion: skaffold/v4beta7 kind: Config
创建版本
版本是表示要部署的更改的中央 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 控制台中,导航到 Cloud Deploy 交付流水线页面,以查看您的交付流水线 (
custom-targets-pipeline)。点击交付流水线的名称 (
custom-targets-pipeline)。流水线可视化显示应用的部署状态。由于流水线中只有一个阶段,因此可视化图表仅显示一个节点。

您的版本列在版本标签页中交付流水线详细信息下。
点击发布版本名称。
系统会显示发布版本详情页面。
点击工件标签页。
在目标制品下,点击查看制品链接。
系统会显示呈现的清单文件。在本例中,该文件是您在自定义目标类型配置中定义的自定义渲染操作的输出,其中包含字符串“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,然后点击经过身份验证的网址字段中的超链接网址。此文件包含您在自定义目标类型定义中配置为
custom-deploy操作输出的字符串:
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
删除交付流水线、目标、发布和发布:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID删除 Cloud Deploy 创建的两个 Cloud Storage 存储分区。
恭喜,您已经完成快速入门!