本文档介绍了 Cloud Deploy 与其用于部署应用的外部系统之间的关系。这些系统是其他 Google Cloud 服务和第三方工具。
概要视图
下图显示了 Cloud Deploy 与其依赖的系统之间的关系。
如下图所示,Cloud Deploy 与以下系统交互:
您的 CI 系统
Cloud Deploy 支持大多数 CI 工具,前提是该 CI 流程的一个输出可以调用 Cloud Deploy API 或 CLI 以创建版本。
-
Cloud Deploy 调用 Cloud Build 来渲染清单以及部署到目标运行时。
-
Cloud Deploy 通过 Cloud Build 使用 Skaffold 来渲染和部署清单,从而部署应用。
-
Cloud Deploy 将渲染来源和已渲染清单存储在 Cloud Storage 存储桶中。
Google Cloud Observability 和 Cloud Audit Logs。
Google Cloud Observability 会收集并提供 Cloud Deploy 的日志记录数据。
另请参阅审核日志记录。
-
Cloud Deploy 将消息发布到多个 Pub/Sub 主题。您可以使用此服务来与外部工作流、测试和其他相关系统集成。
如需了解详情,请参阅订阅 Cloud Deploy 通知。
目标运行时
Cloud Deploy 使用
skaffold apply通过 Cloud Build 将应用部署到目标运行时(GKE、Cloud Run 或自定义目标)。
Cloud Deploy 资源
下图显示了 Cloud Deploy 用于交付应用的资源,以及这些资源之间的关系:
如图所示,资源之间的关系如下:
交付流水线还可以引用一个或多个自动化操作,这些操作可自动执行对 Cloud Deploy 资源的操作。
每次发布可以产生零个或多个发布,并且可以引用零个或多个制品。
每次发布至少包含一个阶段,表示发布中在逻辑上分组在一起的一组操作(作业),例如部署或部署并验证。
每个阶段都包含一个或多个作业,用于表示在发布过程中要执行的操作(部署或验证)。每个作业都可以包含一个或多个作业运行,这些作业运行是作业的实例,例如部署尝试。作业运行是发布的子资源。
每次发布都与一个目标相关联。
每个目标都与一个 GKE 集群或应用的另一个运行时目标相关联。
一个目标可以与一个或多个交付流水线相关联。
工件是指 CI 流程的任何输出(例如容器映像),在发布过程中,这些输出会部署到目标运行时。
此外,发布包含一个或多个阶段,阶段包含一个或多个作业和一个或多个作业运行。
如图所示,发布包含以下内容:
阶段
一个阶段包含一个或多个作业(例如部署,或部署和验证)。 每次发布都有一个或多个阶段。阶段是指发布中的子消息。
作业
要在发布上执行的具体操作,例如部署或验证。作业是发布作业中的子消息。
JobRuns
作业的实例,例如验证尝试。每个作业可以有零个或多个 JobRun。JobRun 是发布的子资源。
自动化操作包含自动化操作规则,这些规则可能会被零个或多个 AutomationRun 资源引用。AutomationRun 是已执行的自动化规则的实例,例如从一个目标到另一个目标的自动升级。Automation 和 AutomationRun 资源是交付流水线下的同级子资源。
它们如何整合在一起以交付版本
本部分介绍 Cloud Deploy 如何与本文档中列出的组件交互,来以版本的形式自动交付应用。
您的 CI 系统调用 Cloud Deploy 交付流水线。
您的 CI 流程使用 CLI 或 API 调用 Cloud Deploy 来创建新版本,并传递构建工件或对映像的引用。
如需详细了解如何集成 CI 系统,请参阅将 Cloud Deploy 与其他系统集成。
创建新版本后,Cloud Deploy 会执行以下操作:
将交付流水线的实例存储为版本的一部分。
即使交付流水线配置已更改,此版本的此流水线实例也保持不变。如需了解详情,请参阅每个版本的流水线实例。
此外,工具版本会存储为版本的一部分。在大多数情况下,这会是默认的工具版本,但由于您可以指定其他版本,因此系统会存储该信息。
调用 Cloud Build,以从 Cloud Storage 获取 Skaffold 渲染来源。
Cloud Deploy 将渲染源存储在默认或备用 Cloud Storage 存储桶中。
调用
skaffold diagnose(使用创建版本时存储的 Skaffold 版本)生成单个有效的清单。调用
render操作。如果您使用的是内置目标,Cloud Deploy 会调用
skaffold render以使用提供的映像或 build 工件渲染清单。Cloud Deploy 会将spec.templates.spec.containers.image中的映像名称替换为在gcloud deploy releases create命令上或由该命令引用的构建工件文件中提供的完整映像路径(包括摘要和标记)。如果您使用的是自定义目标,Cloud Deploy 会调用为其自定义目标类型定义的
render操作。Cloud Deploy 将已渲染清单存储在默认或备用 Cloud Storage 存储桶中。
Cloud Deploy 使用默认或备用执行环境来执行这些操作。
创建发布(在创建版本后自动创建,或稍后按需创建)后,Cloud Deploy 会执行以下操作:
调用预部署钩子(如果指定了任何钩子)。
如果您使用的是灰度部署策略,则会在第一阶段开始时调用预部署钩子。
调用
deploy操作。如果您使用的是内置目标,Cloud Deploy 会通过调用
skaffold apply自动创建发布并将其部署到第一个目标。如果您使用的是内置目标,系统会在创建版本时自动创建第一个发布。如果您使用的是自定义目标,Cloud Deploy 会自动创建发布并将其部署到第一个目标,同时调用为其自定义目标类型定义的
deploy操作。对于内置目标和自定义目标,只有在使用命令行创建发布时,系统才会自动向第一个目标发布。
部署到第一个目标的过程与提升相同,如下一步所述。
如果交付流水线配置中目标的
verify为true,并且在 Skaffold 配置中指定了验证,则调用skaffold verify。在
verify之后(如果指定了verify)调用部署后钩子(如果指定了任何钩子)。否则,部署后钩子会在deploy之后调用。如果您使用的是 Canary 部署策略,则部署后钩子会在最终发布阶段作为最后一个作业执行。
当需要将版本提升到下一个目标时,Cloud Build 会从 Cloud Storage 中检索特定于目标的清单。然后,Cloud Build 调用
skaffold apply以将已渲染清单应用于指定的目标运行时。如果目标需要批准,您可以通过 CLI 或使用控制台批准或拒绝。
此外,Cloud Deploy 会生成 Pub/Sub 消息,您可以订阅该消息以自动启动审批工作流。
Cloud Deploy 使用与此版本关联的 Skaffold 版本和流水线实例,并在默认或自定义执行环境中执行此步骤。
此过程不仅适用于提升,也适用于回滚和重新部署。
在整个 Cloud Deploy 操作中,该服务会将通知发布到多个 Pub/Sub 主题(例如,当发布需要批准时)。
将 Cloud Deploy 与外部系统集成中进一步介绍了此集成和其他集成。
您可以指定自动化,以在交付流水线中自动执行各种操作。这些任务可以在指定的时间执行。
automationRun表示自动化规则执行。在整个 Cloud Deploy 操作中,该服务会将平台日志和审核日志写入 Google Cloud Observability 和 Cloud Audit Logs。
在所有这些步骤中,都可以使用 Identity and Access Management 来限制流控制和资源访问权限。
后续步骤
详细了解如何将 Cloud Deploy 与其他系统集成
查看有关工具版本生命周期的重要信息。
了解 Cloud Deploy 执行环境。