00:00
那前面我们通过Co fair这个可视化界面给我们鼓励商城这个里边部署了一个我们自定制的这个应用word price application,而且我们这个word price跟人博客们之前也测试是可以访问的,那么这个应用部署好了以后呢,接下来我们再来测试一下Google我们带来的d vos功能,也就是呢,我们可以通过Co server的d vos创建的我们称为流水线来帮我们完成最终的持续集成和持续交付。那什么是d vos,我们天天说,那我们现在就来了解一下,首先我们来说这个DVPS,我们先来看一下我们开发一个项目应该考虑哪些维度,首先呢,我们就应该考虑我们在项目的开发过程中该怎么开发,就从divv的角度来考虑我们怎么开发,用哪些框架,选哪些技术,该怎么搭配,怎么设计业务,这些是我们考虑的。包括我们如何。
01:00
把我们这一块的业务来敲成我们这一个能承担高并发的,我们来编写代码的性能呢,更高一点的,这也是我们DV可以考虑的,然后呢,开发完了以后,剩下呢就是我们OS需要考虑的,那OS说的就是运维,那OS呢,我们应该考虑我们的这个项目该怎么部署到服务器,该怎么把它做成我们的高可用,比如一台不行来两台,我们如何扩容,如何部署,以及我们如何做到我们的最终分布式集群效果,这一块呢都是我们OPS要考虑的,所以我们说的这个DVOPS其实就是这样子的,首先DV代表的呢,就是我们的开发,他呢牵扯到我们的软件开发工程师,他应该去考虑的一些范畴,但我们这个开发呢。那最好还应该考虑一下我们这个运维怎么做,特别是我们这有一个质量保证,以及我们的技术运维,我们在开发呢,不光要敲的自己的代码,而且我们也要考虑到运维对我们的这个项目的运维的复杂度,所以呢,我们一个项目就是由development我们的这个角度,再加上operations我们的这个运维角度来合起来,才是我们一个项目完整要考虑的内容。所以说的DVS就是我们一个项目从开发角度,从质量保证,我们这个测试角度,从运维角度,那他们的中间的这个相互叠加的部分,其实就是每一个人员都应该了解的内容,所以呢,我们无论是做软件工程师,还是来做我们的技术运维,我们最终呢都要把方方面面都要了解到,所以我们这个DVOPS,就是希望我们这个软件工程师,我们的技术运维质量保证,他们三者呢都能互相的协调。
02:49
到工作起来,大家都了解对方的这些痛点难点,那设计起来呢就更合理了,我们这个DVS呢,最终突出的就是我们整个开发人员和运维人员的沟通合作,使得我们整个项目啊,最终自己开发起来也比较好开发,然后呢,运维部署也能做到一套流程自动化,要不然我们开发的项目有可能这个运维人员还得询问我们这一块该怎么打包,该怎么做,这也挺麻烦,所以我们最终就希望我们的一个项目能通过我们这个BVPS。
03:24
这个呢,其实就是一个概念,我们就应该站在多方面角度考虑我们这个项目,最终呢,有一个我们完整的工具链,让我们项目一开发结束后,能做到我们整个的运维部署以及我们的测试能力,所以呢DVS做到的是我们这个软件产品交付过程中的一个it工具链的打通,这样呢就减少了我们团队的各种协作消耗的这些时间,那有一些自动化的流程就直接可以让计算机来做了,比如我们以前写完下一目以后,我们手动的打包上传到服务器,然后呢启动环境,安装好环境,在这来做,所以只要有了这些工具链,我们这些东西呢,都可以让机器来帮我们来自动完成,所以我们一个良好的DVPS这个工具链的闭环,能让我们整个开发运维部署都变得呢,非常流畅,非常简单,所以们现在就来考虑一下,在我们这个DVS里边,我们最爱说。
04:25
的这两个概念,一个是CI,一个是CDCI呢,我们称为持续集成,那持续集成是什么意思?我们先来看这张图,我们这个CD呢,叫做这个持续交付。持续交付呢,在这一块的环节,Containnu delivery,然后呢,还有我们的持续部署,这是我们的最高层节,那我们这个这三个都是什么意思?首先来看持续集成,如果把我们一个项目从开发到部署结束整个阶段呢,我们可以抽取成这么一个过程,我们在这来开发项目,这个编码我们编完以后,我们比如扎va代码我们写完了,我们把这个门工程呢给打包,打成一个炸包,然后呢,接下来我们把我们写的,特别是微服务,我们各自开发各自的模块,我们写的呢,应该集成到我们的整个项目里边,让运维或者其他人员,我们的专门测试人员应该测试一下我们整个项目的流程,看能不能跑通。所以呢,至此我们这个过程呢,我们称为CI,就是我们开发人员自己编写的代码集成到系统里边,可以来进行测试的,这个过程我们称为CI,这个呢我们称为持续集成continuous integration,这个持续叫集成。
05:39
嗯,我们一般集成的不同,一般我们自己敲完代码,自己打包部署到我们的测试环境,这个测试人员呢还要测试,但是我们持续集成应该是我们这一块东西呢,都应该是一个自动化的流程,所以呢,我们持续集成CI就必须具备我们这些特点,比如全面的自动化测试,我们这个东西呢,已经部署到我们的测试环境了,什么都好了,我们这些自动化测试工具应该把前期的一些不需要人测的,我们就会全部来测好,比如测好我们这个接口的吞吐量,比如测好我们每一个接口的这个功能的准确性,那其他的这些边缘测试,可以由我们这个测试人员继续来做一些人工测试,所以我们一些机器能测的,我们这个自动化测试,我们就应该做完,而且呢,我们想要做到CI,就应该有灵活的基础设施容器和虚拟机。
06:31
让我们这个开发人员呢,还是我们这个测试人员不用自己呢,去搭建虚拟机,搭建各种环境去来在测,所以我们这一块呢,我们就应该有一个基础设施,比如我们用阿里云的这些服务器,这些服务器呢,我们买来全部都搭好以后,我们的这个代码只要编写好,它帮我们来自动集成到我们这个服务器,服务器的有一个公网的地址,我们还可以访问,所以这一块呢,基础设施,我们这个服务器也好,我们的马S口这些环境容器环境也好,这应该都是一个灵活的自动化的,我们也是好配置的,然后还有我们的版本控制工具,我们想要做成持续集成,那肯定呢,我们代码写好了,想要集成到系统里边,那可能要把这个代码拉取过来,打好包,在系统里边一集成,再来测试所用的版本控制工具,如G,我们SVN,这些我们都需要,特别我们这次测试失败,我们还可以回滚,让它回滚到上一次的代码,我们重新来开发,这是我们说的这个版本控制工具。
07:32
以及我们自动化的构建和软件发布流程这块呢非常重要,因为编写的这个代码最终呢,要跟系统里边其他的代码全部集成到,比如我们的测试环境,集成到测试环境以后呢,我们这个测试人员就开始要进行测试了,我们可以来内测,也可以来做一些公测,我们现在呢就要做测试,那整个这个过程呢,他们的部署最好呢,也是自动化的,不要我们这个代码敲完,然后我们咔咔咔部署了三天,我们整个呢全部署上去了,然后呢,测出了一个问题,我们又下来,又敲完,又部署三天,这样呢太慢了,怎么呢,自动化部署,自动化构建,自动化的软件发布非常重要,我们就可以使用jeins来做到我们这个功能,Jenkins可以把我们的这个代码自动的利用版编译好,集成到我们这个系统里边,发布到我们指定的位置,然后我们就去来进行测试就可以了,这是我们说的CICI呢是我们这个阶段需要做的事情。
08:32
那接下来还有一个叫CDCI是持续集成,我们的代码集成到系统里边,方便测试,那CD是什么叫持续交付,相当于把我们的这个测试通过的这些东西,我们就应该交付到我们真实的这个生产环境,或者类生产环境,我们交付到这个类生产环境里边,让它呢直接运行。这是我们说的持续交付,持续交付呢,就需要我们这些特点,比如快速发布我们某一个业务,如果改了,我们能快速的集成到我们这个系统里边,并且交付到我们这个类生产环境来进行我们的整个使用流程,这是我们说的持续交付,他们的编码测试,整个上线的过程,交付的过程也应该是比较快速的,们无论是改好了代码,做了什么东西,新添了功能,那最终呢,很快的能交付给我们这个客户,让客户呢看到我们这个结果,这是我们做到持续交付,而且呢,得有一个高质量的软件发布标准,那就算是要交付上去,我们的这个代码呢,都是要受过一些检测的,质量呢,是满足客户需求的所有东西呢。
09:40
产品都是一些标准化的整套流程,所以我们持续交付也需要一些我们这些标准的这个代码检查等等这些工作,以及我们这个持续交付,我们交付给客户以后呢,整个进度应该是一个可视化的,方便我们团队人员了解我们整个项目的成熟度,以及我们这些进度,包括我们团队协作呢,应该是更快速的,比如我们现在呢,大家都喜欢用这个敏捷开发需求分析,做完以后呢,我们就直接有新功能,直接上线就可以来使用了,这么说的持续交付在我们这个集成的系统里边,测试通过以后,我们就可以交付到我们的类生产环境,那接下来就是我们的持续部署,这持续部署呢,那就是我们的真正的生产环境,那持续部署是我们整个代码全部交付到我们的这个客户,或者我们交付到我们指定的环境以后,我们全部通过评审了以后,那我们这个代码就可以上到我们生产环境了。
10:40
只要我们评审通过,那这个代码呢,又会自动的。从我们这个交付环境,然后呢给我们上升到我们的生产环境服务器,那么生产环境里边呢,相当于就直接能使用了,比如大家天天看到APP有更新,这相当于就已经部署到我们这个服务器上了,这是我们说的持续部署,那这个持续部署呢,就是需要我们自动的能部署到我们生产环境中,我们只要代码审核通过,自动的从我们这个交付环境部署到我们的生产环境,所以呢,我们整个这个c icb流程应该是这样子的,我们从开发人员提交代码开始,我们持续集成的这些服务器,比如金ins,他呢就得自动的把这些代码拿到,然后呢,做单元测试也好,做其他测试也好,然后呢,部署到我们的这个预生产环境,我们整个通过审核以后,再来部署到我们的生产环境,整个一个流程应该是全自动化的高效流转,而不是我们这个人工部署一个环境可能得部署上一个多小时,这都是快的部署。
11:45
二三天五天的也很正常啊,我们全部的自动化流程一拉取一部署标准一做完以后呢,那就非踌快,可能20分钟我们就整套项目全部交付上去了,这是我们的全自动的流程,我们持续部署更大的好处就是我们即使有相对的一些部署的这个新功能,我们也能相对独立的部署,那新功能上线以后呢,也不会影响这个老功能,包括最终我们这个部署上来以后,到我们生产环境里边以后。
12:14
我们还要引入比如一些灰度发布的机制,我们将一些真实的流量,比如引到我们这个新版的系统里边,我们最终来测试,新版系统全部稳定以后,那我们就可以稳定的在我们这个生产环境来运行了,如果不稳定,我们还可以给他把这个功能呢,替换到我们这个老板,所以我们整个持续部署,亚马逊呢,有一个经典的话就是这个you build it you run it就是我们。构建它,我们来运行它,亚马逊的整套持续交付,持续部署的东西,它能支持我们每年的5000万次的这个部署,所以其实我们每个工程师自己开发的这个代码,所以这块呢非常重要,就是你自己整的这个东西,你就得把它运行过来,我们每一个工程师呢,自己开发的这个代码,其实要对整个的DVS量,他是呢比较清楚的,这样呢,只要部署过去出了问题,他应该可以解决的,所以其实每一个工程师每天都超过50次的这个部署。
13:12
那这个拿人工来做其实是很麻烦的,我们一个部署光打包上传服务器来,慢慢自己来等,自己来敲一下命令,这可能都得整一个小时左右,你一天怎么着你也做不了50次,所以我们整个的自动化工具链是一个非常重要的环节,所以DVPS就是考虑到我们代码从敲一直到我们生产环境整个过程的自动化,那这个自动化呢,网上有一个。非常经典的持续交付工具链图,从我们这个团队协作开发,到我们的这个项目构建,到测试到部署,到我们最终的运行,我们都有一套的这个工具链,这个工具链的这个详细图,我们在这儿给大家有一个高清大图来看一下,就是我们这个cicd工具这个大图,比如我们来看我们整个生命周期里边我们能用到的工具,首先我们这个应用的生命周期管理工具,比如这呢有一堆,他呢其实来是做我们整个项目的生命周期管理,就是在我们开发期间,我们项目呢,现在开发到什么进度,什么东西,我们应该监控得到,比如呢,就有一个非常流行的软件。
14:22
接着我们来看一下这个软件,这个软件呢,就可以来通过每天来实施发任务的方式,来告诉我们每个开发人员,他自己呢应该怎么做,该做哪些任务给我们这个项目,这就是我们这个jar软件,他的这个,比如我们来看一下他长什么样子,他每天呢,比如我们这个看板里边哪个工程师要负责哪些任务,在这图图列表里边都有,我们每天开发完以后,我们整个项目的进度监控报告这块呢,我们全部都能看到,这相当于我们监控这个项目的工具,而我们这个国内呢,比较喜欢用的是我们这个肠道,这个肠道呢是一个开源的我们的软件管理我们项目周期的这个管理工具,这个缠道呢也非常方便。
15:05
而且在我们这个敏捷开发起来,我们整个肠道呢,也支持了非常多的这种功能啊,非常合适,这也有它的这个演示系统,我们也可以来看到他这一块的应用,比如每天。进来以后呢,我们可以自己到自己的任务里边看,我们应该。开发哪些任务,如果我们开始开发了,我们来点一个开始来开始开发任务,在这开发完以后呢,我们就可以交付过去,我们来进行测试,这一块呢,都是来发布的这些任务,这么说的这个缠道,然后呢,再接下来我们还有我们的整个团队交流协作的,比如一些聊天软件,我们钉钉啦,微信啦都行,然后还有我们的知识分享的,我们使用的GIHUB之类的,包括我们这个SCM,或者说这个VCS,就是我们项目的版本控制工具,我们呢现在都是使用的giate gib都是基于giate来做的版本控制,当然也可以在公司搭建自己私人的这个giate仓库,我们这些叫GI lab等等等等,然后呢,再来我们的CI,在我们这个构建阶段,构建阶段呢,我们就会用到一些工具,比如CI,我们的持续集成里边,持续集成里边我们用的非常多的,那就是这个金cases,那用它最终来把我们编写的代码自动拉取,持续集成到我们这个系统里边,然后接下来我们的构建工具。
16:23
比如我们有meven,还有我们后端这几年兴起的grand,以及前端的ground g gra等等等等一堆我们这个构建工具,以及我们的数据库管理工具,他们来管理一些数据库,我们现在也不用引用入什么数据库管理工具,然后呢,接下来我们这个test,我们在测试期间,那么构建期间,代码从版本控制里边持续集成拉取到我们系统来进行构建,拉取完了以后呢,我们就要进行测试,那测试里边呢,比如大家熟悉的单元测试,还有我们这个加特林来做的我们这种性能测试,这个加特林呢,跟我们这个解密特还是挺像的,而我们在项目里边呢,我们其实就来使用解密特,可以来对我们整个项目呢,来做一些压力测试等等等等,我们一些的测试工具,以及我们在部署期间,我们整个项目的部署,我们要用到的最简单的方式,诶我们用SSH这些工具,我们来连上Linux来部署,然后呢,还有我们的配置管理,这个配置管理呢,诶我们用了一个这个。
17:23
其实它是帮我们来配置一些虚拟机,快速的部署上去,整个项目的这个管理我们的成品,这个管理我们整个成品的交付的这个最终的这个代码,我们可以把它打包成docker镜像,放到docker里边,当然我们现在整合了coer notice,我们其实就是这么来做的,我们现在所有的交付的产品都应该是一个镜像库,Ne呢,拿到这个镜像来直接在docker里边来运行就行了,或者呢,我们搭建自己的私人的镜像仓库,以及我们在运行期间我们需要的一些工具,比如我们云平台的一些工具。我们无论是使用微软的这个云平台,还是亚马逊的,还是我们的这个阿里的这些云平台,我们都可以让他们来帮我们完成一些基础设施,比如创建了一些服务器,创建了一些负载均衡器、网关等等这些东西,他们呢帮我们把基础设施来做好,然后呢,由我们自己来调度我们的所有设施,比如我们可以使用cooperer ne来调度我们整个集群的工作,也可以使用我们docker提供的docker swam,啊,我们说这个功能呢,它远没有我们这个cooper notice强大,我们现在来使用Co ne,其实cooper notice里边用的呢,还是我们docker的基本运行环境,以及我们最到后边要做的这些监控日志,这些流程。
18:43
我们现在有了cooper fair来整合我们的cooper cooper fair呢,这一套流程全部都带上了,它呢也有我们的这个监控,比如我们说的promise在里边也都整合好了,包括我们即使是用search,它呢也有自己的监控,我们在K的这个界面,我们之前呢,只。
19:03
通过这个DV兔S连接给e search发了一些命令,但K的界面呢,可以通过引入一些插件,我们e search直接能收集到我们所有系统的一些性能监控报告等等各种信息,我们都可以在K这个可视化界面看到,这就是我们整个DVS的这些工具链,我们在每个环节呢,其实都用到了一些,那现在有了我们的这个库S,我们呢就可以通过一个非常简单的流程,我们库S里边就整合了我们这个David OS,他们就是通过整合金克来引入金克斯的流水线,把我们整个一套流程从代码我们敲完那一刻开始,然后呢,它自动的我们来拉取过来,来集成到我们系统里边,再部署到我们库ne集群里边,我们的库S通过可视化界面都能做到这个事情。所以我们下一节课呢,就来测试一下我们酷侧片尔他们提供的戴维OPS功能。
我来说两句