持续集成、持续部署、持续交付三个概念的辨析
持续集成、持续部署、持续交付这三个概念是软件开发活动中的三种实践方法,它们之间是有一点的关系的,这里做一个辨析。
目录
1、集成、部署、交付的概念
2、理解持续集成、持续部署、持续交付
3、自动化地持续集成、持续部署、持续交付
1、集成、部署、交付的概念
=======================
集成是指软件团队中的每一个开发人员将自己研发的部分向软件整体部分提交,然后软件整体部分把各个部分集成起来的过程。比如,一个采用彻底的前后端分离的web系统,总体上分为前端、后端两大部分,前端由3个工程师来完成共同完成,各人负责不同的部分,后端又分为4个模块,比如模块A、模块B、模块C、模块D,分别由一个工程师完成,那么每到集成时间点,比如每天下午的5点钟,不管每个人对自己负责的部门有没有做修改,都要做一次集成,就是把前端3个人负责的部分集成起来,后端4个人的4个模块也集成起来,前端和后端再统一集成起来,构成一个整个的系统。
部署是把集成之后的软件,经过编译,形成了可执行的软件包后,将此可执行版本向测试环境安装,以便尽早开始测试;
交付是指将测试通过的软件,向客户交付,在客户的验收测试环境中去部署,等待验收测试UAT(User Acceptance Test),之后再往客户的生产环境部署。
2、理解持续集成、持续部署、持续交付
===============================
持续集成指的是让软件开发团队中的开发人员每开发完一个功能点(feature),就尽快把这个feature的代码提交给主仓库,让主仓库的管理人员去编译生成可运行的软件。
持续部署指的是软件主仓库的管理人员每编译生成了一个可运行的软件,就把它部署到测试环境中去,以便测试人员今早的开始测试工作,从而能尽早的发现错误(bug)。
持续交付指的是每当软件测试人员测试过了一个中间版本,软件主仓库的管理人员就尽快把这个版本,交付给客户,让客户部署在生产环境中,以便尽早发现生产环境中存在的问题。
如果软件开发团队中的所有开发人员都再把自己负责的模块,全部做完,之后才向下一个环节交付,那么隐藏在软件中的问题只能在最后测试的时候、甚至运行的时候才会爆发出来,解决成本巨大甚至无法解决。而所谓的持续,就是说每完成一个完整的部分,就向下个环节交付,发现问题可以马上调整,使得问题不会放大到其他部分和后面的环节。
这种做法的初衷是:既然难以做到开发之前就完全了解完整的、正确的需求,那么干脆就一小块一小块的做,并且加快集成、测试、部署、交付的频率,使得交付物尽早在下个环节得到验证,从而达到早发现问题早返工的目的。
通过以下的个例子,可以更加容易地理解这三个概念和他们之间的关系。
比如房子装修过程中,装修厨房,其中一项工作是铺地砖。
在所有的地砖中,墙角的砖要把正常大小的地砖切割一下,以适应墙角的不规则形状。如果一次性把需要的规则地板全切割完,然后拿着所有的整块地砖和不规则地砖再去铺地板,在铺到最后,如果发现不规则地板砖的尺寸有误的话,会浪费已经切割的地砖,并且重新切割不规则地砖返工时间就大了,不如切一块铺一块,这就是持续集成。
装修厨房有很多部分,每个部分都有检测手段,如地砖铺完了要测试地板漏水与否,电线线路铺完了要通电测试电路是否通顺,水管装好了也要测试冷水热水是否能来。如果全部装完了再测,出现问题可能会互相影响,比如电路不行可能要把地砖给挖开,重新铺设地砖下的线路。那么每完成一部分就测试,这是持续部署。
全部装修完了,你去验收,发现地砖颜色不合意,水池太小,灶台位置不对,返工吗?所以不如没完成一部分,你就去用一下试用验收,这就是持续交付。
3、自动化地持续集成、持续部署、持续交付
===================================
从敏捷思想中提出的这三个观点,还强调一件事:通过技术手段自动化这三个工作。加快交付速度。
因为如果每做完一点就开始集成、部署、测试、交付,那么集成、部署、交付地频率会非常高,人工做会非常麻烦,如果能够设计一个系统,让程序自动地去做这些事会极大地提高效率。
参考资料:
1、https://blog.csdn.net/zou2ouzou/article/details/76546434
2、https://testerhome.com/topics/6283