Hooks脚本
在服务器下的/srv/gitlab/data/git-data/repo../@hash/xxx.git/下创建custom_hooks文件夹,里面创建pre-recevie
#!/bin/bashvalidate_ref(){# --- Argumentsoldrev=$(git rev-parse $1)newrev=$(git rev-parse $2)refname="$3"commitList=`git rev-list $oldrev..$newrev`echo '****************'echo $commitListecho '****************'split=($commitList)rm -rf target.txtfor s in ${split[@]}do#echo $secho $s >>./target.txtmsg=`git cat-file commit $s | sed '1,/^$/d'`echo $msgpython3 pre-receive.py "$msg"if [ $? -eq 1 ]; thenexit 1fidone#python3 scp.py#cp target.txt /home/gitlab/target.txtexit 0}if [ -n "$1" -a -n "$2" -a -n "$3" ]; thenPAGER= validate_ref $2 $3 $1elsewhile read oldrev newrev refnamedovalidate_ref $oldrev $newrev $refnamedonefi
日志校验脚本
在.git目录下(也就是custom_hooks上层目录)创建pre-recevie.py,给予最高权限
vi pre-recevie.pysudo chmod 777 pre-recevie.py
代码为:
# !/usr/bin/env python3# _*_ coding:utf-8 _*_"""@createTime : 2021/11/1 10:23@Author : waldeincheng"""import osimport reimport sys# TODO# 第一步,截取出message信息,判断message符不符合规范,整体跟svn差不多# 第二步,静态代码检查,目前没有方案# 第三步,扫描注释符不符合要求,占代码量的多少# 截取提交message信息class PushCodeReview:def __init__(self):passdef log_verify(self):# print('********************argv*****************')#print(sys.argv[1])log = sys.argv[1]#print('*****************************************')#log = ['【问题描述】:test\n【提交类型】:BUG\n【对应版本】:ALL\n【问题单号】:Fix Bug #222\n【问题原因】:test\n【修改方案】:test\n【自测过程】:自测ok\n【是否必现】:否\n【发布说明】:否'][0]if re.search('【问题描述】:.+\n【提交类型】:.+\n【对应版本】:.*\n【问题单号】:.+\n【问题原因】:.+\n【修改方案】:.+\n【自测过程】:.+\n【是否必现】:.+\n【发布说明】:.+',log):result = log.split('\n')desc,submitType,platform,pro_id,reason,solved,test,isSeed,isPublish = result# 日志的详细信息处理# 提交类型if not re.fullmatch('BUG|LDOC|任务|需求修改|版本升级|代码整理|解决编译不过|阶段性提交|追加提交',submitType[7:]):print('提交类型错误\n')self.error_report()sys.exit(1)# 对应版本if not re.fullmatch('AT|Lua|ALL|CSDK',platform[7:]):print('对应版本错误\n')self.error_report()sys.exit(1)# 问题单号if not re.search('Finish|Start|Effort|Fix',pro_id[7:]):print('问题单号错误\n')self.error_report()sys.exit(1)# 是否必现if not re.fullmatch('是|否',isSeed[7:]):print('自测过程错误\n')self.error_report()sys.exit(1)# 发布说明if not re.fullmatch('是|否',isPublish[7:]):print('发布说明错误\n')self.error_report()sys.exit(1)else:print('提交格式错误,请检查格式')self.error_report()sys.exit(1)sys.exit(0)def error_report(self):print('正确格式为:')print("""【问题描述】:问题描述,对外发布说明,非研发人员能看懂的内容【提交类型】:BUG/任务/LDOC/需求修改/版本升级/代码整理/解决编译不过/阶段性提交/追加提交【对应版本】:ALL/AT/Lua/CSDK【问题单号】:Fix Bug #1 / Finish Task #1 Cost:10h【问题原因】:问题出现的原因,如果是BUG 必须填写【修改方案】:问题修改的方案,如果是BUG 必须填写【自测过程】:自测的过程【是否必现】:是/否【发布说明】:是/否(是,会添加到发布说明)""")if __name__ == '__main__':demo = PushCodeReview()demo.log_verify()
