1. GitLab hooks 简介
- Git 等版本控制系统能在特定事件发生时触发自定义动作,这样的功能叫 hooks(钩子);
- GitLab 不仅支持 Git hooks,也支持其它 hooks;
2. Server hooks
- GitLab server hooks 是 Git server hooks,包括:
- pre-receive:处理客户端的推送时,最先被调用;
- update:与 pre-receive 类似,但如果同时向多个分支推送,pre-receive 只运行一次,update 则会在每个分支上运行;
- post-receive:在整个过程完结以后运行;
- Server hooks 可以配置给单个项目,也可以配置给全局服务器,执行顺序是:
- GitLab 内置的 server hooks
-
<project>.git/custom_hooks/<hook_name>
:项目钩子 -
<project>.git/custom_hooks/<hook_name>.d/*
:项目钩子 -
<custom_hooks_dir>/<hook_name>.d/*
: 全局钩子- Omnibus 安装的默认是
/opt/gitlab/embedded/service/gitlab-shell/hooks/<hook_name>.d/*
- 源代码安装的默认是
/home/git/gitlab-shell/hooks/<hook_name>.d/*
- Omnibus 安装的默认是
- Server hooks 必须在服务器文件系统上配置;
- Server hooks 支持部分环境变量
- 其中,
GIT_PUSH_OPTION_<i>
变量可以接受 git 客户端通过 push options 传递的值;
- 其中,
一个简单的 pre-receive 钩子:
#!/bin/bash
echo "Hi $GL_USERNAME, this is a test pre-receive hook!"
echo $GIT_PUSH_OPTION_0
而全局hooks可以在gitlab.rb
中定义
gitaly['custom_hooks_dir'] = "/var/opt/gitlab/gitaly/custom_hooks"