00:00
好,我是妃子,这是我get内CCD系列的第四个视频啊,前一个视频的话,我们讲解了get内Cscd的proper以及教补这三者的一些关系,然后也简单介绍了get内部杠CI样本文件的一些呃,关键词,所有的关键词简单介绍了一下,然后上一边精,嗯,精讲,精讲了四个关键词,Stage scared,还stage精讲了这四个关键词,那么本期视频的话,我我给大家带来的是这几个关键词解析。Image talks only escape,还有when,还有这四个关键词也是在我在我们制作流水线的时候,也是一个非常重要的几个关键词,那我们先简单介绍一下这几个关键词,然后在今,然后再在实践中怎样去运用它,给大家讲解一下。首先是这个麦麦的话是。
01:06
指定一个刀客镜像作为基础,作为流水线的基础运行环境,那如果我们我们啊,我们部署的是一个。Java的Java项目,那我们就需要用Java作为基础镜像,如果是前端项目的话,一般使用note note GS的基本镜像,然后如果我们是pthon,就要用一个ython作为基础镜像。还有docker,如果你这个流水线涉及到将将项目打包成一个docker镜像,那就需要用到docker这个基础镜像,因为你需要执行docker build这个命令,那你就需要有docker镜像啊。叫image的一个简单介绍,然后再看一下tag tag的话是指定于你的流水线使用哪个runner去运行啊,这个关键词的话是定义到一个任务里面的,不像这个这个可以定义到全局,也可以定义到某个具体的任务,但这个的话它只能定义到一个具体的任务上面。
02:11
它它的取值范围的话,是在你项目中的rounder里边的T取,嗯,可以看一下,只能在这里面取,你这是一个项目,你这一个项目的话,在你的setting里边有一个csd,你看一下这个是rounder,这个是项目中可用的rounder,可用的rounder有这两个,然后它的taxs就是这一共有四个tasks,只能从这里边取,因为你这里只有这这只有这四个ta是可用的,嗯,对。这个task其实就是说白了就是指定你的流水线运行的一个round,因为你每一个环境它有可能有多个round,所以说需要指定使用某个round去运行,然后only和escape的话是限定当前任务能否被执行,就是说是有这样的一个使用场景,就是说你你这一个任务使用于在master分支。
03:17
使用,假如你操作了ma的分支,那你。就可以运行这个项目,然后only的话是限定某些分支某些T,然后escape的话是排除对吧?嗯,这个问的话是在某些特殊情况下。才会运行的一些任务,比如说你有一些任务需要手动执行,那你就可以使用问这个关键词,还有一些任务需要在流水线发生错误之后运行,或者说在发生在流水线跑完跑成功之后去执行,那你就可以使用这个问啊卡的话,卡是缓存,将当前工当将当前工作目录中的一些文件或者文件夹存储起来,存储起来之后在后续的这些。
04:12
任务之中,它都会把这些缓存给恢复到当前的执行环境里面,有分布式缓存,由本地缓存啊,行,那概念性的东西我们就介绍到这里,下面我们直接进入实操的一个训练啊。OK,还是以我们的那一个项目为准,这是一个前端项目,使用前端项目的是是V,然后它有一些使用的是note GS,去进行安装依赖包,然后去进行打包,OK,那我们现在开始写它的流水线,那么写流水线的话需要是为了做什么呢?嗯,我们写这个流水线是为了把这个项目给部署起来,对吧?那我们就在这个部署的过程中,就使用这几个命令,以及前面的这几个命令给它做一个。
05:08
差不多算是一个完整的一个流水线吧,嗯,OK,那我们开始先定义一个阶段,我们自定义的阶段有一个in install,有一个build,还有个delo这三个,这三个阶段是什么呢?就安装,就是柚子机子需要安装很多NPM包,安装完包之后需要进行项目的编译,你要编译完之后需要先需要进行部署啊,这一这一期视频的话,我们就先不讲部署,先讲解一下安装和从安装和编译这两个阶段来进行讲解我们学到的几个关键词。好,那我们开始写,首先定一个叫补,叫补star。
06:06
然后是NCT。OK啊,音二的话就是执行我们的m PM in2就是把一些包给安装起来。Build job build的话就是进行项目的编译。
07:10
好,那我们这里的一个基本的流水线就已经编译好了啊,大家看一下哈,嗯,首先就是定义了一个全局的一个阶段,三个阶段。然后这里就是三个任务,三个任务我们这里还没有指定的阶段,第一个任务的阶段就是安装阶段,在线之前,第二个就是build,这个就是不熟悉的,好,那我们就这里先提交一下看一下啊。这里我们还没有使用到啊,这里的话我们还没有使用到,还没有使用到tus,还没有使用到问还没有使用到only,等一下我们一起讲一下,我们先看一下这个基础的流水线,看一下它是怎么跑的,能不能跑成功,OK,这里验证通过,然后也开始运行了。
08:26
OK,看一下他的日志哦,已经开,已经报错了,报错是为什么呢。好在这里报错了,执行n PM install的时候他报错了,报的是什么,看一下这个n PM not find为什么是这样子呢?很明显我们没有这个note JS的环境在,就是在我们的流水线里边没有note JS的环境好,因为你执行这一句的话,你必须要先安装NOEGS才能使用这个NPM这个指令。
09:03
那么我们该怎么办呢?就是这里就使用到了image这个,这image不是images,然后NOEP,我们使用的是a plane plane这个较小的这个GS的一个版本号,好,那我们再提交试一下,OK,提交成功了。看一下这个应该没错,好第一个任务还在跑,好已经跑成功了,大家看一下啊,看一下看一下。这里执行n PM install,这里打印出来的日志增加了87个包,并且并且并且已经审核了88个,才六秒钟。
10:07
OK job success,嗯,很高兴我们这第一个任务就已经成功执行了,那我们再看一下他这个任务是在哪一个装下面去执行的。好看一下哈,看一下to do,这里就是下载你的notes的。看一下这里,哼,在第一句话这里,Wrong with GI round,食材,然后first。这里我们看不到他在runner的一个T。不知道是哪一个让那里边去执行的好。OK,再看一下这个任务,这个任务在执行完第一个任务之后,这个流水线在执行完第一个任务之后,第二个任务报错了,我们看一下第二个任务是为什么报错。
11:02
在执行n PM build的时候,他说not find,这个not not find是为什么会没有发现这个命令呢?这是因为我们在看到没有,因为我们因为我们在执行这个流流水线的时候,他把这个node builds node models这个目录给删掉了,删掉了之后,那我们就找不到刚刚安装的这个。Node的一些包,所以说他才会报这个命令,命令失败。那么我们怎么办呢?这里就需要用到一个缓存的一个东西,把我们的这个no models。啊,就是这个not models给它缓存起来,缓存起来之后,那它在各个任务之间,它就会它就会保持保持永久的缓存到本地,那我们再编辑一下这个流水线内容。
12:05
我们刚刚是,我们刚刚是没有指定T的,现在给他指定一个T,就是要从这里面去选。就是要从这里面去选OKOK,刚刚打断了一下,那我们继续详解,这里就是使用tax,使用tax去指定我们运行的一个round,因为这个关键词的话是不能全局指定的,那我们就只能每一个任务去给他指定一个。
13:00
这里一定要注意缩进,因为样本文件它就是使用缩进来进行解析的,如果缩进不对的话,它会验证通过。OKOK,这样。下下哦,这里我们只指定了一个T,但是没有指定它的缓存,这个缓存的话我们可以。缓存的话,我们可以去进行全局的置顶。缓存的话,指定的话,它下面是一个文件路径,我看一下啊,我看一下啊,它的这个路径是哪。就这样子,OK,就这样子。应该不用这个,那我们就把这个note models给配置到缓存里面。
14:09
好,我们再试一下。啊,验证失败,Cuts应该修的一个。嗯,应该有一个配置一个harsh。我们看一下这里应该是有一个。里恩有个KY。K就是代表这个缓存的一个版本号,相当于唯一的标识,我这里是pass pass。这样子试一下,这里关键词我也具体记,记不很清了。
15:04
看一下我以前的这个关键词是怎么写的。这么写的。这么写试一下,试一下。K就是表明这个缓存的一个版本,一个唯一标识pass,嗯,刚刚少写了一个s pass的话就是缓存到目录的一个数组,你可以缓存多个啊,旋转存多个多个文件,多个目录都可以的啊。好,OK,我提交一下,再看一下,这次验证成功了,看一下。
16:06
这里看一下,进入日志里面看一下。这里我们已经指定了他每一个任务的一个task,感觉执行的还是挺快的哈。大家可以看一下这里。好,看到没有这句话s catch from successful job,这里就是说你这个任务运行成功了,运行成功之后你要开始把一些缓存给保存起来啊,这个缓存的目录就是not models啊。发现了600。6390个匹配的一个文件和目录就已经缓存起来了。卡其,Will be sorry only locally,没有看到缓存配置的一个缓存服务器,所以说缓存将会被保存到本地。
17:04
我们再看一下第二个任务,第二个任务呢,第二个任务也是执行成功了,对吧?Past第二个任务你看在开始之前他会。它会这里也是删除了not models,但是是删除之后它又restored catch把缓存剪出了,剪出的时候就是使用这个我们刚刚配置的K,嗯,这个K缓存检出成功啊,缓存检出成功就开始执行Q的一个脚本,N PM run build n p re build那。这里就开始VI build,这里我们因为我们把缓存都恢复成功了,它就有了这个note models,有了note models,它就有了这几个指令,有了这几个指令就可以运行n PM build OK n PM build,这里n PM build就运行成功了,这里是导,这里是构建出来的一个文件,放到list目录,OK,看到没有?
18:10
啊,然后它执行完之后,他又把这个缓存给给缓存起来,把这个note models给缓存起来了,因为我们缓存配置的是全局的,所以说他每次任务执行完之后,它都会缓存起来。好,我们再看一下他最后的一个指令,最后在最后这个任务。最后这个任务的话,他就其实就只是打印一句话,嗯,Start,哦,就是这样子的,就是我们。部署的一个任务,我们没有写实质的内容,下节的话,我们可以写实的内容。OK,那我们这里的话就介绍了这个images image,然后touch,还有touch这三个指令,但是还有这个when和only这两个词没有用到,那我们这里就再写,再优化一下,这里使用when。
19:13
那个词叫什么来着?对这个使用问关键词,我们把这个任务给他配置成手动执行的一个任务。然后的话,我们这里再配置一个的话,这里使用一个分支release only on release,我们看一下这里是会是怎样子的哈。这个问的话有几个可选词。嗯,有几个可见词,我们看一下这里unceed unfaed,然后Mo deep play,还有never,嗯,就只有这几个关键词可选。
20:09
啊的话就是所有任务执行之后,当至少一个任务失败之后,就是你这个流水线有一个任务失败了之后,那你这个就会触发这个问。嗯,好,我们再看一下流水线有没有跑出,好,我们看一下哈,这里我们看到刚刚使用了一个问,还有一个only关键词,所以说这里边只剩下了两个任务,为什么呢。这是因为我们的这个job build job build使用了only only这个关键词,它指定的是一个分支啊,这里我们指定的是一个分支,叫做release分支,只有在release分支这个任务才会。被看到被看到对吧,被看到,所以说我们现在是在must的分支去操作的,Must的分支操作的话,他就不会看到这个job build这个分支job Bill的这个任务,只能看到install和deep这两个阶段,这两个这两个任务,嗯,因因为我们deep play deep play这个任务使用的是一个手动执行,叫做win mot,所以说它会一个有一个这个三角号play运行。
21:28
大家可以看到,嗯。这里手动运行的话,你可以去填写一些变量,还是很方便的,嗯。这里可以使用一个全局,使用一个批量运行手动的啊,可以看到刚点了一下这里它就会去运行了,手动执行。OK,那我们这边的话,关键词的话就讲,基本上就讲解这么多了,本期的话讲解的关键词就是这个image tax only when和catch,这几个关键词都是我们非常非常常用的,你基本上写任何一个流水线真实的项目都要用的,嗯,所以说学习好这几个关键词。
22:18
学校这几个关键词,第三节和第四节的关键词都是非常重要的,因为嗯,我这里讲的话都是按照一个非常普遍,然后一般的一个业务流程,业务流水线去做的,但是在实际开发过程中还是有很多很多特殊情况,就比如说你任务失败了之后,需要去进行一个发送邮件给运维人员,对吧?这里我们就还有就是说发送任务失败之后,那就监听这个安play为安play的时候去执行一个任务,然后给给运维人员发邮件对吧,或者发送一个钉钉消息。
23:02
对,但是很多业务场景不会覆盖到,但是通过我我的这些讲解,这些关键词的讲解,大家可以举一反三。嗯,不断的去在业务中去练习,好,那我们今天的一个讲解教学内容就这些啊,如果喜欢喜欢我的朋友的话,就可以点个关注或者点个赞也可以你们啊,你们小小的一个动作就是对我最大的鼓励啊博主的话也是up主也是刚刚开始做视频,有很多不足的地方,也希望大家多多提意见,和我互动起来啊啊如果在搭建CCD过程中有任何问题都可以给我留言,在视频下方留言,我会第一时间回复给大家啊啊希望大家也可以多一点互动,多学一习,和我也希望能和大家互相交流。
24:02
好,那今天的内容就到这里,下期的话我将会给大家实以实际的前端项目为例,做一个从安装、编译到部署的一个流程。一个真正可用的一个流水线,好行,谢谢大家来前来观看,那今天的内容就到这里,祝大家五一节愉快。
我来说两句