愿你坚持不懈,努力进步,进阶成自己理想的人

—— 2017.09, 写给3年后的自己

持续集成(Continuous Integration)的基础概念

一、持续集成的特点

  • 至少每日集成一次
  • 有助于快速解决问题
  • 不止一个过程


二、所谓持续,是至少每日集成一次

持续集成(Continuous Integration, CI)是一种开发实践,它要求开发者将 代码 在一日内集成到共享仓库一或多次,然后在每次集成时通过脚本自动地进行检查和校验,从而帮助团队在早期发现问题。通过常规的集成,我们可以快速地发现问题,并且更容易地定位问题


三、CI有助于快速解决问题

在频繁地进行集成时,CI可以显著地减少人工追溯和发现问题根源,因此开发者就能够将更多的精力用于开发功能特性上。所以,持续集成的代价是小的,而不采用持续集成的代价则是昂贵的。如果不采用持续集成,那么在代码集成的时候就会耗费更多的时间,并且在发现问题和解决问题的时候,这种困难可能是指数式地增长的,从而很容易导致项目延期甚至项目失败。所以,持续集成可以为团队代码如下的好处:

  • 告别又臭又长的代码集成过程
  • 提高构建过程的可见性,增强沟通
  • 容易抓住问题,并且将问题消灭在萌芽阶段
  • 花更少的时间在debug上面,更多的时间在实现功能特性上
  • 构建出一个坚实的架构基础
  • 不再需要停下开发工作,去测试代码是否能正常工作
  • 减少构建过程中的问题,有助于更快速地分发软件

正如ThoughtWorks的首席科学家Martin Fowler所言:

持续集成并不能够摆脱Bug,但是它却显著地可以让发现和移除bug的过程变得容易
Continuous Integration doesn’t get rid of bugs, but it does make them dramatically easier to find and remove.


四、CI不止一个过程

CI是由多个重要的原则实践支撑的:

1、重要实践

  • 维护一个单源仓库
  • 自动化构建
  • 构建过程可自动化测试
  • 每次提交都应该在持续集成机器上触发一次构建
  • 构建速度应该是快的
  • 能够在生产环境的克隆环境上进行测试
  • 能够容易获得最新的可执行版本
  • 能够看见构建过程
  • 自动化部署

2、怎么做?

  • 开发者将代码拉到私人工作区
  • 开发完成后,将变更提交到仓库里
  • CI服务器监测仓库,在有新的变更时能够触发一些行为
  • CI服务器构建项目代码,并且运行单元测试集成测试
  • CI服务器发布可部署的测试产品
  • CI服务器为刚刚构建完成的代码分配一个构建版本标签
  • CI服务器通知团队成员构建成功了
  • 如果构建或者测试失败了,CI服务器应该向团队成员告警
  • 团队成员尽早地修复构建中产生的问题
  • 在项目开发从始至终的过程中,继续持续集成

3、团队职责

  • 经常提交代码
  • 禁止提交出错的代码
  • 禁止提交未经测试的代码
  • 禁止提交构建失败的代码
  • 提交代码后,请在系统构建完成后再离开

4、持续部署

持续部署(Continuous Deployment)和持续集成是密切相关的,它指的是将通过自动化测试的软件发布到生产环境。持续部署的提出者Jez Humble解释到:”本质上来说,它(持续部署)就是把每个好的构建发布给用户的一种实践方式“
通过采用持续集成持续部署,我们不仅能够减少风险和快速地抓取bug,还能够快速地将重心转向软件开发中。带着低风险的发布,我们就能够更快速地响应商业需求和用户需求,这使得运维部署的协作更加惬意,这将为团队添砖加瓦,加快发布进程,带来商业竞争优势

参考资料