持续集成是什么?

发表于:2017-04-24来源:juejin作者:Surmon点击数: 标签:持续集成
持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作代码,每个成员每天至少集成一次,也可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动

互联网软件的开发,已经成熟、标准化,其中最重要的组成部分就是持续集成(Continuous integration,简称CI)。

持续集成是一种软件开发实践,即团队开发成员经常集成它们的工作代码,每个成员每天至少集成一次,也可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成BUG,并解决。

简单说就是:

频繁地提交代码,集成进主干分支,及早发现问题,并解决。

举个例子:

  1. 公司某项目在代码仓库存在三个分支:dev(开发分支)、master(主干分支)、release(预发布分支)
  2. 开发组有两个以上的人员在分别开发A、B、C...等不同的功能模块
  3. 每个开发人员完成自身某个功能模块的开发后,需要将本地检验合格的代码push到dev分支,
  4. 代码仓库配置的webhooks会根据commit动作回调测试服务器,测试服务器对提交的代码进行单元测试
  5. 单元测试通过,则集成进主干分支;不通过则不集成,并通知生成方完善处理
  6. 集成进主干分支后,主干分支进行编译、构建(主要包含环境配置、安装依赖、资源整理)
  7. 构建完成,进行集成测试(整体测试 [, 端对端测试]),测试通过则将主干分支合并至预发布分支(release)
  8. 合并至预发布分支后,预发布分支根据实际需求选择是否直接实施部署
  9. 如果部署,则部署服务器则会将最新预发布分支的代码,打包为当前版本,并推送至生产服务器
  10. 生产服务器解压最新代码包至指定目录,修改程序的路径指向最新代码目录,并重载生产服务
  11. 如若出现异常,生产服务器则直接将程序路径指向上一个版本的目录,进行回滚

如上所述,一个完整的持续集成流程至少需要包含: 测试服务 、 部署服务 、 生产服务 三部分;

单元测试、集成测试、功能测试这些自动化测试方法,是项目持续部署的基础,大部分测试都应该是自动化完成的,自动化测试覆盖不到的,应由人工测试;

原文转自:https://juejin.im/post/58f9ee860ce46300611be392