[英]How to get group and repository name in server-side Gitlab global hooks starting with 13.1
我的组织使用 Gitlab CE 和服务器端 git 挂钩。 具体来说,我们使用全局预接收挂钩来验证提交消息(放置在/opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d
中的那个)。 不同的 Gitlab 组的验证规则不同,因此脚本会解析存储库的完整路径,并根据组应用不同的规则。
我们过去使用PWD
环境变量来获取存储库的完整路径,包括组。 但看起来从 Gitlab 13.1开始,这个变量不再可用。 此外,由于在 @hashed 文件夹中创建了新的存储库,因此无论如何都需要调整这种方法。
我们尝试在 pre-recieve 挂钩中使用git config --get gitlab.fullpath
,到目前为止它适用于除 wiki 存储库之外的所有存储库(如<project_name>.wiki.git
) 此外,这不是一个记录在案的方法,因此将来可能会再次中断。 是否有任何官方方法可以在预接收挂钩中获取组名?
UPD:看起来有一个使用 gitlab-rails 的解决方法,但它远非最佳:
GIT_OBJECT_DIRECTORY
环境变量包含类似/var/opt/gitlab/git-data/repositories/@hashed/dd/8e/dd8e8c8c9dae8978f122d7bcf3d0d49f6a0e86b9fc35528f55e78f7408927bb1.git/objects/incoming-16WBe9
目录的路径gitlab-rails runner "puts ProjectRepository.find_by(disk_path: '@hashed/dd/8e/dd8e8c8c9dae8978f122d7bcf3d0d49f6a0e86b9fc35528f55e78f7408927bb1').project.full_path"
但是这种方法的问题是GIT_OBJECT_DIRECTORY
将来可能会发生变化,并且gitlab_rails
命令在我们的安装上执行大约需要 30 秒,这是不可接受的长
UPD2:项目ID
有GL_REPOSITORY
环境变量,可用于查找完整路径: https://stackoverflow.com/a/57399790/13881221
UPD3 2020-07-07:包含从 Gitlab 13.1.3开始的GL_PROJECT_PATH
环境变量,可解决问题https://gitlab.com/gitlab-org/gitaly/-/merge_requests/2313
实际上 GL_PROJECT_PATH 有这种格式:
group/subgroup/repo_name
您可以在 git 服务器上自定义更新挂钩,并从那里使用组或子组。
例如,您可以使用正则表达式来获取组名,如下所示:
cut -d'/' -f1 <<< $GL_PROJECT_PATH
有关 git 挂钩的更多信息: https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.