本文档介绍了如何先运行任意程序或操作, 和/或之后
您可以将 Cloud Deploy 和 Skaffold 配置为 操作来执行部署前操作 部署后操作,或同时执行这两项操作。以这种方式运行的程序称为 “hoks”。部署前钩子和部署后钩子会作为发布的部署前和部署后作业运行。
您可以将每个钩子配置为在指定 Cloud Deploy 中运行 执行环境,但如果 可以选择将其配置为在 Google Kubernetes Engine 上运行 您要在其中部署应用的 GKE 集群。
部署钩子假定是幂等的。如果某个给定操作被运行多次,则不会产生额外影响。
部署钩子是如何运作的?
以下介绍了配置部署钩子的步骤,以及运行这些钩子的 Skaffold 和 Cloud Deploy 流程:
您可以配置为给定版本使用的
skaffold.yaml
,以包含用于标识用于运行钩子的容器映像或映像的customActions
,以及要在每个容器上运行的特定命令或脚本。您可以在交付流水线进程中的一个或多个阶段配置钩子,每个钩子都引用您在
skaffold.yaml
中配置的customActions
之一。在发布版本的部署作业运行之前,Skaffold 会运行在
skaffold.yaml
中配置的任何命令,这些命令在流水线进度中的predeploy
诗节中都有引用。predeploy
钩子始终作为相应阶段中的第一个作业运行。在发布版本的部署作业运行后,Cloud Deploy 会运行在
skaffold.yaml
中配置的任何命令,这些命令在流水线进度中的postdeploy
诗节中都有引用。
部署钩子在默认的 Cloud Deploy 执行中运行 环境或指定的替代执行环境中。对于部署到 GKE 和 GKE Enterprise 的情况,您可以选择在部署应用的同一集群上运行钩子。
将部署钩子与 Canary 部署搭配使用
为 Canary 部署配置部署钩子时,有几个 注意事项:
在交付流水线阶段,钩子的配置 (
predeploy
和postdeploy
)小于strategy.canary.canaryDeployment
或strategy.canary.customCanaryDeployment.phaseConfigs
,而不是低于strategy.standard
。对于自动化 Canary 版,
predeploy
钩子仅在第一个阶段的部署之前执行,postdeploy
钩子仅在最后一个阶段(稳定版)的部署之后执行。
在 Skaffold 中配置操作
在 skaffold.yaml
文件中,customActions
节接受一个或多个
customActions
个节,已配置
如下所示:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
在此 customerActions
节中:
ACTION_NAME
是此操作的名称。此名称可以是任何您想要的名称,但必须在此
skaffold.yaml
中是唯一的。这是将从交付流水线阶段定义的部署前和部署后操作引用的名称。CONTAINER_NAME
是特定容器的名称。此名称可以是您想要的任何名称,但必须在此
skaffold.yaml
中是唯一的。IMAGE
是将执行命令的容器映像的名称。
COMMANDS_TO_RUN
是在该容器上运行的入口点列表。
"/bin/sh"
是此处用于调用 shell 的典型命令,您需要在 args 中添加要在该 shell 中运行的命令。LIST_OF_ARGS
是要提供给命令的参数列表。这是以逗号分隔的 列表,每个参数都用引号括起来。如果您的COMMAND_TO_RUN 为
"/bin/sh"
,则此处的一个参数为"-c"
,另一个为 参数应该是你想要在当前运行的 shell 中运行的完整命令 调用。示例如下:
command: ["/bin/sh"] args: ["-c", `echo "This command ran!"`]
如需详细了解 Skaffold 自定义操作,请参阅 Skaffold 文档。
配置流水线以引用操作
如需完成配置部署钩子,您需要配置交付流水线以引用您在 skaffold.yaml
文件中定义的自定义操作。在一个文件中配置部署前和部署后操作
或销售漏斗中更具体的阶段
进度。
使用 standard
部署策略时,您可以在流水线阶段配置部署前和部署后钩子,具体方法如下:
serialPipeline:
stages:
- targetId: hooks-staging
profiles: []
strategy:
standard:
predeploy:
actions: ["PREDEPLOY-ACTION"]
postdeploy:
actions: ["POSTDEPLOY-ACTION"]
在此 yaml 中:
PREDEPLOY_ACTION
与您在
skaffold.yaml
中用于定义要在部署前运行的自定义操作的 ACTION_NAME 相同。POSTDEPLOY_ACTION
与您在
skaffold.yaml
中用于定义要在部署后运行的自定义操作的 ACTION_NAME 相同。
您可以为 predeploy
和 postdeploy
指定多项操作,以英文逗号分隔。如果指定了多个操作,这些操作会在
它们的指定顺序作业(部署前或部署后)在第一次使用时失败
操作失败,其余操作不会运行。
默认情况下,如果您并行运行多个容器,并且运行一个作业, 两个容器都会停止。您可以使用 Skaffold 自定义操作失败策略。
在应用集群上运行钩子
默认情况下,部署钩子在 Cloud Deploy 执行环境中运行。您还可以
将 Skaffold 配置为在
应用正在运行。当您
在 skaffold.yaml
中配置自定义操作,以及
在流水线阶段启用它们时,操作会运行
自动添加到该目标的集群中
此功能适用于部署到 GKE 仅适用于 GKE Enterprise,不适用于 Cloud Run。部署到 Cloud Run 只能在 Cloud Deploy 中运行钩子 执行环境
如需在集群上运行钩子,请在 skaffold.yaml
配置文件的特定自定义操作的 customActions
诗节中添加 executionMode.kubernetesCluster
诗节:
customActions
- name: ACTION_NAME
containers:
- name: CONTAINER_NAME
image: IMAGE
command: [COMMANDS_TO_RUN]
args: [LIST_OF_ARGS]
executionMode:
kubernetesCluster: {}
以下是一个包含 executionMode
的 customActions
节示例
调用应用集群上的钩子容器:
customActions:
- name: predeploy-action
containers:
- name: predeploy-echo
image: ubuntu
command: ["/bin/sh"]
args: ["-c", 'echo "this is a predeploy action"' ]
executionMode:
kubernetesCluster: {}
executionMode
节是可选的,如果省略,Skaffold 会运行
自定义操作容器。
可用的环境变量
Cloud Deploy 提供并填充以下环境 执行环境中的变量, 您可以将其用于您的钩子:
ANTHOS_MEMBERSHIP
对于
ANTHOS
类型的目标,Anthos 的完整资源名称 会员。CLOUD_RUN_LOCATION
对于类型为
RUN
的目标,是 Cloud Run 服务部署到的区域。CLOUD_RUN_PROJECT
对于
RUN
类型的目标,Cloud Run 将 服务。CLOUD_RUN_SERVICE
对于类型为
RUN
的目标,为已部署的 Cloud Run 服务指定名称。CLOUD_RUN_SERVICE_URLS
对于类型为
RUN
的目标,是最终用户访问您的服务所用的网址(以英文逗号分隔的列表)。您可以在 Google Cloud 控制台中的服务的 Cloud Run 服务详情中找到这些信息。CLOUD_RUN_REVISION
对于类型为
RUN
的目标,是 Cloud Run 服务的特定修订版本。GKE_CLUSTER
对于
GKE
类型的目标, Google Kubernetes Engine 集群,例如projects/p/locations/us-central1/clusters/dev
。TARGET_TYPE
目标的具体运行时类型。可以是
GKE
、ANTHOS
或RUN
。 对于自定义目标,系统不会设置此值。CLOUD_DEPLOY_LOCATION
包含 Cloud Deploy 资源的区域。
CLOUD_DEPLOY_DELIVERY_PIPELINE
交付流水线的 ID。
CLOUD_DEPLOY_TARGET
目标的 ID。
CLOUD_DEPLOY_PROJECT
包含 Cloud Deploy 资源的 Google Cloud 项目。
CLOUD_DEPLOY_RELEASE
钩子将在其中运行的版本的 ID。
CLOUD_DEPLOY_ROLLOUT
包含钩子作业的发布版本的 ID。
CLOUD_DEPLOY_JOB_RUN
作业运行的 ID,表示 作业。
CLOUD_DEPLOY_PHASE
发布中包含钩子作业的阶段。
将参数部署为环境变量
除了本部分列出的环境变量之外, Cloud Deploy 可以将任何 您设置的部署参数。
了解详情。
后续步骤
尝试查看快速入门:部署前后运行钩子。
详细了解 Skaffold。