持续集成及反模式 �
张凯峰 �
1
关于我 �
ThoughtWorks中国公司高级软件咨询师
InfoQ中文站资深编辑
技术图书译者
2
议题 �2007. 01
持续集成的概念
持续集成反模式
3
持续集成 �
区别于传统的在开发完成后才开始质量控制
和集成的方式,持续集成实现了频繁的、增
量的软件质量控制,从而提高软件质量,缩
短软件发布的周期。 � � �《持续集成》第二版,译者:雷镇,作者:Martin Fowlerhttp://article.yeeyan.org/view/2251/94882
�4
传统的集成存在什么问题 �
• 用大量的时间集成不同来源的代码
• 集成时间甚至长于开发时间
• 每个人都要花很大的力气才能构建系统
• 发布在即,bug却越来越多
• ……
5
主干质量不稳定 �
不想不敢更新代码 �
本地代码堆积很久才进行集
成 �
集成时问题多、时间长 �
容易引入Bug �
于是… �
6
究其根源 �
• 缺乏有效的反馈手段,集成过程不透明、缺乏管理
• 对当前主干质量情况缺乏一个基本认识
• 集成频率太低。一次集成太多内容导致成本高、时
间长、容易出错7
错误及时得到修复 �
每次集成成本低,出错几率
小 �
主干质量稳定 �
小步频繁集成,快速反馈 �
如果引入持续集成… �
尽早修复Bug �
8
持续集成是一种软件开发的实践。通过这个实践团队
的成员频繁整合他们的工作,通常每人每天至少集成
一次,通过不断地练习,最终达到每日多次集成。每次集成
通过自动化的编译和测试等手段进行验证,来达到尽快
发现集成错误的目的。9
一次成功的持续集成 �
�
�
�
�
�
《持续集成理论和实践的新进展》,肖鹏
http://www.infoq.com/cn/articles/ci-theory-practice
�10
持续集成的原则 �
• 只维护一个源代码库
• 自动化构建
• 自动化测试
• 每人每天向代码主线提交代码
• 每次提交触发构建
• 保持快速构建
• 在模拟生产环境下测试
• 每个人可轻易获得最新的可执行文件
• 每个人都能看到进度
• 自动化部署11
持续集成平台 �
• Jenkins/Hudson
• TeamCity
• ThoughtWorks Go
12
持续集成的反模式 �
• 标准化类反模式
• 自动化类反模式
13
反模式一:非最小依赖 �
• 需要开发者定义和配置环境变量
• 需要开发者安装大量工具才能构建14
模式一:最小依赖 �
• 将需要预安装的工具减至最少
• 将构建和部署所需环境配置减至最少
• Tips – 自动化建立依赖的过程
– 制作镜像
15
反模式二:只能在个别机器上构建 �
“在我的机器上构建没有问题啊!”16
模式二:在独立专用的机器上构建 �
• 选择CI服务器需要考虑 – 集成版本控制系统 – 集成构建工具 – 反馈和报告
17
反模式三:非独立构建 �
• 自动构建依赖IDE的设置 • 无法从命令行开始构建
18
模式三:独立构建 �
• 与IDE分离的构建脚本 �• CI可以调用命令行开始构建 �
19
反模式四:通过文件系统管理和共享文件 �
• 在团队成员机器上管理文件
• 通过文件系统共享 20
模式四:所有文件版本化 �
• 由版本控制系统管理文件
• 授权访问给特定用户
21
反模式五:积攒大量的代码质量问题 �
• 等待大量的代码问题爆发
• 增加维护的成本
• 影响既有的功能实现
22
模式五:构建的阈值 �
• 构建时检查
– 代码测试覆盖率
– 代码圈复杂度
• 让构建失败,并通知开发团队
23
反模式六:弱反馈 �
• 很少的反馈
• 垃圾邮件反馈
24
模式六:持续反馈 �
• CI发布持续、自动的反馈 • 不同的反馈方式: – 反馈屏幕 – 邮件 – RSS
25
反模式七:手动参与构建过程 �
• 手工不断重复同样的构建
• 部分自动构建,需要额外的手工配置
26
模式七:构建过程全部自动化 �
• 从源代码开始,完全自动化构建 • 创建不依赖IDE的构建脚本,能从命令行调用
27
反模式八:耗时的人工代码审查 �
• 专门的代码审查会议
• 无视代码审查
28
模式八:自动代码审查 �
• 运行自动代码分析找到通常问题
• 代码分析作为自动构建的一部分
29
反模式九:没有自动化测试 �
• 不运行测试
• 没有回归测试
• 人工测试
30
模式九:自动化测试 �
• 回归测试
• 自动化构建的重要部分
31
总结 �
• 每个团队有最适合自己的持续集成方式
• 不为了持续集成而持续集成32