00:00
嗨,同学们,前面呢,我们把手动的去做这个整体的构建给大家,呃,研究明白了,那接下来呢,我们来看看如何做这种自动化的构建,那这种自动化的构建呢,嗯,其实并不是那么特别的实用,我们来给大家来看一下啊,主要是两种,第一种呢,就是提交代码后,我们在IDE里提交代码后之后呢,呃,由我们的jacks去get服务器上去拉取代码,拉取源码,然后呢,自动化构建,并且部署到我们的测试服务器上,这是第一种啊,第二种就是。呃,根据呃,某些具体的事件,比如说我们的合并事件啊,在合并源代码的时候,我们在get上去操作合并啊来看这。啊,在这个。呃,G的服务器上,当我们发起这个合并操作的时候,然后再让他去自动化的构建啊,也就是在这上边,比如说呃,这个合并对吧,然后创建一个新的合并请求,然后把两个分支上的这个源码去做一次合并啊,在合并的时候去做自动化的构建,那我们先来看第一个啊,如果想要完成自动化构建的话,那么就一定要有呃,外部的事件去调起我们的jackins,让jackins去执行构建。那我们看这。
01:19
呃,这有一个触发器,构建触发器,我们前面呢,呃没有用到这个触发器是我们纯粹的手动去构建的,首先我们先看这这个这种方式,就以这个,呃,这叫什么web hook,或者叫回调钩子的这种形式当呃。我们产生了某些事件之后,让他去调取远程的这个jacks服务器,让他去完成自动化构建这个。触发远程构建,比如说使用脚本这种形式呢,就可以给我们公开或者是发布出来一个URL,由我们的另外一台服务器去调用它,那我们在这儿勾选了它之后呢,这里边去需要去验证身份啊,在这儿呢提供一个令牌,比如我们在这呢写个123123。
02:06
这就是访问令牌,访问密码,在下边也有案例,就是前面jacks URL,就是我们整整个这个项目的地址,然后后边跟上job,再跟上first,这个first是咱们的当前的啊,这个构建项目的名称,然后后边是build,然后Ken,然后加上Ken name,这个Ken就是Ken。啊,在这呃,发起一个get请求,这样就可以了,然后或者用这个build with parameter也可以后边跟上我们这个token,那么我们在这儿呢,给它添加了一个令牌,123123,我们保存一下,大家看一下就明白了。我们现在当前有这么一个窗口,对吧,我们再开启另外一个新的窗口。然后粘贴这个地址,嗯,然后后边后边要跟这个token是吧,我们把这URL呢给它复制过来。
03:03
Job job job first build,然后token等于啥?这。啊,Token等于我们刚刚呃设置的123123啊。然后我们退到当前的这个任务执行的,呃,队列队列这个观察这啊,我们看这个左下角在这儿。如果我。呃,在浏览器上访问这个地址,它能够给我们创建出来任务的话,就说明我们调用成功了,对吧?然后我们在下一步的,我们的下一步呢,就是把这个地址给它扔到gila服务器上,当有代码提交的时候,去调用这个地址就可以了,对吧?来我们敲一下回车。它什么都没显示,但注意看左下角有没有变化,哎,看构建队列出来了对吧?啊,这里边呢,有这么一个正正准备进行构建的任务,然后呢,这是正在构建的任务,然后这first,这和我们之前手动去点击这个运行按钮其实是一样的,那么这样呢,就完成了我们最基本的远程的调用啊,我们把这个调用地址一会儿配到这个jacks里,不是配到这个get lab里,那么就可以了。
04:18
那那他这个地址啊,我们现在这么直接访问是没有问题的,但其实这里边儿还有另外一个问题就是。因为我现在已经登录到当前系统了,比如说你看我现在访问这个地址是可以的。那么我们退回到这个首页,它是已经登录状态对吧,那如果我们换一个浏览器。啊,或者是我换成这个postman,你试一下,这可能就不行了,相同的地址你看。嗯,这。这个地址对吧,我们把它放到。另外一个浏览器里,因为另外一个浏览器呢,它没有绘画,没有登录到。当前的这个jackets上,你看我敲一下,它会提示让我登录。
05:00
或者是我给他换到postsman里,你看。这postman呢,就相当于是一个第三方的客户端了,当然这个浏览器也是那么直接调用,呃,想让他去开始这个构建的话,你看它是不是也提示当前没有权限。嗯。我们新建一个请求。地址。然后直接send。你看。嗯,肉看这个肉里啊哦。就需要验证我们的身份,然后在这呢,呃,会有location,就是跳转到登录页面了。也就是我们在没有登录的状态下呢,现在没有权限去调用这个地址的啊,对吧,那么接下来咋整,如果把这地址填到get lab里,其实它也是其实啊,它也是呃不生效的,那怎么整呢?我们可以利用另外另外一个插件。
06:01
呃,这个插件去我们的市场去找一下,在呃,Managers里,然后这个里,然后可选插件,我们在这儿啊,装这么个东西的build啊这啊build o。Build OS。诶,现在这个是。Build token root是这个啊,这个插件。Buildken root,但是现在这个怎么没有出来build。那我们在。再来一下build OS。嗯,咱们把这个啊,这会儿大家看啊,这会儿他已经出来了,对吧,如果你你也这个搜不着。你可以试试这个这个这个多来两下啊,因为它这是发起的异步请求嘛,有可能网络有问题,这个build OS token root啊,我们把它给勾上,然后接下来install without restart这个插件主要的功能它就是啊,让我们启用了那个token之后,然后可以免登录,就不再会出现这种问题了。
07:19
啊。呃,你点开看一下,这里边儿有它的文档,具体怎么用。我们先把它给装上。那稍微等这么一小下。在这儿呢,我们顺便看一下这个文档吧,啊就大概意思就是呃,可以匿名的去访问我们当前这个系统,并且启用这个呃,比较高的权限,那前提呢,就是我们开启了刚才的那个,呃,这个以token的方式去开始构建啊这种方式,然后访问的URL呢,有这么几个都可以,你看这个job后边跟上具体的名称,然后build后边再跟这个token。啊,然后还有这个build by token啊,后边跟build,然后以参数的形式去传递进来job name,然后还有这个token,这个token就是我们刚刚在系统里啊,不是系统啊,就是在这个任务上啊,配置的那个token就是123123啊现在呢,这个插件已经装完了,然后我们再试一下。
08:18
这之前它提示的是,呃,没有权限,对吧,来我们。在发送请求。啊,当然现在呢,他还是,呃,让我们登录啊,这是地址的问题,我们用这个地址就build by token。复制一下。在这后边build by token。啊,然后token呢,我们跟上123123,然后job name,我们那个first。然后再发送请求大家看,哎,这会儿呢,就已经不提示我们报错了,我们赶紧退回来看一下当前任务有没有正在执行。
09:03
嗯,稍微等一下。诶,好像没出来吧,我们再发一下啊来走。哦,好像还是哦,这是我们拼错了啊,First first。来,再来。哎,这个名字不能填错啊,你看我们填的这个名字现在填对了,然后现在就开始帮我们去构建了,那么这会儿就可以匿名的以token的形式让他去帮我们。嗯,构建这个项目了啊,那么接下来把这个地址我们放到这个。这个咱们的这个git lab上。让git lab去发起这个回调事件,也就是我们在提交代码的时候,比如说我们用IDE提交代码,然后让它能够自动的发送通知,通知到我们这个jackins。
10:02
那这个怎么做呢?就点找到我们这个具体的项目,然后下边有这个设置。在这设置里边有这个web hooks,这就是回调钩子。啊,这什么叫回调钩子,就是产生了事件之后啊,它会掉一下。我们先给它配上,然后我们就能看出来这个效果了,首先这个地址我们给它粘上。哎,是这个。来给它粘上,粘上之后呢,这个令牌在这儿呢,就不需要填了,因为我们这个token啊,直接跟在这个整个的URL上了。然后这个有个触发的事件来源,比如说推送事件,这推送事件指的就是我们在提交代码push的时候啊,一旦要是产生了这个push操作,那么他就会被吊起当前的事件,并且去通知这个URL,他就会调这个URL。那或者是什么的这个标签推送事件,就那个tag,或者有人发送评论了,或者私密评论等等等等这些,然后还有另外一个就是合并啊,我们合并了一些这个。
11:03
这个这个这个请求啊,那么在这儿呢啊,也会发起这个事件,然后去调我们这个月啊。啊,那么我们先勾这两个啊,我们试一下把这个SSL这个我们先给它取消掉,因为我们现在就是普通的HTP嘛,对吧,没有用到HTTPS,然后web hook添加一个。点击添加之后啊,就如果你是刚装的这个B,并且这版本跟我一样,然后在这呢,它会提示ul block request to the local network not,这并不是说我们现在这个U地址URL填错了,它是本地的请求啊,它这个呃,不支持,那这个咋整,我们可以这么干。在菜单注意看,在这个最左侧的菜单上切到管理员身份。切到管理员身份之后呢,这这里边儿有设置。我们可以配置一下网络,让它允许调用本地的请求。
12:03
再看这出战请求。展开,这有来自允许来自web hook和服务对本地网络的请求,把它给勾上。然后保存更改,其他的不用动,然后我们再退回到刚才的这个。项目管理界面里再重新去添加他的这个web hook。地址单上推送事件。还有这个合并请求事件。诶把这个SSL给去掉,然后添加。这会儿就可以添加上了,大家看这就有一个,呃,这个web hook可以让我们去使用了,在这呢,还可以测试一下,我们把这个给它给拉出来。然后接下来呢,呃,我们在这儿啊,这个任务还没还没执行完是吧,给它给干掉,我们在这儿呢,顺便观察一下。现在的这个任务状态。啊,来我们测试你看。
13:00
先发送一个这个push请求。我们看这边儿有没有,哎,是不是就已经有了,对吧。然后我们再发一个这个。呃,Tag不行啊墨啊用这个请求,这合并请求,来我们再发一个。哎,这是不是也就也有了啊,这这是在队列的这个状态,等他完了,然后他再开始。是吧,来这个,呃,在get lab上呢,我们的配置呢,到这呢就已经结束了,接下来呢,我们再。测试一下,真正的我们去提交代码,他能不能帮我们去,呃,把这个请求给合并过来。那现在是hello world at硅谷,然后。嗯,在这呢,再加一个移民哥艾特艾特硅谷,然后CTRLS保存一下我们的代码,然后提交到get服务器上。K。然后commit and push。注意看这。
14:05
看他有没有,哎,是不是出来了,正在执行这个构建啊,并且它会调用我们之前那个清理脚本。然后接下来我们就能直接看到我们刚刚提交上来这个代码在测试服务器运行的这个状态了。嗯,测试服务器是104吧,8080。来,稍微等一下他结束。怎么还没完?再稍微等一下。结束了,来看。呃,Hello word at硅谷222,这怎么和我们刚刚提交的代码不太一样呢?嗯,哦,因为没有合并嘛,对吧,他拉出来的还是那个主分的那个代码对吧,那我们接下来再合并一下。
15:06
创建一个合并请求。嗯。来看这。刚刚已经提交到,应该是已经提交到master上了,我们看一下DEMO。然后src。我们的这个代码。闷。这里的controller对吧,这已经正常提交上来了,然后接下来呢,合并一下。嗯。这个比较合并。啊,这是已合并的合并请求,那么去创建一个合并。然后找到我们之前的这个。分支分支。啊,然后给它合并到我们的这个主分支上。然后在这儿。
16:00
呃,创建个和平请求。哦,现在他说这个。出现这种问题啊,我们,嗯,一般来说,它是因为有之前的这个请求合并没有完成,我们检查一下啊,果然在这儿啊,有一个合并请求,它是以前我们已经批准过了,你点开看一下,批准过之后呢,但但是啊,并没有真正的合并,对吧,把钱之前这个钱给他给合并了。啊,正在准备合并,把之前这些合并完之后呢,然后再重新去合并,大家看我把即使是把之前的这个代码给合并了,它也会。调起这个,呃,这个这这个任务对吧,然后再看这个合并请求里,这就已经没有了,对吧。啊,然后我们再新建一个合并请求原分支哦,他把这个已经删了,那我们再重新提交一下。嗯,稍微改一改代码来CTRLS。然后team。
17:00
你看这会儿其实就已经有点挺烦的了,我每次提交代码,他都会帮我们去调起这个任务是吧。Push。Push完了,然后再看这个我们的项目。嗯。再去重新创建这个和平请求。然后再去合并。大家注意看啊,这个任务是我在创建合并请求的时候,他就会给我们创建一个新的这个构建任务出来,我们还没有真正的合并。啊,等在真正的合并的时候,还会再去重新给我们创建一个这个啊,这这这个这这个构建任务。啊,所以这个里边呢,它会有重复。对吧。你看合并完,现在已经合并完了,又给我创建出了一个,呃,任务队列里边的这么一个任务,又去重新的去构建了一遍。对吧,这样其实有一点重复的这种操作啊,然后一会儿我们再仔细的来看一看,你看它,呃,构建完之后,我们这个代码它是不是最新的。
18:12
哎,OK,首先。哎,现在是不是就已经是最新的了,艾特硅谷两个感叹号。艾特硅谷两个感叹号对吧,屌不屌?那现在我们再仔细分析一下,其实这里边是有问题的,首先第一件事儿,我们在提交代码的时候就让他合并,这并不合理,尤其是在真正的工作的时候,你们不可能你每提交一次都让他给执行一次这个呃构建任务啊,这样太浪费咱们这个系统的资源了,是吧?然后第二个事儿呢,就是在合并的过程当中,它其实是呃,在就是合并分支的过程当中,其实它是呃调取了多次任务的,我们先第一个一个来看。首先第一个事儿,我们把。呃,他的这个。这个事件把。
19:02
Push事件先给它给取消掉,也是在提交代码的时候,他就不再去帮我们去构建这个,呃,这个这个这个炸包了,对吧,现在只留一个合并事件,然后我们再看这个合并时间里边是创建更新或合并。合并或合并请求都会去调取我们这个钩子啊,其实这个也是有问题的,我们先把这个。呃,推送呢,我们先把它给勾掉啊,来我们保存。然后接下来我提交代码,你看他还会不会给我们去,呃,创建任务啊hello word。Hello word吗?然后加几个问号,CTRLS,然后提交代码。K。OK,代码我已经提交上来了,大家主要这这个注意要看这个左下角任务呢,并没有这个自动的被创建对吧。
20:00
然后我们再看项目。代码提交上来了之后,你看我要去创建合并请求了,接下来我要去合并代码,你看我点一下合并。走。注意我刚点了一下,你看他这边有没有任务。这会儿他是没有任务的,对不对,因为还没有真正的去创建,那我接下来真正的去创建一个合并的请求出来走。注意,这会儿任务已经开始执行了。我现在还没有真正的合并,因为这第一是没有批准,第二呢就是没有真正的合并,只是任务创建出来了。对吧,然后他现在就开始给我执行这个这个这个合并的操作了,所以由此可见,只要是创建出来任务,他就会去帮我们去构建项目。对吧,然后在这儿呢,它是其实是多了一次,然后在这真正的合并之后,他还会再去给我们创建一次这个合并任务,你看走。
21:02
来是吧,所以由此可见啊,我们现在这个,呃,这个想要让它达到我们自动合并,并且自动去呃构建项目的话,在现在的这个GI lab这个版本里边是没法配置,只有在我手动合并完成之后,然后去调取这个回调钩子的,那说白了就是现在这个功能啊,并不是特别实用啊,在这儿呢,我们可以用一些其他的方法去规避一下这个问题,人第一呢,就是我不用它这个回调钩子啊,我在这合并完成之后呢,手动的去。呃,这个执行这个队列任务,然后第二个呢,就是啊,我可以在这个。执行构建任务的时候呢,啊,也是不用这个触发器,比如它这个回调钩子,而是定时啊,我可以按照某个时间,比如说每天晚上凌晨12点,让他去自自动的去构建一次,也就是项目如果比较大的话,我们如果要是这么频繁的去构建,是非常非常浪费这个系统资源的。
22:03
啊,那么要么是定时构建,要么就是去手动构建。好。呃,当然呢,还有另外一种方式,那就是我们去提交这个,呃,提交代码的时候就往get上,提交代码的时候,我们当然是往另外一个分支里去提交,在另外一个分支提交代码的时候呢,我们可以不让他去构建啊。往往这个主分支提交代码的时候呢,我们在自己的本机去合并完成之后再去提交之后,然后再去,呃,调取他的这个回调事件啊,然后去触发这个呃,这个这个构建任务,这样也可以。但是这样的话呢,就需要我们其中有一个人,他的这个机器里边有完整的相关的代码啊,这样才可以,不管你用哪种方式啊,其实都可以,但是让他这么去自动化的构建的话,肯定是不行的,主要就是因为你看这个配置里。这个webx里。
23:01
他把合并。这个事件啊,它统一分类了,创建更新,或者真正的去合并这三个事儿,他都会去调我们这个,呃,这这这这个地址也是会触发这个事件啊,都会去重新的去构建我们整个的项目,这样其实是有一次浪费和没有必要的,那么我接下来再去研究一下其他的方式去呃触发构建这个整体的这个项目。
我来说两句