DevOps关键能力之持续交付 - 新书预览《加速:精益软件和DevOps的科学》
“ 持续交付需要哪些关键能力呢?”
本文是重磅新书《加速》读后感系列文章DevOps需要哪些关键能力?新书预览《加速:精益软件和DevOps的科学》的续篇。在前文中,我们提到DevOps有24个关键能力。
而其中,有8个关键能力是关于持续交付的。这些能力将赋能我们更安全、更快和更持续地把新的特性、缺陷修复以及试验代码交付到生产环境和用户手中。
01
—
持续交付的5个核心原则
-
内建质量
把质量一开始就内建在软件产品中。
-
小批量
把大而全的需求拆分成更小的、可度量其价值的小需求,以便我们可以更快地获取用户反馈并及时修正,和降低每次的变更成本。
-
电脑执行重复性的工作,人来解决问题
如果重复性工作可以被自动化,将赋能人们去聚焦在更有价值的、解决问题的事情上。
-
无休止地追求持续改进
高效能的团队对变得更好的追求是永无止境的,他们总是把改进变成日常。
-
每个人都有担当和负起责任
02
—
实施持续交付的要求
-
完善的配置管理
尽可能把所有配置都通过版本控制器来管理,并自动化服务器环境的预备以及软件的构建、测试和部署。
-
持续集成
高效能团队会尽力缩短代码分支存在的周期(最好少于1天),并迅速地把分支合并到主干中。
-
持续测试
测试是必须的,而且是持续性的。它是开发过程的一部分,并通过自动化给予开发人员即时的质量反馈。
03
—
关键能力
-
版本化一切构件
版本控制器应该用于管理所有构件,包括脚本、代码和配置,以便于自动化构建和配置环境。
-
自动化部署
自动化所有部署工作,过程不需要人工干预。
-
实施持续集成
持续集成是持续交付的第一步。它通过监控代码提交行为并触发一系列的快速测试来暴露回归问题。一旦发现回归问题,开发人员可以快速修复,从而增强软件的质量。
-
基于主干的开发
尽量保持最少和最短的分支(最好少于1天),并频繁地合并到主干中。这样将大大避免合并冲突,减少代码锁定周期。
-
实施测试自动化
只有通过可靠的自动化测试的代码才能上线。开发人员的首要责任是构建和维护自动化的验收测试。
测试驱动编程强制开发人员编写可测试的代码并让他们对这些测试代码负责。相对于繁文缛节的测试文档,他们也更有兴趣来维护和修复这些测试代码。
测试工程师依然重要,他们执行自动化测试未能覆盖的人工测试,并帮助开发人员补充和完善他们的自动化测试。
-
测试数据管理
当构建自动化测试时,管理与之配套的测试数据也是完整的自动化测试的一部分。因此,开发人员必须设法把测试数据的准备过程也自动化了。
-
安全左移
把安全评审和安全测试嵌入到持续集成中。传统的安全评审和安全测试是在软件开发完成后才进行的,这将不可避免地带来大量的返工工作。而且,一旦交付变得频繁,安全团队也没有能力及时跟进安全评审,所以软件安全性必须内建在开发过程中。
-
实施持续交付
实施持续交付意味着构建多个的反馈环,以确保高质量的软件可以更频繁、更可靠地交付给用户,最终实现按需发布。
一旦团队在实践持续交付,发布上线就不再是大型的一次性活动,而是在上班时间内的常规工作。持续交付帮助我们实现敏捷宣言的12原则之一: 敏捷过程提倡可持续的开发,项目方、开发人员和用户应该能够保持恒久稳定的进展速度。
实施持续交付所需要的各种实践,需要我们重新思考团队是如何工作的和团队成员如何交互,以及有哪些工具和流程是需要的。测试、部署自动化也有赖于不断简化的系统架构,以避免自动化过于复杂和昂贵,无法启动和维护。
因此,实现持续交付的其中一个关键障碍是企业和系统的架构。我将在后续的文章对这个主题及其相应的关键能力进行探讨。敬请留意后续文章。
部分内容翻译自Ariana Brighenti@HSBC的撰文。