8.0

查看英文版

8.0 第 8 部分导言:自动化

软件只有触达用户才能创造价值。从一次已提交的变更到运行中的生产代码之间的路径,正是大型组织最常失去速度、安全性和理智的地方。在数百名工程师、数十个团队和数千项基础设施资源的规模下,对小团队适用的非正式习惯会彻底失效。手动构建、手工配置的服务器和一次性的部署脚本会拖慢你的速度,更糟的是,它们会变得不可重复、没有文档记录,也无法被审计。本部分讲的正是用自动化取代这种脆弱性:把构建、配置、部署和运维软件这些混乱、易出错的工作,转变为成文化、可重复、可评审的系统。

对大型团队以及企业和政府组织而言,这些风险是实实在在的。当许多团队共享相互重叠的系统时,手动集成和手动运维的成本会呈非线性增长,一次未经评审的变更就可能悄无声息地破坏另一个团队的工作,或破坏整个发布。受监管的组织还承担着额外的负担。审计人员、安全官员和监管机构需要证据,证明变更经过了评审、测试和批准,并证明生产环境中运行的产物,正是当初被构建和审查过的那一个。自动化正是能把这些合规义务,从一项文书负担转变为常规工程工作流程中自动产生的副产品的东西。你会从事后发现违规,转变为在任何资源被配置或交付之前就加以预防。

第 8 部分端到端地跟随交付机制展开:从集成和发布代码的流水线,到它所运行的成文化基础设施,再到承载它的容器平台、让普通团队也能使用这一切的内部平台,以及防止质量和控制力在规模化压力下崩溃的自动化机制。贯穿全篇的主线很简单:任何你反复、可预测地执行的工作,都应当被成文化,从而能够一致、快速、且无需人力辛劳地运行。

本部分的各章节

  • 8.1 CI/CD 与交付: 构建自动化流水线,把每一次变更集成到共享主干中,进行测试,并使其保持在可部署状态,从而让发布成为一项安全的业务决策,而不是一场工程上的仓促应对,而且是一项可被审计的决策。

  • 8.2 基础设施即代码与配置: 通过带版本号、可评审的机器可读定义来定义和配置基础设施,而不是靠手动点击,从而使环境保持一致、可重现、可随时丢弃,并在任何资源存在之前就内嵌并检查治理规则。

  • 8.3 容器、编排与云原生: 把应用程序及其依赖打包成可移植、隔离的单元,并在诸如 Kubernetes 之类的编排平台上规模化运行,为众多团队提供部署、扩展和韧性的共同基底,同时治理来源可追溯性、隔离性和成本。

  • 8.4 平台工程与开发者体验: 构建并运行一个内部开发者平台,提供经过精心设计的自助式黄金路径(内置了合理默认设置的、有明确立场且受支持的路径),吸收共享的复杂性,使团队能专注于自己的领域,同时默认继承组织在安全性、可靠性和合规性方面的标准。

  • 8.5 测试与流程自动化: 用可靠的、由机器执行的工作流程取代重复性的手动测试和运维工作,从持续测试套件到操作手册、补救措施和合规证据收集,从而使质量和控制力能够规模化扩展,让熟练的工程师得以从中解放出来,去处理需要判断力的问题。

  • 8.6 发布管理与渐进式交付: 将部署与发布解耦,使上线代码与向用户开放某项功能相互分离,并借助功能开关、金丝雀发布和蓝绿部署、自动化健康检查和回滚,以及由错误预算把关的发布,来逐步推出变更,从而缩小任何一次变更的影响范围。

  • 8.7 构建系统与产物管理: 让构建变得可重现、快速且可缓存,并把产物当作不可变、带版本号、经过签名的东西来对待,一次构建、跨环境晋升,同时具备来源可追溯性和供应链完整性。

这些章节如何相互关联

这些章节描述的是同一套交付系统的各个层次,每一层都建立在其下方的层次之上。持续集成和持续交付(CI/CD,第 8.1 章)是把变更从提交带到生产环境的结缔组织。但一条流水线需要有部署的目标,基础设施即代码(第 8.2 章)正是以带版本号、可重现的定义(而不是手工打造的、各不相同的孤品)来提供这个目标。容器与编排(第 8.3 章)是流水线和成文化基础设施都日益依赖的运行时基底,为每个团队提供一致的打包和部署契约。平台工程(第 8.4 章)随后把这一切包装成一个连贯的内部产品,使普通团队能通过铺装好的道路来使用流水线、基础设施和编排,而不必从零开始拼凑它们。测试与流程自动化(第 8.5 章)贯穿每一层,把质量关卡嵌入流水线,并把维系整个体系健康所需的运维和合规工作成文化。任何一层的薄弱之处都会削弱其上方的层次。脆弱的流水线、孤品式的环境,或缺乏治理的平台,都会重新引入自动化本应消除的那种手动风险。

本部分也向外延伸连接。这里所讲的交付学科,是第 11 部分(尤其是第 11.2 章)中流动和交付流水线思想的工程落地,它依赖的是支配任何高吞吐量系统的同一套排队动力学。这些章节所构建的东西是要被运维的,因此它们直接通向第 9 部分的运维与可靠性(第 9.1 章的站点可靠性工程,以及第 9.2 章的可观测性),这两章讨论的正是自动化所部署的那个运行中的系统。贯穿第 8 部分的治理和合规即代码主题,满足了本指南其他地方所设定的安全性和监管约束,而这里所描述的平台,也正是人工智能和数据工作负载日益运行的地方,这就把本部分与第 6 部分中的 MLOps(机器学习运维)和基础设施议题联系了起来。综合起来读,这些章节展示了大型组织如何在不放弃安全性、一致性或控制力的前提下快速交付软件。