实现部署自动化

Last reviewed 2023-07-17 UTC

Google Cloud 架构框架中的本文档提供了自动执行构建、测试和部署的最佳实践。

自动化功能通过消除因代码更新等重复流程引起的人为错误,从而帮助您标准化构建、测试和部署。本部分介绍如何在自动化过程中使用各种检查和安全措施。标准化的机器控制过程有助于确保安全地应用您的部署。它还提供了一种机制,让您可以根据需要恢复先前的部署,而不会显著影响用户体验。

将代码存储在中央代码库中

将代码存储在中央代码库中,中央代码库包括一个带标记功能和回滚代码更改功能的版本控制系统。通过版本控制,您可以整理文件并控制整个团队和组织的访问、更新和删除。

对于不同的开发阶段,根据需要为代码库添加版本和标签。例如,标签可以是 testdevprod

在 Google Cloud 中,您可以将代码存储在 Cloud Source Repositories 中,为其添加版本并将它们与其他 Google Cloud 产品集成。如果您要构建容器化应用,请使用容器的管理注册表 Artifact Registry

如需详细了解版本控制,请参阅版本控制。如需详细了解如何使用代码库实现主干开发,请参阅主干开发

使用持续集成和持续部署 (CI/CD)

使用持续集成和持续部署 (CI/CD) 方法实现部署自动化。CI/CD 方法是您配置的流水线和开发团队遵循的流程的组合。

CI/CD 方法可让您的软件开发团队提高工作效率,从而加快部署速度。通过这种方法,开发者可以更频繁地进行较小的更改并进行全面测试,同时减少部署这些更改所需的时间。

使用 CI/CD 方法时,自动执行构建、测试和部署代码过程中的所有步骤。例如:

  • 每当新代码提交到代码库时,让提交自动调用构建并测试流水线。
  • 自动执行集成测试。
  • 自动执行您的部署,以便在构建满足特定测试条件之后再部署更改。

在 Google Cloud 中,您可以为 CI/CD 流水线使用 Cloud BuildCloud Deploy

使用 Cloud Build 帮助定义可用于打包和构建应用软件包的依赖项和版本。对构建配置进行版本控制,确保所有构建都保持一致并且在必要时可以回滚到上一个配置。

使用 Cloud Deploy 将应用部署到 Google Cloud 上的特定环境,并管理部署流水线。

如需详细了解如何实现 CI/CD,请参阅持续集成部署自动化

使用基础架构即代码预配和管理您的基础架构

基础架构即代码是指使用描述性模型来管理基础架构(如虚拟机)和配置(如防火墙规则)。通过基础架构即代码,您可以执行以下操作:

  • 自动创建云资源,包括 CI/CD 流水线的部署或测试环境。
  • 像处理应用更改一样处理基础架构更改。例如,确保对配置所做的更改已经过检查和测试,可以进行审核。
  • 为云基础架构提供可靠的单个版本。
  • 根据需要复制云环境。
  • 如有必要,回滚到前一个配置。

这种基础架构即代码概念也适用于 Google Cloud 中的项目。您可以使用此方法来定义项目中的资源,例如共享 VPC 连接或 Identity and Access Management (IAM) 访问权限。如需查看此方法的示例,请参阅 Google Cloud 项目工厂 Terraform 模块

Terraform 等第三方工具可帮助您在 Google Cloud 上自动创建基础架构。如需了解详情,请参阅使用 Terraform、Cloud Build 和 GitOps 以代码形式管理基础架构

请考虑使用 Google Cloud 功能,例如项目安全锁Cloud Storage 保留政策和 Cloud Storage 存储桶锁定,以防止关键资源遭受意外删除或恶意删除。

在整个软件交付生命周期内纳入测试

测试对于成功发布软件至关重要。持续测试有助于团队更快地创建高品质软件和增强软件稳定性。

测试类型:

  • 单元测试。单元测试速度很快,可帮助您执行快速部署。您可以将单元测试视为代码库的一部分,并将其纳入构建流程中。
  • 集成测试。集成测试非常重要,特别是对于旨在实现可扩缩性并依赖于多项服务的工作负载而言。当您测试与互连服务的集成时,这些测试可能会比较复杂。
  • 系统测试。系统测试非常耗时且复杂,但可帮助您在部署之前识别边缘情况并解决问题。
  • 其他测试。您还应运行其他测试,包括静态测试、负载测试、安全测试、政策验证测试等等。请先运行这些测试,然后再在生产环境中部署应用。

