在工作之前,曾经遇到过这么一个问题,和多个小伙伴一起开发,一个人负责了一大块的功能,最后在每个人完成各自的开发工作以后,集成成一个系统。
这真的是很痛苦的一件事情,没有任何的铺垫,一堆冲突,集成后也不知道系统是不是存在bug。
然而在真正工作以后,才发现了这些问题的正确打开方式。
持续集成是什么
Martin Fowler对持续集成(Continuous Integration)的定义:
Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible.Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
Martin Fowler对持续集成的内容概述:
Maintain a Single Source Repository.
Automate the Build
Make Your Build Self-Testing
Everyone Commits To the Mainline Every Day
Every Commit Should Build the Mainline on an Integration Machine
Fix Broken Builds Immediately
Keep the Build Fast
Test in a Clone of the Production Environment
Make it Easy for Anyone to Get the Latest Executable
Everyone can see what’s happening
Automate Deployment
1.统一的代码库。一个团队在开发过程中都需要一个代码库,每个人写的代码都更新到同一个代码库上。例如Github,Gitlab等,如此一来就需要版本管理工具例如git,svn等等。
2.自动构建。手动构建的代价太大,使用工具来自动构建。
3.自动测试。
4.每个人每天都要向代码库主干提交代码。
5.每次代码递交后都会在持续集成服务器上触发一次构建。
6.保证快速构建。
7.模拟生产环境的自动测试。
8.每个人都可以很容易的获取最新可执行的应用程序。
9.每个人都清楚正在发生的状况。
10.自动化的部署。
持续集成的好处
由上可知,持续集成的好处在于:
(1)快速发现错误。每个coder完成了一小段代码就更新集成到主干,如此一来可以快速的发现错误,并且定位错误,改正错误。
(2)使得代码不会大幅度的偏离主干。如果不经常集成代码,更新不快,最后集成的难度非常大。
(3)在任何时间、任何地点生成可部署的软件。对于客户来说,这便于持续交付。
(4)改善对进度的控制。每天都在集成,就可以看到当前各个功能的进度。
(5)更加充分地测试系统中的各个单元。
(6)与其它工具结合的持续代码质量改进。如使用CheckStyle, PMD, FindBugs, Fxcop等。
(7)便于Code Review。在每个build里,我们都可以知道与前一个build之间有什么改动,然后针对这些改动,我们就可以实施Code Review了。
(8)便于开发流程的管理。比如说,要把一个开发的build提交给测试组作测试,测完满意了,再提交到发布组去发布。
持续集成的目的,就是让产品可以保持高质量的快速迭代。
持续集成的工具
CI工具实现了每个开发人员提交代码的时候自动进行构建,包括代码审查、编译、测试、打包等操作。如此可以保证每次提交都是安全的。
CI工具还可以提供事件通知,生成报告等。例如当某一步构建失败了发送通知给指定的email、通过特定的设置发出声音等。
常见的工具有:
Jenkins
Go
Buildbot
持续集成的规则:
总结规则如下:
1)经常提交代码
2)不要提交无法构建的代码
3)构建失败时,立即修复
4)写自动化测试
5)必须通过所有测试和代码审查
6)执行私有构建
7)避免迁出无法构建的代码
遵循以上规则是为了提高CI持续集成成功率,及时修复build
参考文献:
Martin Fowler的Continuous Integration
持续集成是什么?
让你的CI跑起来
持续集成工具的作用