上一篇记录了 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 请求进行复杂的处理。