自定义Git钩子
注意:自定义Git钩子必须在GitLab服务器的文件系统上配置。只有GitLab服务器管理员才能完成这些任务。请探讨人则如果您没有文件系统访问权限,可以作为一个选项。有关用户可配置的Git钩子接口,请参见推动规则,可在GitLab企业版中获得。
Git原生支持在不同操作上执行的钩子。服务器端git钩子的例子包括预接收、后接收和更新。看到Git SCM服务器端钩子有关每种钩子类型的详细信息。
从GitLab -shell 2.2.0版本(需要GitLab 7.5+版本)开始,GitLab管理员可以向任何GitLab项目添加自定义git钩子。
设置
通常,Git钩子放在存储库或项目中钩子
目录中。GitLab从每个项目的钩子
目录到gitlab-shell钩子
目录,以便在gitlab-shell升级之间进行维护。因此,自定义钩子的实现略有不同。但是,一旦创建了钩子,其行为是完全相同的。
按照下面的步骤来设置自定义钩子:
- 选择一个需要自定义Git钩子的项目。
- 在GitLab服务器上,导航到项目的存储库目录。对于从源代码安装的路径通常是
项目/home/git/repositories / <集团> / < > .
。对于Omnibus安装,路径通常为项目/var/opt/gitlab/git-data/repositories / <集团> / < > .
。 - 在此位置创建一个名为
custom_hooks
。 - 在新的内部
custom_hooks
目录下,创建一个名称与钩子类型匹配的文件。对于预接收钩子,文件名应该是pre-receive
没有延期。 - 使钩子文件可执行,并确保它属于git。
- 按照预期编写代码使Git钩子函数生效。钩子可以是任何语言。确保顶部的“shebang”正确反映语言类型。例如,如果脚本是用Ruby编写的,那么shebang可能是
#!/usr/bin/env红宝石
。
就是这样!假设钩子代码得到了正确的实现,那么钩子将在适当的时候触发。
链钩支撑
介绍了在GitLab Shell 4.1.0和GitLab 8.15中。
挂钩也可以放置在钩子/ < hook_name参数> .d
(全球)或custom_hooks / < hook_name参数> .d
(每个项目)支持钩子链式执行的目录。
在另一个目录中查找全局自定义钩子(在钩子/ < hook_name.d >
),设置custom_hooks_dir
在gitlab-shell中配置。对于Omnibus安装,可以设置gitlab.rb
;在源代码安装中,可以设置这个gitlab-shell / config.yml
。
钩子的搜索和执行顺序如下:
<项目> . /钩/
-链接至gitlab-shell /钩子
全球dir<项目> . /钩/ < hook_name参数>
-由git
本身,这是gitlab-shell /钩/ < hook_name参数>
<项目> . / custom_hooks / < hook_name参数>
-每个项目挂钩(这是已经存在的行为)<项目> . / custom_hooks / < hook_name参数> .d / *
-每个项目挂钩<项目> . /钩/ < hook_name参数> .d / *
或< custom_hooks_dir > / < hook_name.d > / *
-全局钩子:所有可执行文件(减去编辑器备份文件)
文件。d
目录必须是可执行的,并且不匹配备份文件模式(* ~
).
相同类型的钩子按顺序执行,并在第一个脚本以非零值退出时停止执行。
自定义错误消息
介绍了在GitLab 8.10中。
如果提交被拒绝或在Git钩子检查期间发生错误,钩子的STDERR或STDOUT消息将出现在GitLab的UI中。STDERR优先于STDOUT。