SlideShare a Scribd company logo
1 of 33
Download to read offline
持续集成及反模式	


   张凯峰	





              1	
  
关于我	


ThoughtWorks中国公司高级软件咨询师

InfoQ中文站资深编辑

技术图书译者




                          2	
  
议题	

2007. 01




       持续集成的概念

           持续集成反模式



                     3	
  
持续集成	


区别于传统的在开发完成后才开始质量控制
和集成的方式,持续集成实现了频繁的、增
量的软件质量控制,从而提高软件质量,缩
短软件发布的周期。
	

	

	

《持续集成》第二版,译者:雷镇,作者:Martin Fowler
http://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	
  
谢谢	
  


         33	
  

More Related Content

What's hot

VSCode Remote Development
VSCode Remote DevelopmentVSCode Remote Development
VSCode Remote DevelopmentPhilip Zheng
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)Jeff Chu
 
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open CampAndrew Wu
 
PyCon China 2012 孙毅
PyCon China 2012 孙毅PyCon China 2012 孙毅
PyCon China 2012 孙毅Yi Sun
 
SITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with WebpackSITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with Webpack昱安 周
 
Scrum深入淺出
Scrum深入淺出Scrum深入淺出
Scrum深入淺出Taien Wang
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版Kirk Chen
 
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構Andrew Wu
 
互联网持续交付整形记
互联网持续交付整形记互联网持续交付整形记
互联网持续交付整形记Ryan YU
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作Philip Zheng
 
VSCode Remote Development 介紹
VSCode Remote Development 介紹VSCode Remote Development 介紹
VSCode Remote Development 介紹Philip Zheng
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計Andrew Wu
 
我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離Edward Kuo
 
SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17 SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17 twMVC
 
James-版本控制
James-版本控制James-版本控制
James-版本控制Study4TW
 
twMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC
 
微服務對IT人員的衝擊
微服務對IT人員的衝擊微服務對IT人員的衝擊
微服務對IT人員的衝擊Philip Zheng
 
十二項架構設計原則
十二項架構設計原則十二項架構設計原則
十二項架構設計原則Philip Zheng
 
十分鐘上手 I os jenkins ci
十分鐘上手 I os jenkins ci十分鐘上手 I os jenkins ci
十分鐘上手 I os jenkins ciTing-Yen Kuo
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)Will Huang
 

What's hot (20)

VSCode Remote Development
VSCode Remote DevelopmentVSCode Remote Development
VSCode Remote Development
 
領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)領域驅動設計 (Domain Driven Design)
領域驅動設計 (Domain Driven Design)
 
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp微服務架構 導入經驗分享 吳剛志 - Community Open Camp
微服務架構 導入經驗分享 吳剛志 - Community Open Camp
 
PyCon China 2012 孙毅
PyCon China 2012 孙毅PyCon China 2012 孙毅
PyCon China 2012 孙毅
 
SITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with WebpackSITCON 2016 ─ Modern Front-End Workflow with Webpack
SITCON 2016 ─ Modern Front-End Workflow with Webpack
 
Scrum深入淺出
Scrum深入淺出Scrum深入淺出
Scrum深入淺出
 
持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版持續交付高品質程式碼 公開版
持續交付高品質程式碼 公開版
 
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構與大師對談: 轉移到微服務架構必經之路~ 系統與資料庫重構
與大師對談: 轉移到微服務架構必經之路 ~ 系統與資料庫重構
 
互联网持续交付整形记
互联网持续交付整形记互联网持续交付整形记
互联网持续交付整形记
 
桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作桃園市教育局Docker技術入門與實作
桃園市教育局Docker技術入門與實作
 
VSCode Remote Development 介紹
VSCode Remote Development 介紹VSCode Remote Development 介紹
VSCode Remote Development 介紹
 
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
大規模微服務導入 - #2 從零開始的微服務 .NET Core 框架設計
 
我們與Azure DevOps的距離
我們與Azure DevOps的距離我們與Azure DevOps的距離
我們與Azure DevOps的距離
 
SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17 SignalR實戰技巧 twmvc#17
SignalR實戰技巧 twmvc#17
 
James-版本控制
James-版本控制James-版本控制
James-版本控制
 
twMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 LogtwMVC#36讓 Exceptionless 存管你的 Log
twMVC#36讓 Exceptionless 存管你的 Log
 
