持续集成、持续交付、持续部署
1. 什么是持续集成(Continuous Integration)?
持续集成是指,频繁地将代码集成到主干上。
优点
- 快速发现错误。与一次性集成大量代码相比,每次更新一点,集成一点相当于将代码分成多个片段,有助于快速发现错误,定位错误,个人理解就相当于给代码打上断点,有助于错误的定位。
- 防止分支大幅度偏离主干,如果不经常集成,主干又频繁更新,会导致之后集成难度加大,甚至不能集成。
目的: 让产品可以快速迭代,同时还能保持高质量。
核心措施: 让代码集成到主干之前,必须通过自动化测试,只要有一个测试用例失败,则不能集成
2. 什么是持续交付(Continuous Delivery)?
持续交付是指,频繁地将软件的新版本交付给质量团队或者用户进行评审,如果评审通过,就进入代码生产阶段。
目的: 不管如何更新,代码始终保持在一个可以交付的状态
3. 什么是持续部署(Continous Deployment)?
持续部署是指:代码通过评审后自动部署到生产环境。
前提: 能够自动完成测试、构建、部署等操作
持续部署可以看作是持续交付的后续步骤,他们的区别在于:
持续交付在测试后需要手动部署,而持续部署在测试后会自动部署到生产环境。
他们三个的关系:
4. 流程
1)提交:以上的所有的流程均基于一次代码的提交操作,提交操作出发设置好的hook,进而执行后续的所有操作。
2)测试:对提交的代码进行测试。在第一次测试中,至少要进行单元测试。
- 单元测试:对函数或者模块进行测试
- 集成测试:对要实现的某个功能进行测试,也称为“功能测试”
- 端到端测试:从用户的角度出发,到底层的数据库的完全测试。
3)构建:把原始代码变为可执行代码的过程。
4)第二轮测试:至少包括单元测试和集成测试,有条件的情况下也要进行端到端测试。
5)部署:将所有相关文件打包归档,部署到生成环境服务器的过程。
在整个流程中,持续集成、持续交付和持续部署的概念分别体现为:
注意,这里第二次测试后需要能够实现自动化部署,方可成为持续集成,否则为持续交付的过程。
持续部署应该是整个流程完全的自动化实现。
另外,如果第一次测试进行了所有的测试,那么就可以省略第二次测试的步骤,那么构建的过程就应该移动到测试之前,则整个流程变为:
参考:https://www.ruanyifeng.com/blog/2015/09/continuous-integration.html
|