定义和使用自定义目标类型
本快速入门介绍了如何使用 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.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the Cloud Deploy, Cloud Build, GKE, Cloud Run, and Cloud Storage APIs.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
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
准备 Skaffold 配置和应用清单
Cloud Deploy 使用 Skaffold 提供要部署的内容的详细信息,以及如何将其部署到目标。
在本快速入门中,您将创建一个 skaffold.yaml
文件,用来定义
表示自定义操作的渲染和部署
定位类型。
请注意,本快速入门中提供的自定义操作 任何应用。呈现和部署操作都会将结果文件上传到 Cloud Storage,以便实现 Cloud Deploy 与用户定义的呈现和部署之间的自定义目标协定。
打开一个终端窗口。
创建一个新目录,并导航至该目录。
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: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
参考文档。
创建交付流水线、自定义目标类型和目标
你可以在一个集中定义交付流水线、自定义目标类型和目标 还是在单独的文件中在本快速入门中,您将创建一个包含这三者的文件。
在 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 交付流水线页面,查看可用交付流水线的列表。
此时将显示您刚刚创建的交付流水线,并且目标列会列出了一个目标。
创建版本
版本是代表 正在部署的更改交付流水线定义该版本的生命周期。请参阅 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 不会将任何内容部署到任何目标运行时中。
不过,您可以查看该文件及其中的字符串:
在 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
操作输出的字符串:
清理
为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。
删除交付流水线、目标、发布和发布:
gcloud deploy delete --file=clouddeploy.yaml --force --region=us-central1 --project=PROJECT_ID
删除 Cloud Deploy 创建的两个 Cloud Storage 存储桶。
恭喜,您已经完成快速入门!