phabricator强制进行code review的方法
发表于:2025-02-07 作者:千家信息网编辑
千家信息网最后更新 2025年02月07日,1.拦截方式强制进行code review,有两种方式:将仓库托管在phabricator上,通过herald的方式来进行在代码托管服务器上增加hook来实现由于我们的代码托管到gitlab上,所有我
千家信息网最后更新 2025年02月07日phabricator强制进行code review的方法
1.拦截方式
强制进行code review,有两种方式:
将仓库托管在phabricator上,通过herald的方式来进行在代码托管服务器上增加hook来实现由于我们的代码托管到gitlab上,所有我们采用第二种方式进行code review
2.gitlab server端添加hook
gitlab添加hook的方式有两种: 局部添加,作用于当前这个仓库 全局添加,作用于全部仓库
2.1 局部配置
cd /srv/gitlab/data/git-data/repositories/root/pipeline-example-go.git ###gitlab serve端进入到具体的仓库路径下mkdir custom_hooks #创建自定义hook目录touch pre-receive #创建pre-receive 文件chmod 755 pre-receive #修改文件权限pre-receive 钩子,在有人用 git push 向仓库推送代码时被执行,其内容如下:
#!/usr/bin/env pythonimport sys,osimport fileinputimport reimport jsonimport requestsdef has_been_reviewed(start_commit, end_commit): cmd = 'git rev-list %s...%s' % (start_commit, end_commit,) Flag = False commits = os.popen(cmd).readlines() pattern = re.compile(r'Differential Revision: (.*)') for commit in commits: cmd = 'git rev-list --format=' + '%s%b ' + '--max-count=1 %s' % commit res = os.popen(cmd).readlines()[-2] match_str = pattern.match(res) if not match_str: print("Please use 'arc diff' to commit") continue http_url = match_str.group(1) url = "https://xxx/api/differential.query?api.token=*****" info = json.loads(requests.get(url).text) for i in info['result']: if i['uri'] != http_url: continue if i['statusName'] == 'Accepted': Flag = True else: print("Current Status: %s, Need Review and Accepted" % i['statusName']) break if Flag: sys.exit(0) else: sys.exit(1)if __name__ == "__main__": for line in fileinput.input(): args = line.split(' ') start_commit = args[0] end_commit = args[1] if start_commit != '0000000000000000000000000000000000000000' and end_commit != '0000000000000000000000000000000000000000': has_been_reviewed(start_commit, end_commit)
代码解释:1.git rev-list --format=%s%b --max-count=1 ${commit_id} #获取git commit 的提交信息,默认git commit -m 后的信息,但是使用arc diff 之后,arc diff的信息会覆盖之前的git commit 的内容2.requests.get("https://***/api/differential.query?api.token=***") #通过ph的api接口获取到所有的differential 信息,其中token 可通过https://***/conduit/login/ 获取3.#获取differential的信息之后,选取uri为当前提交的revision,若状态Accepted,表示代码review通过,退出程序,返回状态码0,表示不拦截4.#若获取状态不为Accepted,则返回状态码非0,表示执行失败,拦截git push请求
***
2.2 全局配置
1.开启gitlab的自定义hook参数vim /etc/gitlab/gitlab.rb #配置如下 gitlab_shell['custom_hooks_dir'] = "/opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks" #取消这行注释,默认是注释2.mkdir -p /opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks/pre-receive.d # 创建目录3.touch /opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks/pre-receive.d/pre-receive #创建文件pre-receive 4.chmod 755 /opt/gitlab/embedded/service/gitlab-shell/hooks/custom_hooks/pre-receive.d/pre-receive 5.pre-receive #文件内容如上6.gitlab-ctl reconfigure #重新加载gitlab的配置, 使配置生效
仓库
代码
信息
方式
配置
文件
状态
内容
托管
作用
全局
局部
注释
目录
强制
参数
如上
接口
服务器
权限
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
河南服务器电源企业
网络安全检测平台技术要求
数据库文档设计工具
银行数据库教程应用业务场景
易语言删除数据库文件夹
什么叫网络安全和执法
5g网络安全闭环
数据库信息安全运维内容
网络安全教育项目
软件开发长沙哪个学校好
化妆品防伪溯源软件开发
网络安全博览会的亮点和神器
电脑构建服务器软件
汽车电子公司软件开发
统计开票数据库
江西常见软件开发销售价格
软件开发项目优化方案
企业网络安全隐患国外现状
网络安全标准化课程
万象酒店服务器配置
数据库和前面学的关系大吗
vs2017数据库连不上
易语言删除数据库文件夹
软件开发有相对应的成本马
优稳数据库
图形数据库如何存储数据
网络安全威胁信息格式规范
网络安全周启仪式视频
联想服务器系列
switch玩暗黑2与服务器