背景
使用gitlab的时候,如果不对用户的提交信息进行格式约束,那么用户就会提交任意信息,这样不仅直观上浏览观感不好,也不利于后期根据提交内容信息检索需要的代码,这次做了一个hook测试,限制用户提交的信息以约定的格式,否则提交失败,以下是步骤
配置开启自定义hook
vi /etc/gitlab/gitlab.rb
将以下行前面的#号取消注释
gitlab_shell['custom_hooks_dir'] = "/opt/gitlab/embedded/service/gitlab-shell/hooks"
上传自定义hook脚本
cd /opt/gitlab/embedded/service/gitlab-shell/hooks
mkdir pre-receive.d
vi pre-commit
#!/bin/bash
echo "开始提交信息检查..."
# 从标准输入获取本次提交的commit id及分支的信息
read normalInput
ARR=($normalInput)
parentCommitId=${ARR[0]}
currentCommitId=${ARR[1]}
branch=${ARR[2]}
echo "您提交的分支为:$branch"
# 获取coomit的信息,用户,邮箱,msg等
user=$(git log --pretty=format:"%an" $currentCommitId -1)
echo "提交者为:$user"
commitDate=$(git log --pretty=format:"%cd" $currentCommitId -1)
echo "提交日期为:$commitDate"
msg=$(git log --pretty=format:"%s" $currentCommitId -1)
echo "提交的注释为:$msg"
flag=$(echo $msg | grep -P "【修复】[\s\S]{10,}|【增加】[\s\S]{10,}|【删除】[\s\S]{10,}|【更新】[\s\S]{10,}|【临时】[\s\S]{10,}|【测试】[\s\S]{10,}|【恢复】[\s\S]{10,}|【合并】[\s\S]{10,}")
if [ -z "$flag" ]; then
echo "[ERROR]提交信息校验未通过,需以 【修复】|【增加】|【删除】|【更新】|【临时】|【测试】|【恢复】|【合并】开头"
exit 1
fi
说明
1、只能在/opt/gitlab/embedded/service/gitlab-shell/hooks此路径下创建pre-receive.d``post-receive.d``update.d
三个目录,在这三个目录底下创建的文件均可被自动调用,这三个目录的用途可自行搜索。
2、如果是ubuntu系统安装的gitlab,需要默认gitlab相关的用户shell修改为/bin/bash,默认是/bin/sh,否则在执行的过程中会报错
重新加载配置
gitlab-ctl reconfigure
gitlab-ctl restart
验证效果
1、提交不含关键字
可以看到,被拒绝了,返回提示需要以指定的内容作为提交的开头。
2、提交含关键字,但是提交的字数没有达到限定的最低数
3、提交的字数达到限定的最低数