持续集成、持续交付、持续部署


文章目录

  • 持续集成、持续交付、持续部署
  • 1. 什么是持续集成(Continuous Integration)?
  • 2. 什么是持续交付(Continuous Delivery)?
  • 3. 什么是持续部署(Continous Deployment)?
  • 4. 流程


1. 什么是持续集成(Continuous Integration)?

持续集成是指,频繁地将代码集成到主干上。

优点

  • 快速发现错误。与一次性集成大量代码相比,每次更新一点,集成一点相当于将代码分成多个片段,有助于快速发现错误,定位错误,个人理解就相当于给代码打上断点,有助于错误的定位。
  • 防止分支大幅度偏离主干,如果不经常集成,主干又频繁更新,会导致之后集成难度加大,甚至不能集成。

目的: 让产品可以快速迭代,同时还能保持高质量。

核心措施: 让代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,则不能集成

2. 什么是持续交付(Continuous Delivery)?

持续交付是指,频繁地将软件的新版本交付给质量团队或者用户进行评审,如果评审通过,就进入代码生产阶段。

目的: 不管如何更新,代码始终保持在一个可以交付的状态

3. 什么是持续部署(Continous Deployment)?

持续部署是指:代码通过评审后自动部署到生产环境。

前提: 能够自动完成测试、构建、部署等操作

持续部署可以看作是持续交付的后续步骤,他们的区别在于:

持续交付在测试后需要手动部署,而持续部署在测试后会自动部署到生产环境。

他们三个的关系:


持续集成 持续部署 持续集成与持续部署_持续集成 持续部署

4. 流程


持续集成 持续部署 持续集成与持续部署_ci_02

1)提交:以上的所有的流程均基于一次代码的提交操作,提交操作出发设置好的hook,进而执行后续的所有操作。

2)测试:对提交的代码进行测试。在第一次测试中,至少要进行单元测试。

  • 单元测试:对函数或者模块进行测试
  • 集成测试:对要实现的某个功能进行测试,也称为“功能测试”
  • 端到端测试:从用户的角度出发,到底层的数据库的完全测试。

3)构建:把原始代码变为可执行代码的过程。

4)第二轮测试:至少包括单元测试和集成测试,有条件的情况下也要进行端到端测试。

5)部署:将所有相关文件打包归档,部署到生成环境服务器的过程。

在整个流程中,持续集成、持续交付和持续部署的概念分别体现为:

持续集成 持续部署 持续集成与持续部署_cd_03

注意,这里第二次测试后需要能够实现自动化部署,方可成为持续集成,否则为持续交付的过程。

持续部署应该是整个流程完全的自动化实现。

另外,如果第一次测试进行了所有的测试,那么就可以省略第二次测试的步骤,那么构建的过程就应该移动到测试之前,则整个流程变为:

持续集成 持续部署 持续集成与持续部署_ci_04

参考:https://www.ruanyifeng.com/blog/2015/09/continuous-integration.html