CI简介

什么是CI

CI(Continuous Integration):持续集成
Martin Fowler的定义:

  • 一种软件开发实践,即团队的成员经常集成他们的工作,通常每个成员每天至少集成一次一一这导致每天发生多次集成。每次集成都通过自动化的构建(包括测试)来验证,从而尽快地检测出集成错误。许多团队发现这个过程会大大减少集成问题,让团队能够更快地开发内聚的软件。本质上说,持续集成就是通过快速的反馈降低风险。

 

从定义中我们知道什么

  1. 所有开发者都先要在他们自己的工作站上执行私有构建,然后再将他们的代码提交到版本控制库中,从而确保他们的变更不会导致集成构建的失败。
  2. 开发者每天至少向版本控制库提交一次代码
  3. 集成构建每天在一台独立的计算机上进行多次
  4. 每次构建都必须100%通过测试
  5. 生成可以进行功能测试的产品(如WAR,配件,可执行程序等)
  6. 修复失败的构建是优先级最高的事情
  7. 某些开发者复查构建生成的报告,如编码标准报告和依赖分析报告,寻找可以改进的地方

 

CI的价值

  1. 减少风险
    • 缺陷的检测和修复变得更快
    • 软件的健康程度可以测量
    • 减少假定
  2. 减少重复过程,通过自动化的CI,能够确保
    • 每次都以相同的方式执行该过程
    • 遵循有序的过程
    • 每次将变更提交到版本控制库中,就会执行这些过程
  3. 可以在任何时间发布可以部署的软件
  4. 增强项目的可见性
  5. 建立起更强大的产品中心

 

什么阻碍了团队使用CI

  1. 增加了维护CI系统的开销
  2. 变化太大(老项目需要改变太多来适应CI)
  3. 失败的构建太多
  4. 额外的软件/硬件成本
  5. 开发者应该执行这些动作

 

Steps of CI

  1. 从版本控制库中签出源代码
  2. 修改代码
  3. 在本地执行私有构建
  4. 出现错误,跳至2
  5. 单元测试
  6. 单元测试失败,跳至2
  7. 重新构建,根据标准增强可读性
  8. 签入代码
  9. CI检测到变化并自动获取源代码
  10. CI系统编译源代码
  11. 执行单元测试,特性检测,集成测试和其它测试
  12. CI系统向相关人员反馈构建信息
  13. 构建成功,可以部署,否则跳至2

 

对CI有利的习惯

  1. 经常提交代码
  2. 不要提交无法构建的代码
  3. 立即修复无法集成的构建
  4. 编写自动化的开发者测试
  5. 必须通过所有测试和审查
  6. 执行私有构建

 

CI资源

  1. CI 产品:AnthillPro,Apache Contium, Bamboo BuildForge,Continuous Integration,Sever Matrix,Cruise Control, Cruise Control.NET,Sin…
  2. 构建脚本:Ant,Groovy,Maven,NAnt,Rake
  3. 版本控制系统:ClearCase,MKS,CVS,Subversion,Git
  4. 测试资源:Agitator,DbUnit,FitNesse,Floyd,HtmlUnit,JUnit,SQLUnit
  5. 自动化测试:Checkstyle,Clover,Cobertura,EMMA,PMD
  6. 部署资源:Capistrano,Jenkins,Hudson
  7. 文档资源:Doxygen,JavaDoc,NDoc

Reference:jenkins-the-definitive-guide

发表评论

电子邮件地址不会被公开。