持续集成/持续交付/持续部署
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.持续集成流程
提交代码->拉取代码->编辑->打包->测试->反馈问题->开发处理->提交代码 ......
二、持续交付
持续交付指的是,在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的“类生产环境/预生产环境”中。
持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件都是随时随地可以交付的。
三、持续部署
持续部署是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。
持续部署的前提是能自动化完成测试、构建、部署等部署。它其实是属于一种更高。
持续部署的好处是,可以相对独立的部署新的功能,并能够快速地收集真实用户的反馈。
一张图可以更好的说明整体流程
编码 -> 构建 -> 集成 -> 测试 -> 交付 -> 部署
总结
http://www.ruanyifeng.com/blog/2015/09/continuous-integration.html