0
点赞
收藏
分享

微信扫一扫

gitlab commit hook

背景

使用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、提交不含关键字
image.png
可以看到,被拒绝了,返回提示需要以指定的内容作为提交的开头。
2、提交含关键字,但是提交的字数没有达到限定的最低数
image.png
3、提交的字数达到限定的最低数
image.png

举报

相关推荐

0 条评论