• 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

    完事

  • 相关阅读:
    Eclipse中使用Git提交代码到Gitee
    Mybatis @MapKey注解返回指定Map源码解析与用例
    eslint识别不了别名解决方法
    作弊(c++题解)
    nacos 适配瀚高数据库、ARM 架构
    数字孪生在能源、电力系统、电厂行业的应用实例
    julia笔记:复数
    vscode插件开发(四)Webview(1)
    开发需要了解的23种设计模式 | 导言
    【web前端期末大作业】基于html关爱空巢老人网页设计与实现
  • 原文地址:https://blog.csdn.net/sinat_38184748/article/details/128129972