• Gitlab配置pre-receive钩子拦截检查提交日志是否满足规范


    Gitlab配置pre-receive钩子拦截检查提交日志是否满足规范

    环境说明

    Gitlab docker: gitlab/gitlab-ee:15.4.2-ee.0

    参考链接

    Gitlab Docs - Git server hooks
    Gitlab pre-receive webook 的添加与使用

    选择钩子文件夹

    1. 决定钩子文件存放路径的配置文件存在/etc/gitlab/gitlab.rb文件中,我们需要打开它进行编辑;
      在终端中输入:
    vi /etc/gitlab/gitlab.rb
    
    • 1
    1. 如果提示没有找到vi,则需要安装vim;
      使用如下命令安装vim:
    apt-get update
    apt-get install vim
    
    • 1
    • 2
    1. 进入gitlab.rb文件的编辑页面后,输入/custom_hooks_dir,点击回车,会直接跳到配置行,默认如下所示:
    #gitaly['custom_hooks_dir'] = "/var/opt/gitlab/gitaly/custom_hooks"
    
    • 1

    我们需要把前面的#符号去掉,表示应用这条规则;

    gitaly['custom_hooks_dir'] = "/var/opt/gitlab/gitaly/custom_hooks"
    
    • 1
    1. 保存文件,点击键盘上的esc按钮,输入:wq,回车,保存完成;

    创建全局服务器钩子

    1. 打开/var/opt/gitlab/gitaly/custom_hooks文件夹
    cd /var/opt/gitlab/gitaly/custom_hooks/
    
    • 1
    1. 新建文件夹pre-receive.d
    mkdir pre-receive.d
    
    • 1
    1. 添加脚本文件pre-receive-commit-message-check
    vi /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d/pre-receive-commit-message-check
    
    • 1
    1. 输入脚本内容,并保存
    #!/bin/bash
    
    zeroCommit='0000000000000000000000000000000000000000'
    mergeRegex='^(Merge)(.{1,})'
    contentRegex='^(feat|fix|docs|style|refactor|perf|test|build|ci|chore|revert)(\(.{1,}\))?:\s?(.{1,})'
    
    while read -r oldrev newrev refname; do
    
    	echo "开始检查提交信息..."
    	echo "您提交的分支为:$refname"
    
    	# Branch or tag got deleted, ignore the push
    	[ "$newrev" = "$zeroCommit" ] && continue
    
    	# Calculate range for new branch/updated branch
    	[ "$oldrev" = "$zeroCommit" ] && range="$newrev" || range="$oldrev..$newrev"
    
    	for commit in $(git rev-list "$range" --not --all); do
    		user=$(git log --pretty=format:"%an" $commit -1)
    		commitDate=$(git log --pretty=format:"%cd" $commit -1)
    		msg=$(git log --pretty=format:"%s" $commit -1)
    		flagMerge=$(echo $msg | grep -E "$mergeRegex")
    		flagPush=$(echo $msg | grep -E "$contentRegex")
    		if [ -z "$flagPush" ] && [ -z "$flagMerge" ]; then
    			echo "[ERROR]"
    			echo "[ERROR]由于这份提交日志不规范,本次提交被拒绝"
    			echo "[ERROR]$commit in ${refname#refs/heads/}"
    			echo "[ERROR]提交者:$user"
    			echo "[ERROR]提交日期:$commitDate"
    			echo "[ERROR]提交日志:$msg"
    			echo "[ERROR]提交信息检查不通过!!!"
    			echo "[ERROR]请按照规范修改提交日志后重新尝试提交。"pre
    			echo "[ERROR]"
    			exit 1
    		fi
    	done
    	echo "提交信息检查通过。"
    done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    1. 设置脚本权限777
    chmod 777 pre-receive-commit-message-check
    
    • 1

    完事

  • 相关阅读:
    Gd-DOTA,CAS:72573-82-1,钆特酸
    bm20 2
    使用C#窗体绘制动态曲线图
    istio学习(3)请求路由
    Linux安装pycharm
    爱奇艺开源的高性能网络安全监控引擎
    opencv安装成功之后运行代码还是出错
    三次握手四次挥手过程剖析
    【Linux-Day10-信号量,共享内存,消息队列】
    大厂真题:【模拟】OPPO2023秋招提前批-小欧数组求和
  • 原文地址:https://blog.csdn.net/sinat_38184748/article/details/128129972