00:00
大家好,欢迎来到这里,今天呢,我们将来学习get LA的这个CI和CD啊,在之前呢,我推出了一个教程,是关于JS的CI和CD的一个教程,但是这段时间我一直在研究get lab的这个CN和CD,然后专门整理的这样的一套教程啊,因为现在呃,我后面会讲到咱们为什么会要学gila这个C和CD gila有哪些这个强大的一些功能。首先我们这节课啊,先来跟大家说一下关于做get lab CI和CD的一些基础知识,先让大家了解一下啊,什么是cicd啊,嗯,我们这道课程啊,主要是分成了三个小部分,第一个部分呢,会为大家讲一下啊,我们为什么要做CI和CD这些呢?适合一些刚开始做流水线的同学啊,那这些概念是适用的,然后后面呢,我会说一下关于get lab CI和CD的它的特性啊,它有什么特点,它有哪些优势,最后呢,我们拿gitlab CI跟这个JS的CI做一个全方位的一个对比。
01:04
好吧,这是我们这这个第一次课的一个内容啊,那我们先来看第一节啊,是为什么要做CI和CD啊,这一节课几乎都是一些理论啊,那我们先来看一下传统应用发布的一个。模式,传统应用发布模式啊,相信现在应该还有好多团队也是这样的,就是我们把这个团队啊分成了几个角色啊,开发运维和测试是吧,那一般我们在开发一个应用的时候,那开发人员肯定写代码去往代码库里面去提代码,提完代码之后,他觉得这个版本可以发布的时候呢,这时候运维,运维人员可能基于他的这个代码库的分支是吧,下代。代码,然后进行打包,把这个包发布到测试环境,供测试人员去测试,然后测试人员通过之后呢,然后我们再发布到生产环境啊,这是传统发布的模式,那么他都是手动去做的啊,手动开发人员提代码,然后运营员怎么去打包啊,手动打完包发到手动发到测试环境啊,那这些呢,就会产生一系列的问题。
02:13
那这种模式下啊,大家也可以看到啊,这种模式下产生的问题有哪些呢?第一就是发现错误的一个不及时啊,就是我们开发人员只往这里面提代码啊,可能本地他测过了之后就没觉得没啥问题,然后直接就放到了代码库里面。那有的时候当我们地。当我们频繁的去提交的时候,可能会出现很多莫名其妙的错误啊,所以到时候我们发现这个问题的时候啊,是非常不及时的。然后第二点就是人工的一些低级的错误啊,那大家看这张图刚才都说了啊,他一般都是手动去发布的,那手动去发布呢,很容易出现啊,发布的失败啊,或者版本号弄错了呀,等等等等问题啊。第三个就是团队的效率啊,因为现在啊,在每个企业里面,这种人与人之间的沟通成本还是挺高的啊,而且当开发人员在开发代码的时候,其实现在测试人员几乎呃也没有太多的任务去做啊,只因为只有把这个代码放到这个测试环境之后啊,他才能进行测试啊,以至于发到生产环境,它才能去生产环境进行测试,对吧?所以说常用的几个问题啊,就是这四个问题啊,团队效率比较低,然后开发跟运维的一个一系列的一些问题,因为这里面不是说是开发跟运维之间的一些冲突啊,就是呃,平时我们开发人员在写代码的时候,一般我们追求的就是频繁的去更新,对吧?而运维同学呢,可能认为就是稳定啊,针对的是稳定性,所以说这方面在这个思想上有一定的一个冲突啊,所以说这是我们面临的一些问题,那么我们如何去解决这些问题呢?啊,其实现在CICD啊,已经不是一个新的词了,已经很长时间了,那么。
03:56
我们就需要去做这种CI和CD了啊,你可以把cid理解为自动化的一个持续集成,然后CD呢,就是自动化的一个持续交付或者是持续部署。
04:07
那我们先来看一下什么是CI啊,持续集成,那持续集成概念就是我们开发人员每天都会写代码是吧?每天他都会提交代码,但是我们怎么来对他每次提交做一个验证呢?啊,我们需要对开发人员每次提交做一个验证,比如说我今天提交的一个小代码,然后第二天呢,我提交了20行代码,对吧,那这时候我要验证他每次提交的一个。有没有什么错误的问题,有没有比如说那种最简单的,比如说是会不会编译不通过呀,什么问题对吧,所以说持续集成能帮我们解决这些问题啊。而且我们在做持续集成的时候,一般我们做的就是一些提交验证啊,提交验证也就是开发人员一天之内啊,他可能会提交很多次代码,我们需要对他的每次提交和合并做一个这个验证。OK,这是持续集成的一个基本的概念,然后CD啊,持续交付啊,这里面有两个啊,一个持续交付,一个是持续部署啊,有每个人的定义可能都不太一样,那相对来说,持续交付来说就是我们把应用交付给用户了,也就是说他已经做了一种自动化的这种验收测试了,对吧,做了一些这种自动化测试,说明我可以正常交付了,而持续部署呢,就是说我可以去部署了。
05:19
真正的去上生产对吧,那么这这是两个基础的概念,但是一般我们这个CD在做的时候,可能都是部署这一方面啊,因为现在目前,嗯,包括现在目前为止啊,所有的这个流水线里面缺少大量的这种自动化测试啊,因为这个成本还是挺难做的,所以现在测试人员啊,自动化测试人员还是呃,这个需求量还是挺多的。好,这是CI和CD的一些基础的概念,那么CI能帮我们解决哪些问题呢?第一就是尽快的发现一些问题,我们希望能够快速得到反馈,比如今天我提交代码出现了问题,那我就立马去解决,而不会说我提交了很长时间了,然后我才去解决,那时候你可能连代码都给忘掉了是吧,所以就不好去解决了啊。所以说也是减少了集成的一些问题,避免复杂的问题。那CD呢,这块重要的两点就是每次更改都可以发布啊,然后降低了发布的这个风险。
06:16
可以实现了这种快速的一个反馈啊,这是一些基础的概念。然后我们来今天说的两个工具啊,一个是get up,一个是金ins啊,我一般会先说一下这个JS哎。好,我来说一下这个金S啊,因为现在我们在目前为止啊,应用最多的集成服务器还是JS啊,JS这块啊,应用的还是最佳最最广的啊,而且它有一些特点啊,是现在有很大的优势,第一个就是呃,它的安装比较简单,另外它的这个插件非常丰富,它也支持这种分布式的架构,比如说容器啊,然后那个K8S里面对吧,都是可以的,最重要一点它是能够把所有的项目统一的管理起来。应该在学这门课程的同学啊,你应该也了解过这S,包括有可能你正在使用这S啊,啊,那这里边我就不说这S太多的这个特点啊,然后get LA呢,GI是咱们这一节课的一个主角,为什么要说get up,其实它的功能真的是太强大了。
07:18
我觉得gila比这个S最有优势的地方就是它既是代码库,又有CI和CD,而且大家可以看一下gila的这个官网啊,它是从端到端,从端到端,从基本的这个缺陷管理啊,然后这个从基本的缺陷管理到CI持续集成的管理,CD持续部署的管理,包括最后的视品仓库啊什么之类的都是有的啊,包括V可以看的知识库,所以说它这个是一个完整的啊,端到端的一个单个应用。的实现,所以说我们有必要去了解一下啊,那不光是他因为这些特点啊,而且我们会发现在用金克的时候,我们要做一些需求管理系统,比如说Java redman的一些集成,还有有的用缠道是吧,那么在做集成的时候,我们可能会用到它的插件,而且这个插件有的时候真的我觉得学习成本还是挺高的。
08:11
啊,觉得学习成本高的同学可能会自己去写插件,那么写的过程中呢,其实增加了很多复杂性啊,可维护性也很差。对吧,这个是是肯定的,而且你像GLA它是把所有的东西都已经集成好了,所以集成这块我们就相当于是开箱即用,我们不需要再加任何东西了。对吧,好,那后面还会有更多的它的这个优优点的一个对比啊,这块咱们就简单说一下。OK,然后我们来说一下这个GALA,这个CI和CD它的有什么特性啊。好,我们先来看一下啊,关于glab里边的一些持续集成的一些概念啊,那在这里边我就简单概括一下,关于持续集成这块,如果用的是glab的话,我们一般会配置几条流水线啊,就是一个是提交流水线,就是开发人员在提交代码的时候,然后会触发这个流水线,然后对咱们的这个代码进行一个验证,然后合并流水线,就是默制请求的时候,也会做一个这样的验证。
09:12
OK,这是这块啊,所以说他能够帮我们解解解决很多这个小问题,那CT部署这块啊,部署这块呢,我们就可以直接写我们的代码,调用一些外围的程序啊,啊往这个容器啊,VM或者是这个KS里面啊,都是可以这样去部署的啊,那gila的这个C和CD它有哪些优势呢?我给大家总结这几点啊,这也是官方列出来的几点,第一它是开源的啊,它是开源版本啊,所以说呃,它是分为社区版和这个企业版的,那一般我们CI和CD啊,这个社区版的功能就已经足够了,而且我不知道大家有没有看过一个帖子啊,我在那个应该是公众号文章里边,我忘记关注的哪个公众号了啊,这里面官方已经表示了,会开放出18个企业版的这个CI和CD的这个功能,也就社区版的这个CCD的功能,会有进一步的这个更新啊,所以这是这是一点,第二点呢,就是易于学习,易于学习这个指的就是它的官方文档。
10:13
档了,官方文档记录的非常非常详细,第三个就是无缝的集成,那这个就是刚开始咱们前面说的gila,它自身的一个优势,因为它是一个从端到端的单体的应用啊,你只要用了GALA这上面的这些什么需求管理啊。然后这个VK的管理是吧,然后还有GALA的这个CI和CD,那么他们之间的集成是非常方便的啊,所以说用户体验这块还是挺高的,那第四点就是关于可扩展啊,扩展这个就是在做GALACI的时候,对吧,这个机器是可以扩展的,这个机器啊是可以添加任意数量,就跟这S的这个s slave是一样的,结果这个指的是并行构建啊,你可以这个就取决于你的资源的一个状态了啊,如果你的资源特别多的话,那么我们在GALA上面这些作业啊,都是可以直接呃在多台机器上并行去运行的。
11:08
OK,这是一些优化啊等等,呃,这个优势大概也就这些啊。然后我们来看一下GA up CI和CD的一些特点,首先我们来说,呃,现在我们只说CI和CD啊,不会说是GALA或者是这个什么缺陷管理啊,哪一块是吧,我们现在说的是CICD这一块啊。CI和CD这一块啊,它是这样的,我可以先跟大家说一下,看一下CI和CD的组件吧,呃,关于它的组件有这几个部分啊,第一个就是GACI和CD,它其实就是server的一部分,对吧?Server的一部分,然后第二个部分就runner啊,它有一个runner的概念,Runner就是帮我们执行这些应用程序啊,帮我们处理这些PA烂的作业,呃,其实还有一个组件就是什么?就是点2LEVEL。
12:00
STEM文件啊,这个文件呢,其实就是我们的papeline里面的文件啊,也就是说它后面我会说一下它的工作原理啊,就是我们后面运行的脚本啊,都是根据这个文件里面定义的内容去运行的,类似于JS的这个JS fair OK,现在你知道它的组件了是吧,那我们来说一下它这个优势,呃,它这个特点啊,呃,关于这个GA cxd,它也是多平台的啊,关于构建这块,因为它是在runner上去进行构建的啊,那么这个runner呢,它是用构语言去写的,然后它也是支持跨平台啊,包括你在这个各个系统上面啊,或者是各个这个docker或者是K8S上面,它也是支持的,然后第二个主要的特点是多语言啊,那么它这个构建脚本啊,是相当于我们在装上面,只要你配置好这些开发环境,那么任何一门语言都是可以直接在上面去使用的。OK,这个应该好理解一些,嗯,然后再往后就是一些构建了,稳定构建和并行构建啊,这个取决于机器,这里边突出的稳定是因为这里边其实突突出的还是分布式的一个特点,因为现在啊,GALA官方给出的一个建议是不要把这个GALA runner跟那个GALA部署在一起,所以说它俩是分开在不同机器上运行的,这样既不影响GA本身的一个特性,也不会影响runner的一个性能。并行构建这个取决于咱们的机器啊,如果有多台的话,然后就可以快速实现这种的一个效果。
13:29
日志啊,这个先,呃这块啊,大家先了解一下,后面我会给它运行一个实例啊,到时候你们来看下这个日志,它的交互效果还是挺好的,灵活的管道啊,这个其实就是写压面文件是吧,每个管道里面有一个压面文件,那这个压面文件是必须在每个分支里边都有的,比如说你想要构建master分支,那么这时候你在触发流水线之后,那么你首先这里面得有一个什么呀,这个文件,要不然它是不会运行的。OK,要不然不会运行的啊,还有一些特点就是这些它天然的一些特性的啊,因为它可以在刀和K8S里面去部署,所以它可以实现这种自动缩放啊,自动缩放的一个功能,然后制品啊制品库get up上面也是支持的docker,然后K8S还有docker这个,呃,这个容器的这个镜像啊,容器的这个镜像仓库是吧。
14:24
因为get up它有这个功能,后面就是也可以定义多个环境啊,这是它主要的一些特点。然后我们来说一下它的这个工作原理,那一般我们现在是怎么来工作的,我们现在啊,就是如果你用了gilab啊,就是你必须把代码放到getlab上面。啊,这时候你才能用它的CA和CD啊。这时候就是我们把代码先托管到get lab里面,对吧,然后这时候我们在它的这个根目录啊,也是master分支的根目录,创建一个这样的一个get up CI的文件,然后在文件里面指定我们要运行的每个步骤,或者是每个阶段,最后呢,我们当我们提交代码的时候,然后它就会GALA,就会检测啊,检测一下你这个分支里面有没有这个文件,然后这个文件里面定有没有定义使用哪个runner,如果定义了,那么我就在特定的runner上面去按照我这个文件里边指定的这个步骤,然后开始去运行每一个阶段。
15:25
OK,就是刚开始我们在说的这种啊,构建测试发布啊,这些阶段,你看最后这是一个,这是一个图片啊,这个图片,这是官方的一个图片,这里面你可以看到每个项目的构建日志,你看每个阶段的一些信息。看到同学们,所以这是GALACI的一个页面啊,它没有一个统一的管理页面,它这个CI和CD就在每一个项目里面,OK,每个项目或每个项目组里面。好吧,这是它的一个工作原理,然后我们再来看一下最后运行流水线的一些效果,大家可以看到这里面,这是每一条流水线里面有多个步骤。
16:04
对吧,然后这里边你还可以回滚等等。好吧,这是这节课的一个主要内容啊,这节课的一个主要内容就是给大家去讲一下啊,什么是CI和CD对吧?然后我们gila CCD它的有哪些特性啊,这个就是纯属了解啊,了解一下就可以了,好,然后后面我们再来说一下关于这个CI和金之间的一个对比啊。
我来说两句