一般公司项目都有固定的日志格式,一来方便回溯问题,二来美观,便于后续的一些任务触发等。鉴于公司的特殊的日志格式,利用gitlab默认的git hooks进行日志校验,日志格式不正确直接被拒绝提交。

Hooks脚本

在xxx/git-data/repo…/@hash/xxx.git/目录下创建custom_hooks文件夹,在文件夹里创建pre-receive文件,不要后缀名(此目录为docker按照gitlab项目的映射目录)

#!/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 ]; then  exit 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 $1
elsewhile read oldrev newrev refnamedovalidate_ref $oldrev $newrev $refnamedone
fi

上述脚本用于拦截日志,然后交给python脚本去处理

日志校验脚本

# !/usr/bin/env python3
# _*_ coding:utf-8 _*_
"""
@createTime     : 2021/11/1 10:23
@Author   : waldeincheng
"""
import os
import re
import 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()

后记

此脚本具有针对性,可借鉴参考,具体要根据自己项目的格式来修改

运维篇(二):git hooks之pre-receive脚本校验日志格式相关推荐

  1. spring Boot 2 运维篇(spring boot程序的打包与部署,多环境开发配置文件的配置,spring boot集成日志框架)

    目录 1.SpringBoot程序的打包与运行 程序打包 程序运行 SpringBoot程序打包失败处理 命令行启动常见问题及解决方案 SpringBoot项目快速启动(Linux版) 2.配置高级 ...

  2. centos7 如何安装部署k8s_架构运维篇(五):Centos7/Linux中安装部署RocketMQ

    上一篇 架构运维篇(四):Centos7/Linux中Tomcat安装SSL证书实践 这一篇讲一下在Centos7/Linux安装RocketMQ,MQ的具体应用场景和使用就不再啰嗦了.我在没有使用过 ...

  3. 视频教程-Prometheus+Grafana企业级监控实战(运维篇)2020年视频教程-Linux

    Prometheus+Grafana企业级监控实战(运维篇)2020年视频教程 资深DevOps工程师,曾经在华为,乐逗游戏工作,目前就职于知名物流公司工作 希望结合工作实践 给大家带来很多干货 周龙 ...

  4. 蚂蚁金服 Service Mesh 大规模落地系列 - 运维篇

    <蚂蚁金服 Service Mesh 大规模落地系列>将会从核心.RPC.消息.无线网关.控制面.安全.运维.测试等模块对 Service Mesh 双十一大规模落地实践进行详细解析,文末 ...

  5. Nginx运维之二 简单安装和环境搭建

    Nginx运维之二 简单安装和环境配置 安装环境 gcc 安装 PCRE pcre-devel 安装 zlib 安装 OpenSSL 安装 下载安装 配置安装 编译安装 配置编辑(案例) 启动与停止 ...

  6. java安装不上有关故障排除,Java有关问题排查(运维篇)

    Java问题排查(运维篇) 每一位开发想必都会遇到线上服务告警,而导致这样原因的肯能有流量增加或是代码中bug异常没有抓住导致,而此刻我们就需要去排查问题. 1:业务增加,导致FGC频繁发送,如果不知 ...

  7. 【运维篇】Docker知识点万字吐血大总结,学完阿里叫我明天去入职

    一.Docker概述 1.1.虚拟化技术发展史 在虚拟化技术出现之前,如果我们想搭建一台服务器,我们需要做如下的工作: → 购买一台硬件服务器. → 在硬件服务器上安装配置操作系统系统. → 在操作系 ...

  8. 《Linux运维篇:Linux系统运维指南》

    一.Linux运维之知识篇 二.Linux运维之系统篇 <Linux运维总结:使用U盘制作Linux镜像> <Linux运维实战:创建LVM挂载到指定目录> <Linux ...

  9. 解读 2018 之运维篇:我们离高效智能的运维还有多远

    2018 年接近尾声,InfoQ 策划了"解读 2018"年终技术盘点系列文章,希望能够给读者清晰地梳理出重要技术领域在这一年来的发展和变化.本篇文章是运维领域 2018 年终盘点 ...

最新文章

  1. 怎么用python处理excel文件-如何用python处理excel表格
  2. Tomcat8中的并发ConcurrentDateFormat的实现
  3. Linux下程序包管理工具RPM
  4. bin二进制文件的运行
  5. 没有PARAMETER ID,想 call TRANSACTION
  6. 排序箭头,升序,降序简单实现
  7. Mac下PyCharm CE 配置PyQt5环境
  8. Python菜鸟之路:Python基础-Python操作RabbitMQ
  9. Java春招实习面试经验汇总,面试篇
  10. 安卓dalvik和art区别
  11. 【Recat 应用】之 React 脚手架
  12. XXE漏洞攻击与防御
  13. 算法_深度LSTM笔记[博]
  14. 用C语言编写约瑟夫环程序,约瑟夫环C语言,请高手检查我的程序
  15. 软件工程专业和网络工程专业的区别
  16. Python股票基金数据分析 爬虫 基金对比 Django框架 数据可视化
  17. MySQL学习(2)——MySQL表的增删查改(基础)
  18. 生活不止眼前的苟且,还有诗和远方。如何理解?
  19. LeetCode151|翻转字符串中的单词III
  20. 模板引擎--新闻案例

热门文章

  1. archlinux 安装ssh
  2. 2023年全球及中国盐酸格拉司琼(试剂)行业头部企业市场占有率及排名调研报告
  3. Python IDE 安装 PyCharm 的正确姿势以及更新方法
  4. ubuntu16.04开发环境总结
  5. html 换行特殊符号,html中的换行符号
  6. face detection[DSFD]
  7. Dubbo负载均衡的总流程
  8. 赫夫曼树的创建,赫夫曼编码的原理及使用
  9. 客户流失定义和详细分析
  10. 〈孙子兵法〉与〈三十六计〉