1。拦截方式
强制进行代码检查,有两种方式:
<代码>将仓库托管在phabricator上,通过先驱的方式来进行 在代码托管服务器上增加钩来实现 由于我们的代码托管到gitlab上,所有我们采用第二种方式进行代码评审代码><人力资源/>
2。gitlab服务器端添加钩
<人力资源/><代码> gitlab添加钩的方式有两种: ,,局部添加,作用于当前这个仓库 ,,全局添加,作用于全部仓库,代码><人力资源/>
2.1局部配置
<人力资源/><代码> cd/电脑/gitlab/数据//根/pipeline-example-go git-data/存储库。git # # # gitlab服务端进入到具体的仓库路径下 mkdir custom_hooks, #创建自定义钩目录 触摸pre-receive,#创建pre-receive文件 chmod 755 pre-receive #修改文件权限 pre-receive 钩子,在有人用,git push 向仓库推送代码时被执行,其内容如下:代码><人力资源/>
<代码> # !/usr/bin/env python 导入系统,操作系统 进口fileinput 进口再保险 进口json 进口的要求 def has_been_reviewed (start_commit end_commit): ,,cmd=& # 39; git rev-list % s…% & # 39;% (start_commit end_commit,) ,国旗=False ,,提交=os.popen (cmd) . readlines () ,,模式=re.compile(" # 39;微分修正:(. *)& # 39;) ,的提交,提交: ,,,,cmd=& # 39; git rev-list——格式=& # 39;+ & # 39;% s % b & # 39;+ & # 39;——max-count=1% & # 39;%提交 ,,,,res=os.popen (cmd) . readlines () [2] ,,,,match_str=pattern.match (res) ,,,,如果不是match_str: ,,,,,,打印(“请使用& # 39;弧diff # 39;commit") ,,,,,,继续 ,,,,http_url=match_str.group (1) ,,,,url=癶ttps://xxx/api/differential.query?api.token=* * * * *”; ,,,,信息=json.loads (requests.get (url)。text) ,,,,我的信息[& # 39;结果# 39;): ,,,,,,如果我[& # 39;uri # 39;] !=http_url:继续 ,,,,,,如果我[& # 39;statusName& # 39;]==& # 39;接受# 39;: ,,,,,,,国旗=True ,,,,,,其他的: ,,,,,,,,print(“目前状况:% s,需要审查和Accepted"我[% & # 39;statusName& # 39;]) ,,,,,,打破 ,,如果国旗: ,,,,sys.exit (0) ,,其他的: ,,,,sys.exit (1) if __name__,==癬_main__": ,的线,fileinput.input (): ,,,,arg游戏=line.split (& # 39;& # 39;) ,,start_commit=参数[0] ,,end_commit=参数[1] ,,如果start_commit !=& # 39; 0000000000000000000000000000000000000000 & # 39;和,end_commit !=& # 39; 0000000000000000000000000000000000000000 & # 39;: ,,,,has_been_reviewed (start_commit end_commit) 代码><人力资源/>
<代码>代码解释: 1.git rev-list——格式=% s % b,——max-count=1, $ {commit_id} #获取git提交的提交信息,默认git commit - m后的信息,但是使用电弧diff之后,电弧diff的信息会覆盖之前的git提交的内容 2. requests.get (“https://* * */api/differential.query ? api.token=* * *“) #通过ph值的api接口获取到所有的微分信息,其中令牌可通过https://* * */管道/登录/获取 3 . #获取微分的信息之后,选取uri为当前提交的修改,若状态,表示代码审查通过,退出程序,返回状态码0,表示不拦截 4.#若获取状态不为接受,则返回状态码非0,表示执行失败,拦截git push请求代码>
,, * * *
2.2全局配置
<人力资源/><代码> 1。开启gitlab的自定义钩参数 vim,/etc/gitlab/gitlab。rb,#配置如下 gitlab_shell [& # 39; custom_hooks_dir& # 39;]=?opt/gitlab/嵌入式/服务/gitlab-shell/钩/custom_hooks" #取消这行注释,默认是注释 2.mkdir - p,/opt/gitlab/嵌入式/服务/gitlab-shell//custom_hooks/pre-receive hook。d, #创建目录 3.触摸/opt/gitlab/嵌入式/服务/gitlab-shell//custom_hooks/pre-receive hook。d/pre-receive, #创建文件pre-receive 4.chmod 755/opt/gitlab/嵌入式/服务/gitlab-shell/钩/custom_hooks/pre-receive.d/pre-receive 5.pre-receive #文件内容如上 6.gitlab-ctl重新配置,#重新加载gitlab的配置,使配置生效代码>