在提交原代码时,我们针对提交的内容都会编写一些commets,但是有些人为了省力提交空白的commets或者写一些毫无意义的字符,对后续查找提交记录及追踪代码问题带来不便,所以我们在gitlab的hook中添加一些规则,防止空白提交和乱提交。
在gitlab中分为客户端hooks和服务端hooks,本文主要介绍创建服务端hooks,按照纬度不同,又可分为单项目hook配置,全局的hook配置,hook支持不同语言来编写,只要在规则文件的第一行表明是哪种语言(eg. #!/usr/bin/env bash)
单项目hook配置
在gitlab中每个项目都有一个单独的管理目录,在/var/opt/gitlab/git-data/repositories/<group>/<project>.git目录下,只要创建一个custom_hooks,把脚本放在该目录下就会生效,以下是具体的步骤:
- 进入某个项目的目录,cd /var/opt/gitlab/git-data/repositories/<group>/<project>.git
- 创建hook目录,mkdir custom_hooks
- 进入custom_hooks目录,并创建脚本vim pre-receive,只要执行结果返回1,则会拒绝所有的提交,执行结果返回0,则通过
#!/usr/bin/env bash
echo "error: rejecting all pushes"
exit 1
全局hook配置
如果需要做一个全局的hook,gitlab中也提供了相应的配置方法,全局的配置在/opt/gitlab/embedded/service/gitlab-shell/hooks目录下,以下是配置提交代码时,起始行必须采用输入jiraid,否则拒绝提交:
- 进入全局配置目录cd cd /opt/gitlab/embedded/service/gitlab-shell/hooks
- 新建提交前检查目录 mkdir pre-receive.d
- 进入pre-receive.d目录(cd pre-receive.d),新建提交规范脚本,跟单项目一样的,返回0成功,其他都是失败
#!/usr/bin/env bash
while read oldVersion newVersion branch; do
# echo ${oldVersion}
# echo ${newVersion}
# echo ${branch}
#获取环境变量
oldVer=${oldVersion}
#oldVer=8c0a6f
newVer=${newVersion}
#newVer=e68cf6
#获取提交记录
mver=`git rev-list ${oldVer}..${newVer}`
#echo $mver
#分割版本提交记录
mverArray=(${mver//\n/ })
#mverArray=mver.split("\n")
reg='^(TEST|FUND|BD)-[0-9]+.*$'
for onemver in ${mverArray[*]};do
#获取提交的注解信息
message=`git cat-file commit ${onemver} | sed '1,/^$/d'`
#echo $message
if [[ "$message" =~ $reg ]];then
echo "match found"
else
echo "error:match not found,commitid-${onemver},message-${message}"
exit 1
fi
done
done
其中 oldVersion newVersion branch为3个系统变量,调用脚本时会自动传入。