如需整合测试,请执行以下操作:

  • 在软件交付生命周期内持续执行所有类型的测试。
  • 自动执行这些测试,并将其纳入 CI/CD 流水线中。如果有任何测试失败,流水线便会失败。
  • 持续更新并添加新测试以改进和维护部署的运营状况。

对于您的测试环境:

  • 针对您拥有的每个测试环境使用单独的 Google Cloud 项目。对于每个应用,请使用单独的项目环境。这种分离可以清楚地区分生产环境资源与级别更低的环境的资源。这种分离有助于确保一个环境中的任何更改都不会意外影响到其他环境。
  • 自动创建测试环境。实现此自动化的一种方法是使用基础架构即代码
  • 使用合成生产环境来测试更改。此环境提供一个类似生产的环境,用于测试您的应用并对您的工作负载执行各种测试,包括端到端测试和性能测试。

如需详细了解如何实现持续测试,请参阅测试自动化

逐步启动部署

根据重要参数(例如最大限度地降低对最终用户造成的影响、滚动更新、回滚策略和 A/B 测试策略)选择部署策略。对于每个工作负载,请评估这些要求,并从经过验证的方法(例如滚动更新、蓝绿部署和 Canary 部署)中选择部署策略。

仅允许 CI/CD 流程在生产环境中进行更改和推送更改。

请考虑使用不可变基础架构。不可变基础架构是指未更改或未更新的基础架构。如果您需要在环境中部署新代码或更改任何其他配置,请将整个环境(例如,一组虚拟机或 Pod)替换为新环境。蓝绿部署是不可变基础架构的示例。

我们建议您执行 Canary 测试,并在部署更改时观察您的系统中是否存在任何错误。如果您有可靠的监控和提醒系统,则进行此类型的观察会更容易。如需执行 A/B 测试或 Canary 测试,您可以使用 Google Cloud 的代管实例组。然后,您可以执行缓慢发布,还可在必要时执行恢复。

请考虑使用 Cloud Deploy 自动执行部署并管理部署流水线。您还可以在 Google Cloud 上使用许多第三方工具(如 SpinnakerTekton)进行自动部署和创建部署流水线。

无缝恢复旧版本

将恢复策略定义为部署策略的一部分。确保您可以将部署或基础架构配置回滚到旧版源代码。恢复上一个稳定部署是管理可靠性和安全性突发事件的重要步骤。

同时确保您可以将环境恢复到部署过程开始之前所处的状态。这可能包括:

  • 能够还原应用中的任何代码更改。
  • 能够还原对环境所做的任何配置更改。
  • 使用不可变基础架构并确保部署不会更改环境。这些做法可让您更轻松地还原配置更改。

监控 CI/CD 流水线

为确保自动化构建、测试和部署过程能够顺畅运行,请监控 CI/CD 流水线。设置提醒,指示流水线中发生故障。流水线的每个步骤都应编写合适的日志语句,以便您的团队可以在流水线发生故障时执行根本原因分析。

在 Google Cloud 中,所有 CI/CD 服务都与 Google Cloud Observability 集成。例如:

如需详细了解监控和日志记录,请参阅设置监控、提醒和日志记录

安全地部署应用

查看架构框架的安全性、合规性和隐私权类别中的安全地部署应用部分。

制定版本发布的管理指南

为帮助工程师避免犯错以及实现高速软件交付,请务必明确记录用于发布新软件版本的管理指南。

发布工程师负责监督软件的构建和交付方式。发布工程的系统遵循以下四种做法:

  • 自助模式。制定指南,帮助软件工程师避免常见错误。这些准则通常是在自动化过程中进行编码化。

  • 频繁发布。快速发布有助于排查问题,更轻松地解决问题。频繁发布依赖于自动化单元测试。

  • 封闭构建。确保与构建工具保持一致。对现在(与一个月前相比)用于构建版本的构建编译器进行版本控制。

  • 强制执行政策。所有更改都需要经过代码审核,最好包含一系列准则和政策以加强安全性。强制执行政策可以改进代码审核、排查问题和测试新发布。

后续步骤