大家在使用gitlab的时候,有时候领导是不是想控制一下研发提交代码的日志啥的?比如说要按日志格式写,然而只是口头提要求的话,研发同学根本不care你,哪怕你提供了客户端的git hook模板给研发同学,他也不用!
那只能在服务器端卡住你了┑( ̄Д  ̄)┍
gitlab-ce版本没有推送规则设置,只好通过服务器端的server hooks来实现功能。
尽管gitlab官方文档有提供server hooks的文档,但是很多细节都没有说,再加上是英文文档,看起来有些蛋疼,所以自己在这里整理了一下:
官方文档地址:Server hooks | GitLab
本文使用的gitlab-ce版本为 15.0
- 一.先翻译下官方的使用方法,两种都是要建custom_hooks目录:
1.全局的hook,配置脚本后gitlab系统上所有仓库都受影响,开关在配置文件gitlab.rb中(默认安装路径/etc/gitlab/gitlab.rb),找到下面这条
#gitaly['custom_hooks_dir'] = "/var/opt/gitlab/gitaly/custom_hooks"
去掉注释,配置自己的hook脚本存放路径。
2.配置单独仓库,只对单个仓库生效:
注意:按单个仓库配置的时候,必须也把全局设置中的gitlab.rb文件中的设置打开,指定的目录可以什么都不放,gitlab会自动跳过,也不会报错。
单个仓库配置就必须找到单个仓库实际地址,在仓库目录下加上custom_hooks文件夹,然后再添加hook脚本
如何找到仓库地址?
仓库实际地址就存放在/var/opt/gitlab/git-data/repositories里,老版本的gitlab是按群组和项目路径存储,一目了然。
但14.0之后gitlab的仓库实际存储地址都变成hash后地址了,只能在管理员界面去寻找路径。
如图,举个例子,在管理员界面下的test/1112.git仓库信息
然后在仓库目录下建custom_hooks目录
例如目录:/var/opt/gitlab/git-data/repositories/@hashed/d4/73/d4735e3a265e16eee03f59718b9b5d03019c07d8b6c51f99da3a666eec13ab35.git/custom_hooks目录
- 二.建好custom_hooks目录后就可以加脚本了
第一种方式:
在custom_hooks目录下可以建三个hook文件,名字必须是下面三个之一
pre-receive,update,post-receive
钩子的作用和入参区别具体解释在git官网: Git - Git 钩子 (git-scm.com)
这个钩子其实是属于git使用的范畴了,gitlab只是套了一层
一般来说只使用pre-receive的脚本就可以实现功能了
第二种方式:
custom_hooks目录下建这三个目录
pre-receive.d
update.d
post-receive.d
这样在这三个目录下放任意名字的脚本文件都会被执行
- 三.实际安装的时候会碰到一些坑:
1.为啥我按目录放了,但是脚本就是不执行?
是liunx的权限问题,我是把权限直接都开了,没仔细做分辨
chmod 777 -R custom_hooks
chown -R git:git custom_hooks
chmod +x custom_hooks/pre-receive
2. 权限已经改了,单独仓库已经配置好了,但是脚本死活不生效?
那应该就是全局的设置没打开
hook脚本就得自己写了,可以使用shell,python,ruby等脚本语言,要在脚本文件中明确执行的脚本语言
Gitlab官方文档还提供了一些环境变量可以直接获取,看情况使用,会很方便。
两个hook脚本的例子:
https://fulizhe.blog.csdn.net/article/details/119994111?spm=1001.2014.3001.5502文章来源:https://www.toymoban.com/news/detail-400284.html
https://github.com/git/git/blob/master/templates/hooks--update.sample文章来源地址https://www.toymoban.com/news/detail-400284.html
到了这里,关于Gitlab custom_hooks设置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!