00:00
同学们,刚刚呢,我们了解了呃,Jacks里的packline啊,是怎么去运行的,还有它的这个书写的基本的格式,那我们把这个基本的框架了解完之后呢,接下来带着大家一起稍微的去写一个简单的小例子,就是我们之前呃在web UI里配置的呃,使用ma打包,然后呢,我们再用这个。哦。这个它的这个呃,Sendin over SSH啊,Publisher那个插件呢,把打完包的这个炸包扔到咱们的测试服务器上,然后并且让刀ER去运行,我们看看在流水线里怎么来写这个写流水线的代码啊,呃,相对来说啊,稍微的复杂一些,那么我们如果想要完成更加灵活的这种,呃,任务调度,任务的执行,包括任务的构建等等一系列你能想象到的这种操作都可以由流水线来完成,包括我们如果要是啊,找不着适合自己的这种插件的时候,甚至我们可以写一些这个SH脚本啊,或者是gro v的代码来完成这种这种逻辑上的这种这个啊这种啊,那么咱们继续啊,首先啊,我们再看一下之前咱们这个job就是my pipeline。
01:17
这是一个pipeline类型的job哈,这里呢,继续完成咱们这个流水线里的代码,我们刚刚只是搭了一个最最最简单的小架子,那么我们接下来呢,我们把它分成呃,我们原来的那几步,首先第一步呢是拉取代码,第二步呢是使用maven进行构建,那最呃第三步啊,或者说最后一步就是把这个我们构建好的炸包给它给扔到。咱们的这个测试服务器上啊,发送炸包到测试服务器。还是诶给它搞大一点。在这写发送。这。包到测试服务器。
02:02
我们总共分这么三步啊,那么我们一步一步来搞,首先这个拉取代码,我们就需要用到GI,那在这儿呢,呃,我们需要写这个get相关的这个脚本了,那如果要不会写的话,在这呢,它有一个流水线的,呃,这种语法的生成器,你看这叫片段生成器。这个片段生活器里呢,可以找到我现在在呃jackets里所安装的插件,所提供的这种呃代码生成的这种方式,比如说mail,比如说这个呃GI,这是我们之前有这个GI这个插件,我们可以通过。呃呃,我靠,刚刚刚才点错了啊,退回来我们可以通过这个。这种原来这种UI这种方式,然后来生成啊这个脚本啊,你看我们现在选了GI,现在我需要从仓库去把代码拉回来,那在这儿呢,我需要填上这个仓库的地址是吧,那在这儿。
03:04
打开咱们那个G的仓库。啊是103。后入。怎么卡住了?啊,稍微有点慢啊。OK,进来了对吧,然后找到咱们这个地址。回来在这儿呢,给它给粘上。粘上之后呢,就是选择分支,我们的主分支是闷分支,不是这个master master作为我们的这个测试分支了。然后这个凭据这添加一个,呃,能够登录到这个git lab的这个账户啊,是这个root吗?我不太确定啊,我们再新重新添加一个。然后这是root。
04:02
密码。呃,然后这是ID,我们可以在这儿呢,给他呃配置一个ID,一会儿我们写这个,呃,这或者说不是我们写的,是生成出来的这个脚本会用到这个ID啊,叫GI lab。然后这个描述呢,是一会儿在这下拉菜单里边,可以让我们去区分开,究竟我们现在选用的是哪个账号,也写个git lab。啊,添加进去。然后在这呢,你看这个括号里的,这是我们填的那个描述啊。然后在这儿呢,呃,我们选好之后,这两个选项是要不要去轮询去呃找咱们的这个getlab服务器上啊,去查询这个代码变更啊,这是把这个变更的日志是不是要记录下来,哎,我们把这些都配置好之后呢,点这个生成生成脚本,诶接下来。我们把它给复制过来,你看这个标识,如果我们要不起这个ID,那么它会给我们生成一个特别长的,呃,这这么一个字符串式的ID啊,把它复制过来之后粘到。
05:11
咱们的这个代码编辑器里。哎,直接这样get啊。然后我拉取哪个分支,然后分支的地址啊,全这这样呢,就能把这个代码拉回来了,这是第一步,那第二步呢,是要执行构建。执音构建的话呢,我们就需要用到maven,那么如果需要用到像maven这种构建工具的话,那就需要在系统里边提前先配置好ma文giate呢,呃,反而倒是不是特别需要啊,因为它有一个默认命令,就是发送GI的这么一个在S在在这个shell shell命令行里边啊,直接发送GI命令,这个这个可以不配,GI可以不配,但是如果用may的话呢,就必须得配,如果要是用may,那么就需需要之前我们先把它呃给引用进来,提前先声明一下这个呃,Stage就是我们每一步步骤之前我们先。
06:05
呃,使用这个兔。字。来把给引用进来呢,这么写。Ma,然后后边呢,跟上我们的那个系统上配置的ma文的名称,你忘了或者是没配怎么办,在这儿点开。咱们的这个呃,Manageins,然后找到这个global global to configuration。这里边呢,就有这个ma稳啊,点一下mava安装,这里边name就是我在这儿需要填的这个它的这个标识啊,我们在这儿呢,这个叫MA3。然后下边这些呢,都不用管啊,这是我之前已经配置好的GI呢啊,可这个这是可以不配的啊,或者是你需要如果要配的话,就简单的配一下啊,在这个系统上装好给就可以了。
07:03
然后这个maven在这儿,我们引用进来,那接下来呢,在这个步骤呢,就需要去调用maven相关的命令,我们在这儿呢,先做一个简单的小测试,要执行ma的命令的话呢,需要调起这个,呃,Shell这个命令行有SH。猫这个两个这个呃。两个这个这个这个双引号把它给引起来,这表示执行一行这个shell命令啊,我们在这呢,用MVN试试杠杠version。啊,这样啊,如果要是能成功调取的话呢,啊,那真的这个就不会报错了,我们先测试一下,先一步一步来,这个我们在。开发项目的时候其实是一样的,别全写了,然后再一下跑,那那会儿就可能错错误一大堆了,先执行一下构建,我们看看在这儿,他在。输出的时候会不会有什么问题。看GI他去拉代码,这没问题,已经拉取成功了,Ma我们执行的这个SH命令啊,就shell命令啊,MVN杠杠version,他也能够正常的给我们打印出来啊,这说明我们现在在这儿去调用这个美文是没有问题的,那我们再退回去继续写咱们这个脚本。
08:20
哎,把它变大一点,MVN呢,现在能够正常调用,那么接下来给他打个包。那么在这个打包之前,我们先把这行给注释掉啊,这个脚本里边要用注释的话呢,啊,其实就是两个斜杠啊就可以了,这是单行注释,注释掉之后呢。我们写一个打包的这个命令,还是用这SH,然后MVN后边跟clean。然后package。啊,这样就可以了啊,在现在这块我们执行这个ma clean的时候啊,我们可能会想现在我在哪个目录下执行的,因为在ma mvn执行这个这种命令的时候啊,它需要在当前目录下有这个po文件,对吧,那我们可以先试一下,其实现在这个它的目录其实是在我们的这个workerpace下边的,我当前的这个job名称就是my pipeline,那么在这个my pipeline这个job下边才是我们这个这个真正的这个,呃,业务项目就是那个DEMO1的那个文件夹,所以现在是这个所处的这个路径啊,应该是不对的,我们先看一下。
09:32
保存完之后呢,我执行build。啊,这呢,这个太大了一面。然后看他这个输出。哎,我们看这出现错误了啊是吧,这大概意思就是你现在这地呢。他没有这个,呃,咱们的这个。Po文件对吧?你看当前这个目录是root my pipeline应该在下边下一集,那解决这问题的两种方式,第一个呢,是我们进入到呃,这个下一级目录,或者是加一个杠F对吧?那杠F,然后加上这个DEMO1,那么我们在这儿啊,给大家演示一下这个SH,呃,多行命令,也就是我让他。
10:24
手动的不是不是手动的啊,让他这个呃,进入到我们的这个DEMO1的这个目录下,然后再去执行它,那如果想要执行两行这个SH命令的话。如果你这么写啊,在这儿再搞出来一个,比如说CD。这个DEMO1。这个也是不行的,因为这个两个SH它没有关联着,这俩是两回事,也就说在执行第一个SH,你CD到这个DEMO1之后,那么在执行下一个这个SH的时候,它又回到了原来的那个工作目录下,那么这会儿就需要把这两个命令呢放到一起。
11:02
啊一起执行,那想要放到一起执行的话呢,在这儿用这种方式。在这儿加三个。双引号。然后这是多行命令,这再加三个双引号表示结束。那就第一个命令是CD啊,到这个DEMO1,第二个命令是执行这个package啊,然后我们保存测试一下。Builder。嗯,CD1没有这个目录。刚才。没删吗?然后再退回去啊。
12:00
啊。呃,这啊这这就不需要再加这个SH了哈。啊,这样,这是两个命令,一个是CD,一个是MVN,刚才我忘了把这SH给删掉了,来我们再保存试一下。来build。好,看这个输出。诶拉取成功了,然后再进入到这个目录里了。然后开始build了,对吧。哎,执行测试。没问题啊,Build success,然后并且给我们搞一个炸包出来了,DEMO一下target,然后DEMO1,然后snapshot就这OK,那么这第一步呢,我们就到到此呢就完成了build使用,没问去build我们这个项目啊,搞定,那么接下来我们再去把这个呃,打出来这个炸包呢,我们给它发到这个测试服务器上。啊,再去编辑一下我们这个项目。
13:02
不叫项目啊,叫job在这儿呢,呃,我需要用到那个,呃,这个这叫over SSH publisher,那那个插件了还记得吧,那么我想用这个插的话,是不是又可以到这个代码生成器里边去找。啊,呃,在这儿呢。哎,不是这个是这这代码生成器里,我们找到我们的那个插件,这里边有多少个选项,大家可以仔细看看,挺多的,那具体有多少个,这是根据你的,呃,当前这个。当前的这个这个呃,Jackins,呃,装了多少个插件来决定的,你装的插件越多,这能生成的代码也就越多啊在这呢,我们找一下这个over s sh那个往下。再往下。Publish check,不是这个。这个SSH publish send build artifact啊,然后oversh啊,这个呢。
14:05
嗯,怎么没出来。哎,我们刷新一下啊。啊,这个这这个重新打开一下。哎,再找一遍。Over SSH哎,出来了,在这儿呢,这个界面选择界面跟我们这个在那个web UI里啊是一样的,那么找到原来那个项目,直接把它给它复制过来就可以了,就这个first啊。然后在这配置。呃,坦率的讲,如果你要自己应声的去写的话,这东西挺难写的啊,用这个代码生成器呢,要简单的多,你看这个配置啊,我们给它搞成一样,首先这个服务器都是一个TS。然后如果你要没配的话呢,去配一个对吧,然后transfer去发送的文件,我们先第一步呢,是要把。
15:05
这个炸包给发过去是吧,粘过来这炸包在啊,这这炸包在我们的这个当前工作目录下啊,我不管是哪哪层目录下边叫DEMO啊,DEMO点的这个DEMO星点,这这当然可以也可以写那个绝对路径啊,也没问题,然后下边也粘过来。Remove。然后远程的这个目录给它给复制到哪儿,然后执行命令,在这儿呢,不需要执行命令,这是第一步啊,先把这个炸包发过去,然后还可以接着发,再发一个这个。Docker的这个啊,Docker file啊,这是在我们这个原码目录里,对吧?啊,我们直接呢,在这儿也是在添加一个。Transfer set,把这ER file也给发过去,然后。然后远程的目录,然后执行命令去启动这个刀客容器也粘过来。
16:06
啊,检查一下有没有丢的,应该没有。转过来,OK。然后再看看还有别的吗?没有了啊,这剩下就是什么email了,这个页面咱们先留着,然后接下来生成流水脚本。大家看这个流水线脚本啊,就特别长了,你想想如果要是让我们自己去写的话,这是不是挺费劲的是吧?来,我们粘过来。构建完成之后呢,发送炸包。Let。往这儿一粘。粘完之后把这个也改一下,这是这儿。Send over。感叹号,这是发送炸包,那么检查一下咱们那台服务器有没有起。啊,这是这台docker服务器应该是已经启动了是吧。呃,那保存。
17:00
然后接下来呢,溜达一下,然后我们切到那台刀客服务器上。Jack jacker这个。然后我们看一下这个它运行的这个状态啊,有没有什么问题。打包,然后构建。再然后开始send file,哎,这是unstable啊,稍微出了点小问题,不拉不拉,不拉不拉,这大概的问题猜可能也能猜猜到,我们看一下这个docker的镜像啊。这多了一个难的镜像啊,这个。应该是我们之前就已经有这个镜像了啊,有这个image了,没有做这个事先清理操作啊,把它先给删了是吧,那么在这我们先把这个镜像给删了。
18:00
R mi-F。ID转过来。嗯。It use by running还正在用着呢,是吧,Doer。杠啊,不是杠A。我们把这些先清一下啊,这个还正在运行的是DEMO docker stop。DEMO,然后docker RM DEMO。Docker heri DEMO全都给它清了,然后刀ER。把这个没名字的也给他清了。这是刚创建的,你判断它有没有刚创建,看这个时间就行了哈,啊,然后docker r mi-F。
19:05
把它也给清了,再看一下,现在应该是比较干净的状态了。嗯,看看。啊,现在一个也没有了,OK,那么呃,这运行的一个也没有了,然后这个看它。存在的也没有叫DEMO,这有一个叫DEMO的是吧,这个它。呃,顺便把他这个事先的这个清理脚本啊,咱也给他给扣过来。有一个p step对吧,把这个也给扣过来,嗯,这个call它的话,其实只靠命令就可以了啊。然后咱们在这儿呢。咱们的流水线里。在前面加一步。嗯,拉取代码,拉取代码执行构建,构建完之后发炸包之前。
20:02
嗯。都可以啊,或者是构建之啊,咱们在构建之后吧。然后再写一个stage。这是清理工作。Clean test server。然后再写一个step。然后在这呢,啊,咱们执行这个。SH。脚本。三个啊。把它给粘过来。这是全清了,然后发过去。嗯。然后启动的也在这儿是吧,其他的不用管了,我们再试一下保存。然后。
21:00
执行构建。Build。Let talk。看这个输出。呃。发送炸包,Skip deal as a field。然后他说啊,No such,这是在哪个阶段的,RRF,这个阶段是吧。清理阶段构建完之后清理,那这个错误其实倒还能接受啊,因为我们首次部署,因为它就没有这个镜像嘛,对吧,然后发过去。嗯,然后我们看看它这个镜像有没有我们创建出来。在这知道吧,刚这APPDEMO它没执行是吧。快,DEMO去了刀客。Me?
22:01
啊,他这个也没帮我们建是应该是S了对吧?啊前这个出了,所以就S掉了,那这最简单处理方式,我们就把这个清理的这个。啊,先不让它清理先生成一次对吧,然后再去,呃,这个这个执行这个清理。诶,我们注意看一下这个位置这儿,嗯,有点不太对啊,我们是直接把啊这边配置里的啊,它的这个command直接给它给复制过来了,这个command它其实是在远程服务器去执行的,那我现在清理的其实是咱们这个当前checks服务器上的这个这个这个这个这个docker的镜像和它的容器对吧,这不对啊,那我们还是需要再重新生成一个,呃,这个SSH什么overper。那在。咱们的代码生成器里啊,重新再生成一个。给这个给清掉啊,哎,我去怎么点没了。
23:05
啊,给它给清掉,清掉完,那我们重新生成,生成一个。这儿。啊,Test server,然后呃,Source file啊,复制粘贴吧,这里没有没有直接在root目录下这个复制过来。同学们,你们要注意这个问题哈,然后把这个。远程命令复制过来。嗯,其他的呢,就不需要了,对吧。检查一下啊,不需要了,然后把,然后我们生成个新这个这个脚本出来。来把它复制过去。在这这清理工作这啊。这删掉,然后粘上。粘完之后保存,然后再重新。运行一下,然后六的。
24:03
要找到他。看他的输出。我们刚才把那个工作目录清了,其实没关系,因为他每次都会重新拉这个新的这个K的代码拉回来。哎,大家看啊,这send over,然后finish OK,完全完全OK,没有问题了,然后我们在这刷新一下。也是没有问题的,然后看这个ins上的镜像。呃,刚刚创建的对吧?啊,这是我们通过pipeline,然后呢发送过来的啊。那么这个过程啊,我们还可以在呃,这个blue ocean里边去观察,这个在观察的时候啊,就会更直观一些了啊,你看每一个步骤拉取代码他都干干了嘛,对吧,然后GI参与的,然后拉取成功,这是我们打印出来的信息啊,包括我们use use to啊这会儿呢,他这引出了一个三啊,这会儿又给我们打印出来了,然后再执行构建。
25:08
这是构建的过程,然后这个清理啊。还有这个发送啊,整个呢,呃,完成全部都结束,当然也可以在这里边儿呢,我们去重新执行某一个过程啊,比如说我们执执行这个啊,重启clean test server,我们点一下你看。OK,然后发送炸包啊,它会从这儿开始,然后再去执行下边这个阶段是吧?啊清理完之后呢,并且把炸包给发过去了,你可以指定从某一个阶段让他重新去执行啊,那么这一讲呢,咱们就先讲到这儿。
我来说两句