微服務對IT人員的衝擊
微服務對IT人員的衝擊微服務對IT人員的衝擊
微服務對IT人員的衝擊
 
十二項架構設計原則
十二項架構設計原則十二項架構設計原則
十二項架構設計原則
 
十分鐘上手 I os jenkins ci
十分鐘上手 I os jenkins ci十分鐘上手 I os jenkins ci
十分鐘上手 I os jenkins ci
 
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)全新 Windows Server 2019 容器技術及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
全新 Windows Server 2019 容器技術 及邁向與 Kubernetes 整合之路 (Windows Server 高峰會)
 

Similar to 持续集成中的反模式

Continuous integration
Continuous integrationContinuous integration
Continuous integrationnetdbncku
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文Shuyong Lin
 
Continuous Delivery: automated testing, continuous integration and continuous...
Continuous Delivery: automated testing, continuous integration and continuous...Continuous Delivery: automated testing, continuous integration and continuous...
Continuous Delivery: automated testing, continuous integration and continuous...Jimmy Lai
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介pan weizeng
 
李成银:前端编译平台
李成银:前端编译平台李成银:前端编译平台
李成银:前端编译平台taobao.com
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAEq3boy
 
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)jalamar
 
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)LetAgileFly
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
網站上線了,然後呢?
網站上線了,然後呢?網站上線了,然後呢?
網站上線了,然後呢?Kirk Chen
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究pop2008
 
持续交付的魅力
持续交付的魅力持续交付的魅力
持续交付的魅力Qiao Liang
 
Heat在企业中的应用实践
Heat在企业中的应用实践Heat在企业中的应用实践
Heat在企业中的应用实践xuanlangjian
 
Git&Github Tutorial
Git&Github TutorialGit&Github Tutorial
Git&Github TutorialTing Wen Su
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发Trinea Trinea
 
Open cdn快速部署你的私有cdn集群
Open cdn快速部署你的私有cdn集群Open cdn快速部署你的私有cdn集群
Open cdn快速部署你的私有cdn集群
 
持续集成中的六步提交
持续集成中的六步提交持续集成中的六步提交
持续集成中的六步提交Qiao Liang
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述pop2008
 

Similar to 持续集成中的反模式 (20)

Continuous integration
Continuous integrationContinuous integration
Continuous integration
 
敏捷自动化测试中的教训 45min 中文
敏捷自动化测试中的教训 45min   中文敏捷自动化测试中的教训 45min   中文
敏捷自动化测试中的教训 45min 中文
 
Continuous Delivery: automated testing, continuous integration and continuous...
Continuous Delivery: automated testing, continuous integration and continuous...Continuous Delivery: automated testing, continuous integration and continuous...
Continuous Delivery: automated testing, continuous integration and continuous...
 
美团前端架构简介
美团前端架构简介美团前端架构简介
美团前端架构简介
 
李成银:前端编译平台
李成银:前端编译平台李成银:前端编译平台
李成银:前端编译平台
 
Nodejs & NAE
Nodejs & NAENodejs & NAE
Nodejs & NAE
 
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_ 敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
 
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
Scrum gathering 2012 shanghai_敏捷测试与质量管理分会场演讲话题:快速可持续的高质量发布(路宁)
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
網站上線了,然後呢?
網站上線了,然後呢?網站上線了,然後呢?
網站上線了,然後呢?
 
网站前端代码静态检查工具研究
网站前端代码静态检查工具研究网站前端代码静态检查工具研究
网站前端代码静态检查工具研究
 
持续交付的魅力
持续交付的魅力持续交付的魅力
持续交付的魅力
 
Heat在企业中的应用实践
Heat在企业中的应用实践Heat在企业中的应用实践
Heat在企业中的应用实践
 
Git&Github Tutorial
Git&Github TutorialGit&Github Tutorial
Git&Github Tutorial
 
姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发姚彤 从360手机卫士的研发经历看大型移动应用开发
姚彤 从360手机卫士的研发经历看大型移动应用开发
 
Open cdn快速部署你的私有cdn集群
Open cdn快速部署你的私有cdn集群Open cdn快速部署你的私有cdn集群
Open cdn快速部署你的私有cdn集群
 
持续集成中的六步提交
持续集成中的六步提交持续集成中的六步提交
持续集成中的六步提交
 
网站前端代码静态检查工具综述
网站前端代码静态检查工具综述网站前端代码静态检查工具综述
网站前端代码静态检查工具综述
 

持续集成中的反模式