校验原因
在企业内部进行代码提交时, commit 中会存在提交者的 username 与 email
但该 username 与 email 是提交者在 Git 客户端自己设置的
如果提交者忘记设置或者设置错误, 并将 commit push 到远程服务后
当协作者需要寻找该 commit 提交者时, 错误的 username 与 email 会对协作者造成障碍
为解决这个问题, 需要在 GitLab 使用 Server Hooks 对 commit 进行校验, 只有 username 与 email 与 GitLab 中的一致才允许 push, 否则拒绝 push 并提示修改
准备工作
如需对 commit 的 username 与 email 进行校验, 那么需要在校验脚本中获取 push 者的 username 与 email
通过 GitLab Server Hooks 文档可知存在 GL_USERNAME
环境变量, 该变量的值为 push 者的 GitLab 的 username, 但是缺乏 email 相关环境变量
为获取 push 者的 email, 需使用 GitLab 提供的 Users API 进行获取
通过 API 文档可知只有 admin 用户才返回用户 email, 所以需要先使用 admin 账号生成一个 TOKEN
这个 TOKEN 只是用来获取获取用户 email, 故创建时选择 read_user 的范围即可
校验用户名与邮箱 hook
GitHub 的 platform-samples 项目提供了一个 commit-current-user-check.sh 的 hook, 我们可以将该脚本下载下来, 进行修改即可
以下是修改后的 commit-current-user-check.sh
文件
1 |
|
配置 hook
由该 hook 功能可知其类型应为 pre-receive
我们按照 GitLab 全局配置 Server Hook 文档 将 commit-current-user-check.sh
放在 server hook 的 pre-receive.d
目录下
并添加可执行权限与配置所属者为 git 用户即可
1 | chmod u+x commit-current-user-check.sh |