配置pre-receive钩子

配置pre-receive钩子

   小白     2022年8月18日 05:36     95    

现在有个需求需要在gitlab上添加进行校验commit message的脚本。


实现原理

其原理是使用pre-receive的钩子,此钩子是服务端控制

pre-commit的钩子类似,只不过此钩子在客户端,不能更好的进行控制。

在进行 push 操作时,GitLab 会调用这个钩子文件,并且从 stdin 输入三个参数,分别为 之前的版本 commit ID、push 的版本 commit ID 和 push 的分支;根据 commit ID 我们就可以很轻松的获取到提交信息,从而实现进一步检测动作;根据 GitLab 的文档说明,当这个 hook 执行后以非 0 状态退出则认为执行失败,从而拒绝 push;同时会将 stderr 信息返回给 client 端;


配置全局仓库钩子

docker安装的话,其是Omnibus GitLab 安装,其hooks目录通常是/opt/gitlab/embedded/service/gitlab-shell/hooks

要为全局服务器挂钩使用不同的目录话,是在/etc/gitlab/gitlab.rb进行配置custom_hooks_dir参数

按照以下步骤为所有存储库设置全局服务器挂钩:

GitLab服务器上,导航到配置的全局服务器挂钩目录。

在此位置创建一个新目录。根据挂钩的类型,它可以是 pre-receive.d、post-receive.d或update.d目录。

在这个新目录中,添加你的钩子。Hooks 可以是任何语言。确保顶部的“shebang”正确反映语言类型。例如,如果脚本在 Ruby 中,则 shebang 可能是 #!/usr/bin/env ruby.

使挂钩文件可执行并确保它归 Git 用户所有。


将此脚本放到/opt/gitlab/embedded/service/gitlab-shell/hooks/pre-receive.d下

#!/bin/bash 

echo "You are attempting to push to the ${GITHUB_REPO_NAME} repository which has been made read-only" 

echo "Access denied, push blocked. Please contact the repository administrator." 

exit 1

图片1.png


配置单库钩子

对于 Omnibus GitLab 安装,路径通常是 /var/opt/gitlab/git-data/repositories/@hashed<..../...>/.git

图片2.png

git仓库下创建custom-hooks

在其中配置三种文件

pre-receive、post-receive或update

这三个文件不需要任何后缀。

配置任何类型的脚本。python shell等等

 



文章评论

0

其他文章