git 升级_gitlab webhooks自定义服务器端Git钩子

自定义服务器端Git挂钩

注意: 必须在GitLab服务器的文件系统上配置自定义Git挂钩。只有GitLab服务器管理员才能完成这些任务。如果您没有文件系统访问权限,请浏览webhooks和CI作为选项。有关用户可配置的Git挂钩界面,请参阅 GitLab Enterprise Edition中提供的推送规则。

注意: 如果使用GitLab Geo,则不会将自定义Git挂钩复制到辅助节点

Git本身支持在不同操作上执行的钩子。服务器端git挂钩的示例包括预接收,后接收和更新。有关每种挂钩类型的详细信息,请参阅Git SCM服务器端挂钩。

从gitlab-shell 2.2.0版(需要GitLab 7.5+)开始,GitLab管理员可以为任何GitLab项目添加自定义git钩子。

为存储库创建自定义Git挂钩

服务器端Git挂钩通常放在存储库的hooks 子目录中。在GitLab中,钩子目录与符号链接到gitlab-shell hooks目录,以便于gitlab-shell升级之间的维护。自定义挂钩的实现方式不同,但创建挂钩后行为完全相同。按照以下步骤为存储库设置自定义挂钩:

  1. 选择一个需要自定义Git钩子的项目。
  2. 在GitLab服务器上,导航到项目的存储库目录。对于从源安装,通常是路径 /home/git/repositories//.git。对于Omnibus,通常会安装路径/var/opt/gitlab/git-data/repositories//.git。
  3. 在此位置创建一个名为的新目录custom_hooks。
  4. 在新custom_hooks目录中,创建一个名称与钩子类型匹配的文件。对于预接收挂钩,文件名应该pre-receive 没有扩展名。
  5. 使钩子文件可执行,并确保它由git拥有。
  6. 编写代码以使Git钩子函数按预期方式运行。钩子可以是任何语言。确保顶部的“shebang”正确反映语言类型。例如,如果脚本在Ruby中,则可能是shebang #!/usr/bin/env ruby。

而已!假设正确实现了钩子代码,钩子将适当地触发。

为所有存储库设置全局Git挂钩

要创建适用于实例中所有存储库的Git挂钩,请设置全局Git挂钩。由于所有存储库的hooks 目录都符号链接到gitlab-shell的hooks目录,因此将任何挂钩添加到gitlab-shell hooks目录也会将其应用于所有存储库。按照以下步骤正确设置所有存储库的自定义挂钩:

  1. 在GitLab服务器上,导航到配置的自定义挂钩目录。默认位于gitlab-shell目录中。hook通常是从源路径安装的gitlab-shell 目录 /home/git/gitlab-shell/hooks。对于Omnibus,通常会安装路径 /opt/gitlab/embedded/service/gitlab-shell/hooks。要查看全局自定义挂钩的其他目录,请custom_hooks_dir在gitlab-shell配置中进行设置。对于Omnibus安装,可以设置gitlab.rb; 在源安装中,可以设置gitlab-shell/config.yml。
  2. 在此位置创建一个新目录。根据你的钩子,这将是A pre-receive.d,post-receive.d或update.d目录。
  3. 在这个新目录中,添加你的钩子。钩子可以是任何语言。确保顶部的“shebang”正确反映语言类型。例如,如果脚本在Ruby中,则可能是shebang #!/usr/bin/env ruby。
  4. 使钩子文件可执行,并确保它由Git拥有。

现在测试钩子,看它是否正常运行。

链式挂钩支撑

在GitLab Shell 4.1.0和GitLab 8.15中引入。

挂钩也可以是全局的,也可以按项目目录设置,并支持挂钩的链式执行。

注意: .d将需要要么pre-receive.d, post-receive.d或update.d正常工作。任何其他名称都将被忽略。

注意:.d目录中的 文件需要是可执行的,并且与备份文件模式(*~)不匹配。

按以下顺序搜索并执行钩子:

  1. gitlab-shell/hooks Gitaly已知的目录
  2. .git/hooks/- git自己执行,这是符号链接gitlab-shell/hooks/
  3. .git/custom_hooks/ - 每个项目挂钩(这已经是现有的行为)
  4. .git/custom_hooks/.d/* - 每个项目挂钩
  5. .git/hooks/.d/*OR //*- 全局钩子:所有可执行文件(减去编辑器备份文件)

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

自定义错误消息

在GitLab 8.10中引入。

要在拒绝提交或Git挂钩期间发生错误时在GitLab的UI中显示自定义错误消息,您的脚本应该:

  • 将自定义错误消息发送到脚本stdout或stderr。
  • 在前缀GL-HOOK-ERR:之前出现没有字符的每条消息前缀。

示例自定义错误消息

ea67b41f254ab03afe105345d3dfacda.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值