上一篇记录了 gitlab 的安装,本篇记录下如果配置全局 serverhook,用于拦截 push 操作。

某些时候,我们需要对提交代码的 commit 内容做一些校验,比如限制 commit 格式,限制提交人等等。

首先开启 gitlab 的全局 server hook

参考官方文档:点击跳转.

如果是通过 docker,二进制包安装的需要修改gitlab.rb文件,添加如下配置:

gitaly['custom_hooks_dir'] = "/var/opt/gitlab/gitaly/custom_hooks"

如果是源码安装的,参考官方文档中说的操作。

编写脚本

上一步配置了脚本目录,那么我们只需要把脚本放到对应的目录即可。

注意,上面配置的是 docker 中的路径,要注意对应宿主机路径

按照上一篇的安装教程,对应的路径为:/data/gitlab/data/gitaly/custom_hooks,在此路径下创建对应类型 hook 的文件夹,比如:

  • pre-receive.d
  • update.d
  • post-receive.d

这里我们创建 update.d 目录。每次 push 操作,都会调用update.d中的所有脚本。

然后在 update.d 中创建check.sh脚本

#!/usr/bin/env bash
# 脚本支持各种语言,修改上面一行的语言类型即可

echo "GLID:${GL_ID}"
# 提交人的username
echo "GL_USERNAME:${GL_USERNAME}"
# 提交的仓库id
echo "GL_REPOSITORY:${GL_REPOSITORY}"
# 项目路径
echo "GL_PROJECT_PATH:${GL_PROJECT_PATH}"
echo "${0},${1},${2},${3}"
# 返回0push成功,返回非0push失败
exit 0

这里仅提供示例,当 hook 类型为 update 时,一些额外参数会通过${1}(推送的分支),${2}(本次提交 commit 的前一次 commitId),${3}(本次提交的最后一个 commitId)传递进来。

如果想进行进一步的校验,可在脚本中编写复杂的 shell 脚本,或者调用其它的脚本进行校验,或者调用 http 请求进行复杂的处理。