在部署前后运行钩子

本文档介绍了如何在部署之前或之后运行任意程序或操作。

您可以配置 Cloud Deploy 以执行部署前操作、部署后操作或同时执行这两类操作。以这种方式运行的程序称为“钩子”。部署前钩子和部署后钩子在发布时作为部署前和部署后作业运行。

您可以将每个钩子配置为在指定的 Cloud Deploy 执行环境中运行,但如果您要部署到 Google Kubernetes Engine,也可以选择将其配置为在部署应用的 GKE 集群中运行。

部署钩子被认为是幂等的。如果给定的操作运行多次,则不会产生额外效果。

部署钩子的运作方式

下文介绍了部署钩子在 Cloud Deploy 中的运行方式以及如何设置部署钩子:

  1. 您可以在交付流水线进度的一个或多个阶段中配置钩子。

  2. 在部署作业运行之前,Cloud Deploy 会运行流水线进展中 predeploy 定义中配置的所有任务。

    predeploy 钩子始终作为阶段中的第一个作业运行。

  3. 在发布版本的部署作业运行后,Cloud Deploy 会运行流水线进度中 postdeploy 定义中配置的所有任务。

部署钩子在 Cloud Deploy 执行环境中运行。

在 Canary 部署中使用部署钩子

为 Canary 部署配置部署钩子时,需要了解以下几点:

  • 在交付流水线阶段,钩子的配置(predeploypostdeploy)位于 strategy.canary.canaryDeploymentstrategy.canary.customCanaryDeployment.phaseConfigs 下,而不是位于 strategy.standard 下。

  • 对于自动化 Canary 版,predeploy hook 仅在第一阶段部署之前执行,而 postdeploy hook 仅在最后一个阶段(稳定版)部署之后执行。

配置流水线以运行钩子

您可以在流水线进展中的一个或多个特定阶段配置部署前钩子和部署后钩子。

以下是在使用 standard 部署策略时,如何在流水线阶段中配置部署前和部署后钩子的示例:

serialPipeline:
  stages:
  - targetId: hooks-staging
    profiles: []
    strategy:
      standard:
        predeploy:
          tasks: [TASKS]
        postdeploy:
          tasks: [TASKS]

在此 YAML 中:

  • TASKS

    是一个列表,其中包含您希望作为预部署或部署后钩子的一部分运行的一个或多个任务。如果您指定了多个任务,这些任务将按指定顺序依次执行。 如果某个作业(预部署或部署后)中的第一个任务失败,则该作业也会失败,并且不会运行剩余的任务。

在应用集群上运行钩子

默认情况下,部署钩子在 Cloud Deploy 执行环境中运行。您还可以配置 Skaffold,以在应用运行的同一集群上运行部署钩子。

如需在应用集群上运行钩子,您必须在 skaffold.yaml 中将它们配置为 customActions,并在交付流水线阶段配置的 predeploypostdeploy stanza 中使用 actions 引用它们:

serialPipeline:
  stages:
  - targetId: hooks-staging
    profiles: []
    strategy:
      standard:
        predeploy:
          actions: ["my-predeploy-action"]
        postdeploy:
          actions: ["my-postdeploy-action"]

此功能仅适用于部署到 GKE,不适用于 Cloud Run。部署到 Cloud Run 只能在 Cloud Deploy 执行环境中运行钩子。

如需配置钩子以在集群上运行,请在 skaffold.yaml 配置文件中包含一个 executionMode.kubernetesCluster stanza,该 stanza 位于您要在集群上运行的每个操作的 customActions stanza 内:

customActions:
- name: ACTION_NAME
  containers:
  - name: CONTAINER_NAME
    image: IMAGE
    command: [COMMANDS_TO_RUN]