读书笔记:持续交付
文章目录
介绍
软件发布是一个令人头痛的过程,非常耗时且风险很高。本书独特而有条理地阐述了以快速、高效、可靠的方式向用户交付新功能的原则和技术实践。通过实现自动化的构建、部署和测试过程,并改进开发人员、测试人员、运维人员之间的协作,交付团队可以在几小时(甚至几分钟)内发布软件变更,而这不受项目大小和代码复杂性的影响。
——《持续交付》
不论你在什么样的团队,都需要为用户提供价值,即交付可用的软件。而这就是一本讲述如何高效交付软件的书。
Git 的多分支开发是邪恶的! 想知道为什么吗?直接看 分支开发的问题。
副标题
- 英文版副标题:Reliable Software Releases through Build, Test, and Deployment Automation
- 中文版副标题:发布可靠软件的系统方法
我非常喜欢中文版的副标题,精准地概括了本书的全部内容,而英文版只是阐述了一个流程。感觉是缺少了这个更深层次的含义:系统化的方法。
软件交付的问题
- 反模式:手工部署软件
- 反模式:开发完成之后才向类生产环境部署
- 反模式:生产环境的手工配置管理
这些反模式是真的发生在现实工作当中的例子,有可能你现在还在经历这种事情……
软件交付的原则
- 为软件的发布创建一个可重复且可靠的过程
- 将几乎所有事情自动化
- 把所有的东西都纳入版本控制
- 提前并频繁地做让你感到痛苦的事
坚持这些原则可以解决大多数问题。
依赖管理
需要记录所有的依赖版本,甚至包括操作系统。以前我也觉得这个没什么用,直到遇到了 Unity 5.3 不支持 macOS Mojave 的 APFS 文件系统,这才意识到这是多么重要的事情。
- 例如现在各大操作系统都抛弃了对 Python 2.x 的支持。
- macOS Catalina 取消了 32 位程序的支持。
构建与部署的脚本化
构建脚本需要使用胶水语言,需要这个语言支持跨平台、生态完善、简单易用。
说实话,Python 真是不二之选,第三方的生态实在是太完善了,你可以找到任何你需要的功能,例如:操作进程的跨平台库、各种 JSON YAML 之类的解析库、FTP 支持、SSH 支持等等……
而其他的 JavaScript、Lua、Ruby、Perl、Shell 都各有各的问题,难堪大用。
分支开发的问题
由于 Git 的流行,现在大部分人最常遇到的问题是如何做分支开发,持续集成如何与不同分支结合在一起使用。
首先要明白,项目需求决定了集成工作量。分支只是将项目需求及对应的集成工作量延迟了,最终分支在合并到主干时集成工作才开始。
同样的需求会有同样的集成工作量,不管是在主干上还是分支上,只不过在分支上开发会推迟集成工作,但不会减少集成工作量。
而这就是为什么很多团队一发布版本就要通宵加班的原因,因为有大量的集成工作需要在发布版本时处理。 这样的团队往往是坚定的多分支开发拥护者,坚定地要求主干与发布分支完全分离,发布分支上的提交必须经过拣选手动从主干合并到发布分支。
这时,主干开发就可以帮忙解决问题了,将大部分工作放在主干上提交,可以保证代码被持续集成、开发人员及时获得他人的修改、避免项目后期的“合并地狱”和“集成地狱”。 同时主干开发也给出了如何不用分支也可以做复杂修改的方法。同时也给出了按发布创建分支的最佳实践方法,主干开发并不是排斥分支,只有当不需要合并回主干时才创建分支。
可惜的是主干开发是 14.6 节,几乎在书的最末尾,很少有人能读完全书看到这个重要的东西。
心得
你能控制的越多,越能系统性的解决问题,越能从更高的层面解决问题,越能轻松且正确地解决问题。如果你权限有限,那么很难实行持续交付。
持续交付的思想就是增加快速迭代反馈的能力。其实核心非常简单,简单说就是及时做该做的工作、不要推迟,持续集成、主干开发就是这个思路的产物。
京东购买链接
如果你对持续集成、持续交付感兴趣,如果你想要在全栈工程师,那么这是一本必读的书:
现实
看完这本书,你就能轻松地回答下面这些人们在现实中遇到的问题了:
- 请教大家 master 分支和 release 分支有什么区别, - V2EX
- 使用 git 管理代码,开发分支和线上分支有不同文件,如何处理 - V2EX
- 请教大家有关 git 工作流的问题 - V2EX
- 多人开发同一个项目且每人进度不一样,上线时间不一样 git 应该使用什么样的流程? - V2EX
- git 搞分支的问题 - V2EX
- 小白求助,大家开发的时候 会在 git 仓库上维护多个分支吗,另外提交代码是在开发机上,还是在本地笔记本呢 - V2EX
- 请教大家一个 git 合并的问题 - V2EX
使用关键词 分支 部署 site:v2ex.com 可以用 Google 找到更多相关结果。
哪怕不看这本书,你也可以浏览一下上面的链接,看看能不能想清楚如何解决他们提出的问题。