写点什么

gitlab 服务端 hook,拦截糟糕的提交到仓库

用户头像
阿呆
关注
发布于: 6 小时前
gitlab服务端hook,拦截糟糕的提交到仓库

背景

每当我接收一份新的代码,代码拿到手要做的第一件事就是 git log,看看这份代码的提交记录,最近提交的情况,做了些什么。但往往看到的 git log 杂乱无章,不知道每次提交到底是做了些什么。由此可见,在团队中,CHANGELOG 的重要性不言而喻,不仅有助于他人帮忙 review 代码,熟悉代码,也能高效的输出 CHANGELOG,对项目管理也至关重要。我们本文介绍使用 git 的服务端 hook 来针对 change log 进行校验,拦截不符合我们规范的提交


服务端 hook 介绍

服务端 git hook 氛围三种,分别是 pre-receive、update、post-receive,这三个步骤就是我们本地 push 完代码服务端要做的事情,如图 1 所示:

我们可以在 pre-receive 阶段来做提交信息的校验,如果不符合我们的要求,直接返回非 0,则该推送便不会推送到 gitlab 仓库中去。


配置服务端 hook

环境配置

gitlab 版本:13.2

hook 配置

1、找到要配置仓库在 gitlab 中存储的路径,但因 gitlab 的仓库自某个版本开始采用 hash 存储,我们想要知道仓库对应的物理路径,需要到 gitlab 的 postgresql 数据库中的表 project_repositories 中,根据 project_id 能拿到对应的物理路径;

2、当拿到仓库对应的物理路径后,我们打开,目录如下:

3、hooks 中是 gitlab 示例的一些钩子,我们需要新建目录 custom_hooks,然后用 vim 新建文件 pre-receive,pre-receive 文件内容如下:

#!/bin/bash
echo "开始提交信息检查..."
# 从标准输入获取本次提交的commit id及分支的信息read normalInputARR=($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 "modify.*")if [ -z "$flag" ]; then echo "[ERROR]提交信息校验未通过,需以modify开头" exit 1fi
复制代码

4、在本地尝试推送,推送显示如下,如果不符合规范则无法提交成功


更多

如探索更多关于服务端 hook 的功能,可以与第三方系统,例如 jira 等做交互,打造属于自己团队更适用的工具。

发布于: 6 小时前阅读数: 28
用户头像

阿呆

关注

坚守准则,认真做事。 2018.05.22 加入

还未添加个人简介

评论

发布
暂无评论
gitlab服务端hook,拦截糟糕的提交到仓库