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

CI(Continuous integration)/CD(Continuous delivery)在自己早期做测试工作的时候就有接触到,但是一直没有专门去关注和梳理过。

后来看到过几篇关于这方面很不错的文章,就想着正好梳理一下这块的知识,同时方便自己理解。

一、持续集成

1.概念

  持续集成指的是,频繁地将代码集成到主干。开发人员提交了新代码之后,立刻进行构建和单元测试。

好处有两个:

(1)尽早发现错误

  每完成一点更新,就集成到主干,并进行相应的测试,可以快速发现错误,方便定位原因,提高提测质量。

(2)防止分支大幅度偏离主干

  在频繁集成的过程中保证主干不会发生大的变化,方便后续集成

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。

它的核心措施就是,代码集成到主干之前,必须通过CI自动化测试。只要有一个测试用例失败,就不能集成。

持续集成并不能消除Bug,而是让它们非常容易发现和改正。

2.常用工具Jenkins

Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。

Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。

通常与版本管理工具(SCM)、构建工具结合使用。常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

3.持续集成的要素

  统一的代码库:GIT、SVN

  自动构建,自动化测试(CI脚本)

  每个人每天都向代码库提交代码(提交release)

  每次代码提交后都会在持续集成服务器触发一次构建

  保证快速构建

  模拟生产环境的自动化测试

  每个人都可以很容易的获取到最新的代码(get master)

  每个人都清楚正在发生的情况

  自动化的部署

4.持续集成的原则

  所有开发人员需要在本地机器上做本地构建,然后提交到版本控制库中,从而确保他们的更改不会导致持续集成失败

  开发人员每天至少向版本库提交一次代码

  开发人员每天至少需要从版本库中更新一次代码到本地机器

 

5.持续集成流程

  提交代码->拉取代码->编辑->打包->测试->反馈问题->开发处理->提交代码  ......

二、持续交付

持续交付指的是,在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的“类生产环境/预生产环境”中。

持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件都是随时随地可以交付的。

持续交付优先于整个产品生命周期的软件部署,建立在高水平自动化持续集成之上。
 

三、持续部署

持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

持续部署的前提是能自动化完成测试、构建、部署等部署。它其实是属于一种更高。

持续部署的好处是,可以相对独立的部署新的功能,并能够快速地收集真实用户的反馈。

一张图可以更好的说明整体流程

编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署

总结

「持续集成(Continuous Integration)」、「持续交付(Continuous Delivery)」和「持续部署(Continuous Deployment)」提供了一个优秀的 DevOps 环境,
频繁部署、快速交付一级开发测试流程自动化都将成为未来软件工程的重要组成部分。
 
 
参考文章:

http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html


最懒的人就是整天忙得没时间学习、反思、成长的人。
原文地址:https://www.cnblogs.com/jockeyhao/p/14385386.html