本文档介绍了如何创建自定义 Cloud Deploy 目标类型,以及如何在 Cloud Deploy 交付流水线中将该自定义目标类型用作目标。
以下是创建自定义目标类型并在交付流水线中使用它的概要流程:
在
skaffold.yaml
中定义自定义操作,引用该容器并指定要在其上运行的命令。创建引用上一步中自定义操作的
CustomTargetType
定义,并将其注册为 Cloud Deploy 资源。使用用于标识新自定义目标类型的
customTarget
属性定义新目标。创建版本。
本文档的其余部分将详细介绍这些步骤。
创建容器化应用
要部署到自定义目标的功能在容器化应用中定义,您可以通过从 skaffold.yaml
文件引用它们将这些功能提供给 Cloud Deploy。当您的提交流水线包含使用自定义目标类型的目标时,Cloud Deploy 会在 Skaffold 中调用为该自定义目标类型定义的自定义操作容器,以执行您定义的渲染和部署操作。
应用的行为由您自己决定。不过,它必须使用 Cloud Deploy 提供的输入环境变量,并且必须返回所需的输出。
在大多数情况下,您将为您创建的每种自定义目标类型分别创建一个容器,一个用于呈现操作,另一个用于部署操作。渲染操作是可选的,但如果您未提供渲染操作,Cloud Deploy 将使用默认的 skaffold render
。
在 Skaffold 中定义自定义操作
自定义操作容器映像就绪后,您可以从 skaffold.yaml
配置文件中引用它们。
您可以在 customActions
诗节中为自定义目标配置每个自定义操作。对于任何自定义目标类型,您都可以在 Skaffold 中创建一个用于渲染的自定义操作,以及一个用于部署的自定义操作。CustomTargetType
定义用于确定哪个自定义操作用于渲染,哪个自定义操作用于部署。
以下是 skaffold.yaml
中自定义渲染和部署操作的配置:
apiVersion: skaffold/v4beta7
kind: Config
customActions:
# custom render action
- name:
containers:
- name:
image:
command:
args:
# custom deploy action
- name:
containers:
- name:
image:
command:
args:
在此 Skaffold 配置中:
customActions.name
是自定义呈现或部署操作的任意名称。
CustomTargetType
定义会在renderAction
属性或deployAction
属性中引用此名称。containers
诗节包含您的引用,以及用于运行该容器的命令。containers
诗节允许使用多个容器,但 Google 建议您只使用一个容器。customActions.containers.name
您要用于此操作的特定容器的任意名称。 最佳实践是,此容器名称应始终带有 SHA 限定符。
image
是容器映像的路径。
command
是在容器上运行的命令。
args
是
command
的参数集合。
如需详细了解 customActions
中使用的配置属性,请参阅 Skaffold YAML 参考文档。
定义自定义目标类型
您可以先使用 CustomTargetType
配置创建自定义目标类型,然后再定义自定义目标。您可以在与交付流水线定义相同的文件中创建 CustomTargetType
,也可以在目标定义中创建 CustomTargetType
,或者在单独的文件中创建 CustomTargetType
。
CustomTargetType
定义如下:
# Custom target type config (preview)
apiVersion: deploy.cloud.google.com/v1
kind: CustomTargetType
metadata:
name: [CUSTOM_TARGET_TYPE_NAME]
annotations:
labels:
description:
customActions:
renderAction: [RENDER_ACTION_NAME]
deployAction: [DEPLOY_ACTION_NAME]
includeSkaffoldModules:
地点
CUSTOM_TARGET_TYPE_NAME
是您为此自定义目标类型定义指定的任意名称。系统会在使用您定义的自定义目标类型的任何目标的目标定义中引用此名称。
RENDER_ACTION_NAME
是自定义呈现操作的名称。此值是
skaffold.yaml
中为呈现操作定义的customAction.name
。DEPLOY_ACTION_NAME
是自定义部署操作的名称。此值是
skaffold.yaml
中为deploy操作定义的customAction.name
。includeSkaffoldModules
如果您使用的是远程 Skaffold 配置,则可使用此可选诗节。此诗节中的属性显示在使用远程 Skaffold 配置部分中。
使用远程 Skaffold 配置
您可以将 Skaffold 配置存储在公共 Git 代码库、Cloud Storage 存储桶或 Cloud Build 第 2 代代码库中,并从自定义目标类型定义中引用这些配置。
使用远程 Skaffold 配置意味着您在发布时提供的 skaffold.yaml
不需要定义自定义操作。这样,您就可以在整个组织内共享自定义操作。
如需使用远程 Skaffold 配置,请执行以下操作:
使用自定义操作或操作创建 Skaffold 配置。
将配置存储在 Git 代码库或 Cloud Storage 存储桶中。
在自定义目标类型定义中,添加
customActions.includeSkaffoldModules
诗节。在
includeSkaffoldModules
下,指定以下内容:可选:一个或多个
configs
元素:- configs: ["name1", "name2"]
configs
的值是一个字符串列表,与要包含的每个 Skaffold 配置的metadata.name
属性匹配。如果省略此参数,Cloud Deploy 会获取指定路径中的所有配置。googleCloudStorage
、git
或googleCloudBuildRepo
诗节。对于 Cloud Storage:
googleCloudStorage: source: PATH_TO_GCS_BUCKET path: FILENAME
对于 Git:
git: repo: REPO_URL path: PATH_TO_FILE ref: BRANCH_NAME
对于 Cloud Build 代码库(第 2 代):
googleCloudBuildRepo: repository: PATH_TO_GCB_REPO path: PATH_TO_FILE ref: BRANCH_NAME
其中:
PATH_TO_GCS_BUCKET
是 Cloud Storage 目录的路径,以/*
结尾,用于存储 Skaffold 配置。Skaffold 会下载此目录中的所有文件,然后根据配置的相对路径查找包含配置的相关 Skaffold 文件。PATH_TO_GCB_REPO
是存储 Skaffold 配置的 Cloud Build 第 2 代代码库的路径。路径采用以下形式:projects/{project}/locations/{location}/connections/{connection}/repositories/{repository}
。Skaffold 会下载此目录中的所有文件,然后根据配置的相对路径查找 Skaffold 文件。FILENAME
是包含 Skaffold 配置的文件的名称。此path:
属性是可选的;如果您未指定此属性,Cloud Deploy 会假定为skaffold.yaml
。如果没有skaffold.yaml
,或者您指定的文件名不存在,则版本创建将失败。REPO_URL
是 Git 代码库的网址。PATH_TO_FILE
是该仓库中包含 Skaffold 配置文件的文件的路径。BRANCH_NAME
是用于获取 Skaffold 配置的分支名称(例如main
)。
示例
以下自定义目标类型 YAML 是一个包含 includeSkaffoldModules
stanza 的 customActions
stanza,指向存储在 Cloud Storage 存储桶中的 Skaffold 配置:
customActions:
renderAction: my-custom-action
deployAction: my-custom-action
includeSkaffoldModules:
- configs: ["myConfig"]
googleCloudStorage:
source: "gs://my-custom-target-bucket/my-custom/*"
path: "skaffold.yaml
以下 YAML 是 Skaffold 配置,所显示的自定义操作会引用该配置:
apiVersion: skaffold/v4beta7
kind: Config
metadata:
name: myConfig
customActions:
- name: my-custom-action
containers:
- name: my-custom-container
image: us-east1-docker.pkg.dev/abcdefg/foldername/myimage@sha256:c56fcf6e0a7637ddf0df3d56a0dd23bfce03ceca06a6fc527b0e0e7430e6e9f9
注册自定义目标类型
配置 CustomTargetType
后,运行 gcloud deploy apply
命令以在 Google Cloud 项目中注册 CustomTargetType
资源:
gcloud deploy apply --file=[FILE] --project=[PROJECT] --region=[REGION]
其中:
FILE
是您定义此自定义目标类型的文件的名称。
PROJECT
是要在其中创建此资源的 Google Cloud 项目。CustomTargetType
必须与引用它的 Target
资源位于同一项目中。如果您已将该项目设置为 Google Cloud CLI 的默认项目,则无需指定该项目。
REGION
是要在其中创建此资源的区域(例如 us-centra1
)。CustomTargetType
必须与引用它的 Target
资源位于同一区域。如果您已将区域设置为 gcloud CLI 的默认区域,则无需指定区域。
现在,CustomTargetType
已作为 Cloud Deploy 资源创建完毕,您现在可以在 Target
定义中使用它来创建自定义目标。
如需详细了解 CustomTargetType
定义,请参阅 Cloud Deploy 配置架构参考文档。
定义目标
支持的目标类型的目标定义与自定义目标定义之间的唯一区别在于,自定义目标定义包含 customTarget
诗节。customTarget
的语法如下:
customTarget:
customTargetType: [CUSTOM_TARGET_TYPE_NAME]
其中 CUSTOM_TARGET_TYPE_NAME
是自定义目标类型配置中定义的 name
属性的值。
将您的目标添加到传送流水线
您可以在交付流水线中使用自定义目标,就像使用受支持的目标类型一样。也就是说,支持的目标类型的目标与自定义目标在传送流水线进度方面没有差异。
提交流水线中的所有目标都必须使用相同的目标类型。例如,您不能在一个交付流水线中部署到 Google Kubernetes Engine 的目标和自定义目标。
与支持的目标类型一样,您可以在流水线阶段添加部署参数。
创建版本
自定义目标类型已完全定义,并且创建了用于使用该类型的目标,现在,您可以按照常规方式创建版本了:
gcloud deploy releases create [RELEASE_NAME] \
--project=[PROJECT_NAME] \
--region=[REGION] \
--delivery-pipeline=[PIPELINE_NAME]
创建版本后,系统会针对交付流水线中的每个目标执行自定义呈现操作,包括处理在版本、目标或交付流水线上配置的部署参数。Cloud Deploy 将部署参数作为输入提供给自定义渲染容器。
查看自定义定位条件的输出
如果您的自定义操作符合自定义目标的要求,您可以使用 Google Cloud 控制台查看呈现的工件。
请按照以下步骤查看自定义呈现操作的输出。
在 Google Cloud 控制台中,前往 Cloud Deploy 交付流水线页面,查看您的交付流水线。
点击交付流水线的名称。
流水线直观显示将显示应用的部署状态,您的版本列在版本标签页中交付流水线详细信息下。
点击相应版本名称。
系统随即会显示版本详情页面。
点击工件标签页。
在目标工件下,点击查看工件旁边的箭头。
系统会列出渲染的工件,包括自定义渲染程序生成的渲染
skaffold.yaml
和渲染清单文件。您可以点击每个文件旁边的存储位置链接,前往 Cloud Storage 存储桶查看这些文件。您还可以点击查看工件链接,使用版本检查器按版本、目标或阶段查看这些文件。
后续步骤
请参阅可用的自定义目标类型示例。
详细了解如何配置 Cloud Deploy 目标