创建自定义目标

本文档介绍了如何创建自定义 Cloud Deploy 目标类型,并在 Cloud Deploy 交付流水线中将该自定义目标类型用作目标

下面概要介绍了创建自定义目标类型和 在交付流水线中使用它:

  1. 创建容器化应用或 提供部署到自定义目标的功能的应用, 并且符合 Cloud Deploy 的 要求 自定义目标类型。

  2. skaffold.yaml定义一个自定义操作, 引用该容器并指定要在容器上运行的一个或多个命令。

  3. 创建引用上一步中自定义操作的 CustomTargetType 定义,并将其注册为 Cloud Deploy 资源。

  4. 使用 customTarget 属性定义一个新目标, 标识新的自定义目标类型。

  5. 从交付流水线中引用该目标 进度

  6. 创建发布版本

本文档其余部分将详细介绍其中的每个步骤。

创建容器化应用

要部署到自定义目标的功能在容器化应用中定义,您可以通过skaffold.yaml 文件引用它们将这些功能提供给 Cloud Deploy。当您的提交流水线包含使用自定义目标类型的目标时,Cloud Deploy 会在 Skaffold 中调用为该自定义目标类型定义的自定义操作容器,以执行您定义的渲染和部署操作。

应用的行为由您自己决定。不过,它必须使用 Cloud Deploy 提供的输入环境变量,并且必须返回所需的输出

在大多数情况下,您需要为渲染操作创建一个容器,为 针对您创建的每个自定义目标类型执行部署操作。渲染操作是可选的,但如果您未提供渲染操作,Cloud Deploy 将使用默认的 skaffold render

在 Skaffold 中定义自定义操作

自定义操作容器映像就绪后,您可以从 skaffold.yaml 配置文件中引用它们。

您可以在 customActions 诗节中为自定义目标配置每个自定义操作。对于任何自定义目标类型,您都可以在 Skaffold 中针对 另一个用于部署CustomTargetType 定义用于确定哪个自定义操作用于渲染,哪个自定义操作用于部署。

以下是 Google Cloud 上的自定义渲染和部署操作的 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 定义如下:

# 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

    是自定义呈现操作的名称。该值是customAction.nameskaffold.yaml 中为 render 操作。

  • DEPLOY_ACTION_NAME

    是自定义部署操作的名称。此值是 skaffold.yaml 中为部署操作定义的 customAction.name

  • includeSkaffoldModules

    如果您使用的是远程 Skaffold 配置,可以选择使用以下 stanza。此诗节中的属性显示在使用远程 Skaffold 配置部分中。

使用远程 Skaffold 配置

您可以将 Skaffold 配置存储在一个公共 Git 代码库中 Cloud Storage 存储桶或 Cloud Build 第 2 代代码库 从您的自定义目标类型定义中引用这些配置。

使用远程 Skaffold 配置意味着skaffold.yaml您在 无需定义自定义操作。这样,您就可以在整个组织内共享自定义操作。

如需使用远程 Skaffold 配置,请执行以下操作:

  1. 使用您的自定义操作创建 Skaffold 配置。

  2. 将配置存储在 Git 代码库或 Cloud Storage 存储桶中。

  3. 在自定义目标类型定义中,添加 customActions.includeSkaffoldModules 节。

  4. includeSkaffoldModules 下,指定以下内容:

    • (可选)一个或多个 configs 元素:

      - configs: ["name1", "name2"]

      configs 的值是与 metadata.name 匹配的字符串列表 属性。如果省略此属性, Cloud Deploy 接受指定路径中的所有配置。

    • googleCloudStoragegitgoogleCloudBuildRepo 诗节。

      对于 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 文件查找相关的 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 是一个 customActions 节,其 includeSkaffoldModules 节,指向存储在 Cloud Storage 存储桶:

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 控制台查看 工件

要查看自定义呈现操作的输出,请按以下步骤操作。

  1. 在 Google Cloud 控制台中,前往 Cloud Deploy 交付流水线页面以查看交付流水线。

    打开“交付流水线”页面

  2. 点击交付流水线的名称。

    流水线直观显示将显示应用的部署状态,您的版本列在版本标签页中交付流水线详细信息下。

  3. 点击发布版本名称。

    系统随即会显示版本详情页面。

  4. 点击工件标签页。

  5. 目标制品下,点击查看制品旁边的箭头。

    系统会列出渲染的工件,包括自定义渲染程序生成的渲染 skaffold.yaml 和渲染清单文件。您还可以 请点击各项内容旁边的存储位置链接,以转到 Cloud Storage 存储桶以查看这些文件。

    您还可以点击查看工件链接,使用版本检查器按版本、目标或阶段查看这些文件。

后续步骤