本书系统讲解在云环境中落地持续交付(CD)的完整方法论,兼顾战略规划与技术实践。全书从基础概念切入,先阐释CD生态系统的核心要素、与持续集成(CI)的衔接及渐进式交付原理,再详解云部署模型、服务模型等云计算基础,明确云上CD与传统模式的差异。技术层面,聚焦架构选择(单体与微服务对比)、云原生平台特性,深入剖析滚动更新、蓝/绿部署等部署策略,以及GitOps、基础设施即代码(IaC)等关键技术的落地方法,同时强调安全防护,涵盖CI/CD环境保护、密钥管理、策略控制等内容。还提供组织层面的实施指南,包括团队技能提升、跨部门协作机制,辅以可口可乐阿根廷、爱立信等企业案例,并展望CD未来趋势与开源生态贡献路径,帮助读者形成从理论到落地的完整认知。
前 言 Preface
许多组织正在拥抱云技术以保持竞争力。在对基于云的生态系统进行现代化改造时,实现和采用软件开发流程、工具及技术可能具有挑战性。本书将帮助你理解为何需要对持续交付(软件开发与交付的核心组件)进行现代化改造,以及如何推动云环境中基础设施与软件应用部署的融合。
首先,读者将了解云上持续交付(也称为云端持续交付)与传统持续交付方法的区别,以及构建最适合组织的正确策略的步骤,还将获得在不同类型的云环境中开发、测试、集成、部署和运行云原生软件的指导。本书从组织和技术角度详细介绍了在云上引入持续交付的先决条件。读者将深入研究组织和技术储备的关键方面,从而制定成功的策略,并克服云旅程的核心挑战。最后,读者将了解在起步后长期保持 DevOps优势的注意事项。
在本书结尾,读者将全面理解如何选择合适的云环境类型和技术,以实现持续交付的现代化。
本书的目标读者
本书面向运维工程师、站点可靠性工程师(SRE)、DevOps架构师,以及负责在云上制定、规划和实施持续交付的工程师。读者需要具备以下背景知识:对CI/CD的概念有基础的认知;熟悉云生态系统、DevOps方法论及CI/CD流水线。
本书涵盖的内容
第1章简要介绍持续交付的核心概念、重要性及优势。此外,还将借助行业广泛使用的工具与技术,分步骤讲解持续交付的实现过程。
第2章阐述云计算的相关基础知识与特征(如云交付模型)。通过学习该章,读者将理解在处理云计算中的持续交付时,哪些要素具有实际应用价值。
第3章从组织层面详细阐述在云上引入持续交付的先决条件。该章介绍了组织就绪度的各个方面,并解释了如何规划成功的云上持续交付策略。该章内容涵盖云上持续交付的实现、管理与优化指导。同时,还深入探讨了在云环境中建设CD的现代化需求与核心挑战,如何使路线图与云计算对齐并连接以实现成果最大化,以及能力提升与技能升级需求。
第4章详细解析如何在云上搭建持续交付体系,以最大化软件开发、基础设施与管理的整体投资回报率(ROI)。该章为企业提供云上持续交付的规模化实施概览,包括组织特征、CI/CD 规模化需求,以及CI/CD的权责分配与角色职责。
第5章阐述实现持续交付所需的架构决策与考量因素,并使用部分篇幅揭示了可能危及CD环境与策略的潜在风险。
第6章介绍CD策略的补充技术措施,以及如何通过这些措施推动落地。
第7章解析应用交付周期的影响机制、开发者面临的周期压力,以及性能的量化方法。
第8章强调持续交付中安全保障的重要性。此外,该章还探讨了软件供应链安全议题,以及可实施的检查措施,以确保交付软件的安全性。
第9章聚焦行业最佳实践,并提供若干案例研究作为参考。
第10章聚焦持续交付的未来趋势及相关技术演进,以中长期视角向读者介绍演进变革及技术采纳的关键考量。
第11章面向潜在贡献者介绍开源项目,提供参与开源生态的路径与延伸阅读方向。
第12章聚焦实践任务,检验读者的知识掌握程度。
充分利用本书
为更好地理解本书,读者最好具备以下知识:软件开发、持续交付实践及云技术的入门知识;对CI/CD概念的基本理解;熟悉云生态系统、DevOps方法论及CI/CD流水线;掌握CI/CD工具及云生态系统的基础知识;至少使用过一种云(如AWS或Azure)。
本书涉及的软件/硬件 操作系统要求
Kubernetes、Helm、Kustomize等 Windows、macOS和Linux
下载示例代码文件
本书丰富的图书和视频资源对应的代码包可在 />排版约定
本书采用了以下排版约定。
代码:表示文本中的代码、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟URL、用户输入及Twitter账号等。示例如下:控制器还将确保对象中定义的状态得到满足,因此如果将其修改为expose=false,控制器将删除该服务。
代码块如下所示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-cloudy-app
spec:
replicas: 3
当需要让读者关注代码块中的特定部分时,相关行或内容将以粗体显示:
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-cloudy-app
spec:
replicas: 3
vm.dirty_expire_centisecs = 3000
命令行输入或输出如下所示:
mkfs.ext4 -E stride=16,stripe-width=160 /dev/sdX
粗体:用于表示新术语、关键词或界面显示文本。例如,菜单或对话框中的选项会以粗体呈现:从管理面板中选择系统信息。
提示或重要说明
会按此格式展示。
加里玛·巴杰帕伊
(Garima Bajpai)
DevOps和云技术领域的思想领袖与行业领袖,加拿大DevOps实践社区的创始人,同时负责领导持续交付基金会(Continuous Delivery Foundation,CDF)大使项目的管理工作。她拥有20多年领导大规模研发团队的经验,曾帮助多个团队采用DevOps提升云资源部署过程中的团队生产力。
托马斯·舒茨
(Thomas Schuetz)
云原生工程师、倡导者和教育工作者,居住在奥地利,拥有深厚的系统工程技术背景。他专注于云原生持续交付和基础设施即代码(Infrastructure-as-Code,IaC)领域,是云原生计算基金会(Cloud Native Computing Foundation,CNCF)和持续交付基金会的大使,同时也是Keptn和K8sGPT等开源项目的维护者。他还在奥地利布尔根兰应用科学大学任教。
目 录
译者序
前言
作者简介
审校者简介
第一部分 云上持续交付的基础知识和准备工作
第1章 云上持续交付规划 2
1.1 理解持续交付生态系统 2
1.1.1 定义持续交付生态系统 3
1.1.2 持续交付生态系统的特征 4
1.1.3 持续交付生态系统的关键角色 4
1.1.4 管理持续交付生态系统 5
1.2 持续交付的主要优势 6
1.3 从持续集成到持续交付 8
1.4 渐进式交付 9
1.5 基于云计算的持续交付实现 10
1.6 总结 11
1.7 延伸阅读 12
第2章 理解云交付模型 13
2.1 云部署模型 14
2.2 云计算的特征 14
2.3 云服务模型 16
2.4 为什么持续交付在云计算中有所
不同 18
2.5 实践云上持续交付的机会和风险 19
2.5.1 实践云上持续交付的机会 20
2.5.2 实践云上持续交付的挑战 20
2.6 总结 21
第3章 创建成功的战略并为持续
交付做好准备 22
3.1 在云上实现现代化持续交付的战略
和目标 22
3.1.1 云上持续交付战略的关键框架 24
3.1.2 云上持续交付框架的简单说明 25
3.2 连接业务、转型和运维策略 26
3.3 概述云上持续交付组织层面的前置
准备工作 27
3.3.1 敏捷、DevOps和云技术与实践
的共存 27
3.3.2 专注于卓越工程 28
3.3.3 能够与遗留的、单一的环境进行
协作 29
3.3.4 运营模式支持第三方服务
提供商 29
3.3.5 沟通与协作 29
3.4 提高组织的技能目标 29
3.4.1 云上持续交付的团队组织 29
3.4.2 提高云上持续交付实施体系的
关键技巧 30
3.5 云上持续交付的现代化实现 31
3.5.1 实施 31
3.5.2 管理持续交付 32
3.5.3 管理指标 32
3.5.4 流行的云上持续交付工具 33
3.6 总结 34
第4章 云上持续交付的设置和扩展 35
4.1 选择合适的云环境、模型和工具 35
4.1.1 准备 36
4.1.2 战略分析 36
4.1.3 初始选择 38
4.1.4 采用和管理持续交付实践 38
4.2 理解并主导云上持续交付的相关
文化 41
4.3 转移成本、风险和安全管理 44
4.3.1 云原生持续交付的安全性
挑战 45
4.3.2 混沌工程 45
4.4 持续交付实践及其演变 46
4.5 扩展CI/CD的关键需求 47
4.6 总结 48
第二部分 实现持续交付
第5章 寻找实现云上持续交付的
技术策略 50
5.1 确保部署策略在技术上的成功 51
5.2 探索单体和微服务架构 52
5.2.1 单体是什么 53
5.2.2 微服务是什么 54
5.2.3 单体不好吗?我们应该一直
使用微服务吗 55
5.3 云原生平台和注意事项 56
5.4 大规模交付软件的策略 59
5.4.1 多阶段和多集群环境 59
5.4.2 大规模滚动更新应用程序 60
5.5 总结 61
第6章 通过支持技术实现成功的
实施 62
6.1 部署策略 62
6.2 持续集成 64
6.3 模板和Kubernetes Operator 66
6.3.1 Kustomize 67
6.3.2 Helm 67
6.3.3 Operator 68
6.4 基础设施即代码 69
6.5 GitOps 71
6.6 平台和开发者门户 74
6.7 缺失部分 76
6.8 总结 77
第7章 以速度为目标,降低交付
风险 78
7.1 速度在持续交付中的作用以及相关
风险 79
7.2 为什么速度很重要 80
7.2.1 速度如何降低交付风险 80
7.2.2 度量持续交付性能 81
7.3 可观测性 83
7.4 部署策略 84
7.4.1 扩容和部署策略的基础知识 84
7.4.2 滚动更新 86
7.4.3 蓝/绿部署 87
7.4.4 灰度发布 88
7.4.5 功能开关 88
7.4.6 部署策略的级别 88
7.4.7 策略带来的改变 89
7.5 部署和发布 90
7.6 总结 92
第8章 持续交付的安全性以及部署
测试 93
8.1 安全基础知识 94
8.2 保护CI/CD环境 95
8.3 确保流水线安全 98
8.4 支持的工具和技术 100
8.4.1 集中认证/身份管理 100
8.4.2 密钥管理 101
8.4.3 策略实施控制器 102
8.4.4 审计 102
8.5 处理人为错误 103
8.5.1 建立一种允许犯错的文化 103
8.5.2 讨论错误 103
8.5.3 复盘/文档 104
8.5.4 自动化测试 104
8.6 总结 105
第三部分 最佳实践和未来之路
第9章 最佳实践和参考 108
9.1 建立和采用最佳实践 109
9.2 端到端责任 109
9.3 以云友好的方式进行开发 110
9.3.1 松耦合 110
9.3.2 12要素应用程序 110
9.3.3 使用正确的版本控制,避免
使用最新 111
9.3.4 将配置拆分为可重用的部分 112
9.4 交付最佳实践 113
9.4.1 流水线即代码 113
9.4.2 将每个构建都视为发布候选
版本 113
9.4.3 自动化测试和质量门禁 114
9.4.4 预览环境 114
9.5 安全最佳实践 115
9.5.1 软件制品的供应链级别 115
9.5.2 安全管理 115
9.5.3 不可变基础设施 115
9.6 更多最佳实践 116
9.7 案例研究 116
9.7.1 案例研究1:可口可乐阿根廷应用程序开发和产品交付 116
9.7.2 案例研究2:在Azure DevOps
上使用CI/CD流水线实现自动化
部署 117
9.7.3 案例研究3:在爱立信开发完整
的端到端CI/CD流水线 117
9.8 总结 118
第10章 持续交付的未来趋势 119
10.1 当前持续交付面临的主要挑战 119
10.2 功能的发展 120
10.3 架构的发展 122
10.4 运维的发展 123
10.5 采纳挑战和关键建议 124
10.6 总结 125
第11章 为开源生态系统做出
贡献 126
11.1 持续交付开源生态系统概述 126
11.2 开源许可 128
11.3 治理模型和成熟度级别 129
11.4 沙盒、孵化和毕业项目 131
11.5 如何成为持续交付开源生态系统
的贡献者 133
11.6 长期可持续性 134
11.7 云上持续交付项目的融资和
投资 135
11.8 资助开源项目的关键考虑因素 136
11.9 漏洞管理 137
11.10 总结 138
11.11 延伸阅读 138
第12章 实践作业 139
12.1 概述 139
12.2 案例研究 140
?12.2.1 案例研究的简短描述 140
?12.2.2 如何进行案例研究 140
?12.2.3 关于任务的更多内容 140
?12.2.4 关于可能的解决方案的更多
?内容 141
?12.2.5 相关的参考文献 141
12.3 任务1:业务对齐 141
?12.3.1 任务1的解决方案指南 141
?12.3.2 业务对齐 142
?12.3.3 战术协同 142
12.4 任务2:运维协同 143
12.5 任务3:技术架构与战略 144
12.6 任务4:使用云计算 145
12.7 任务5:先进技术 146
12.8 任务6:安全与合规 147
12.9 任务7:确定实施的工具和必要
服务 148
12.10 总结 149