自定义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升级之间进行维护。因此,自定义钩子的实现略有不同。但是,一旦创建了钩子,其行为是完全相同的。

按照下面的步骤来设置自定义钩子:

  1. 选择一个需要自定义Git钩子的项目。
  2. 在GitLab服务器上,导航到项目的存储库目录。对于从源代码安装的路径通常是项目/home/git/repositories / <集团> / < > .。对于Omnibus安装,路径通常为项目/var/opt/gitlab/git-data/repositories / <集团> / < > .
  3. 在此位置创建一个名为custom_hooks
  4. 在新的内部custom_hooks目录下,创建一个名称与钩子类型匹配的文件。对于预接收钩子,文件名应该是pre-receive没有延期。
  5. 使钩子文件可执行,并确保它属于git。
  6. 按照预期编写代码使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

钩子的搜索和执行顺序如下:

  1. <项目> . /钩/-链接至gitlab-shell /钩子全球dir
  2. <项目> . /钩/ < hook_name参数>-由git本身,这是gitlab-shell /钩/ < hook_name参数>
  3. <项目> . / custom_hooks / < hook_name参数>-每个项目挂钩(这是已经存在的行为)
  4. <项目> . / custom_hooks / < hook_name参数> .d / *-每个项目挂钩
  5. <项目> . /钩/ < hook_name参数> .d / *< custom_hooks_dir > / < hook_name.d > / *-全局钩子:所有可执行文件(减去编辑器备份文件)

文件。d目录必须是可执行的,并且不匹配备份文件模式(* ~).

相同类型的钩子按顺序执行,并在第一个脚本以非零值退出时停止执行。

自定义错误消息

介绍了在GitLab 8.10中。

如果提交被拒绝或在Git钩子检查期间发生错误,钩子的STDERR或STDOUT消息将出现在GitLab的UI中。STDERR优先于STDOUT。

来自自定义Git钩子的自定义消息

Baidu
map