——大型软件开发的效能提升之路
持续集成是本世纪初提出的一种软件大规模开发的快速交付模式。其核心内容在于快速提交、快速测试、快速失败以及快速修复。团队的开发人员,将一个软件的代码提交到中心代码仓库后,通过自动化的方式自动进行代码检测、单体测试以及集成测试等,并第一时间将结果告知团队人员,如果出现异常,则提示团队人员快速修复问题。通过这种快速循环的方式,保证团队能够在较短时间内,快速交付需求。这样一个完整的过程,被称之为持续集成。
一、为什么要做持续集成
从大学时期,我们就学习到,现代的软件开发已经不是单纯的个人技术叠加,而是从个人行为转化为了团队行为,从单纯的技术堆叠转化为了体系化的工程构建。而软件开发工程化带来的核心诉求就是对于目标、风险和成本的管控。
这里只有目的是正向因素,而风险和成本都是负向因素。
我们目标可以包括:
需求响应
产品交付
用户支持
我们的风险包括:
系统集成失败
代码冲突
问题不能在开发阶段暴露
……
我们的成本包括:
缓慢的构建和部署过程
冲突的构建和部署环境
研发人员之间的理念冲突
……
而这些复杂的问题,都必须通过软件工程这个过程来尽量放大正向因素,降低和消除负向因素,正是因为这样的原因,才发展出了现在的CI理论。
二、如何做CI
既然已经明确了做CI的含义和目的,那么如何做CI就非常清晰了。简而言之,CI就是通过标准化的流程设计和实施,最大化软件工程的正向因素的比重,最小化软件工程中的负向因素,以求达到最高效能结果的过程。
具体如何执行CI,针对不同的应用开发诉求,其采取的具体方式是具有差异性的,但从大的方面来说,都应该包含以下几个方面的内容:
灵活的代码管理机制;
严格的代码和应用包的提交流转体系;
隔离的独立开发构建环境和模式支撑;
高效自动的构建和测试机制;
自动化的版本管理机制;
严格被约束的应用发布管理机制;
通过以上的策略,我们可以做到:
把一个无序软件开发流程约束到一个严密可控的高效流程管道中;
流程的每一个节点都具有其特定的职责意义;
将软件开发中不可预知的各种风险和成本透明化;
提前暴露问题;
产品信息最大限度对所有人透明化;
工程人员间沟通成本最小化;
CI的过程就是标准化的过程,而这过程如何实现并没有标准定义,就如果标准的建立和实现的差异一样,如何实现这样的标准,每个软件工程的参与者都是可以共建的。
三、常见的持续构建工具
狭义的持续构建,常见的工具如下:
Jenkins
Travis
Codeship
Strider
几种工具各有优缺点,通常我们使用Jenkins。
从广义的来讲,我们可以以以下这些工具来完成CI过程:
Git
Jenkins
Sonar
包管理系统
自动化测试工具
版本管理系统
参考文献:
Continuous Integration
浅谈持续集成