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. 如果提示没有找到vi,则需要安装vim;
    使用如下命令安装vim:
apt-get update
apt-get install vim
  1. 进入gitlab.rb文件的编辑页面后,输入/custom_hooks_dir,点击回车,会直接跳到配置行,默认如下所示:
#gitaly['custom_hooks_dir'] = "/var/opt/gitlab/gitaly/custom_hooks"

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

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

创建全局服务器钩子

  1. 打开/var/opt/gitlab/gitaly/custom_hooks文件夹
cd /var/opt/gitlab/gitaly/custom_hooks/
  1. 新建文件夹pre-receive.d
mkdir pre-receive.d
  1. 添加脚本文件pre-receive-commit-message-check
vi /var/opt/gitlab/gitaly/custom_hooks/pre-receive.d/pre-receive-commit-message-check
  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. 设置脚本权限777
chmod 777 pre-receive-commit-message-check

完事

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值