极狐GitLab 正式推出面向 GitLab 老旧版本(12.x、13.x、14.x、15.x 等)免费用户的专业升级服务,点击查看详情

请选择 进入手机版 | 继续访问电脑版
返回列表 发布新帖

git pre-receive hook错误信息无法在合并请求页面显示

2296 6
发表于 2024-4-16 12:14:48 | 显示全部楼层 阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
QQ截图20240416121006.jpg
F6799F3D-1A28-46a5-AA9D-1EC0B716C55D.jpg
回复

使用道具 举报

评论6

艺设院长楼主Lv.1 发表于 2024-4-16 12:17:00 | 显示全部楼层
pre-receive部分代码如下,本地push时触发可以显示自定义错误信息,合并请求页面不行,gitlab版本15.0
# 禁止超过20个 commit 的合并
  if [ "$commit_count" -gt 0 ]; then
    echo "GL-HOOK-ERR: Cannot merge more than 20 commits at once."
    exit 1
  fi
回复

使用道具 举报

ALEXLv.2 发表于 2024-4-16 15:15:18 | 显示全部楼层
通常情况下,pre-receive钩子中的错误信息会被发送回到推送方的本地Git客户端,并在命令行界面显示。
如果你想让这些错误信息在合并请求页面上显示,你可以考虑使用CICD来实现。通过将pre-receive钩子中的验证逻辑集成到CI/CD流程中,你可以在合并请求触发CI/CD流程时执行这些验证,并将结果反馈到合并请求页面上,比如添加 Comments。
回复

使用道具 举报

艺设院长楼主Lv.1 发表于 2024-4-16 17:44:41 | 显示全部楼层
ALEX 发表于 2024-4-16 15:15
通常情况下,pre-receive钩子中的错误信息会被发送回到推送方的本地Git客户端,并在命令行界面显示。
如果 ...

我看到文档中有说明GL-HOOK-ERR: 开头的信息可以显示在UI中,但是测试了没有效果

参考这个文档 https://docs.gitlab.cn/jh/admini ... 定义错误消息
回复

使用道具 举报

ALEXLv.2 发表于 2024-4-16 21:49:33 | 显示全部楼层
本帖最后由 ALEX 于 2024-4-16 21:53 编辑

你可以发一下你pre-receive的完整脚本,看看是不是脚本本身的判断逻辑问题


Screens-20240416-215145.jpg


回复

使用道具 举报

艺设院长楼主Lv.1 发表于 2024-4-18 16:55:45 | 显示全部楼层
ALEX 发表于 2024-4-16 21:49
你可以发一下你pre-receive的完整脚本,看看是不是脚本本身的判断逻辑问题
  1. #!/bin/bash

  2. zero_commit="0000000000000000000000000000000000000000"
  3. while read oldrev newrev refname; do
  4.   # 判断是否是创建新分支
  5.   if [ "$oldrev" = "$zero_commit" ]; then
  6.     echo "新建分支忽略"
  7.     continue
  8.   fi

  9.   # 提取分支名称
  10.   branch=$(git rev-parse --symbolic --abbrev-ref $refname)

  11.   # 禁止 dev 分支合并到其他分支
  12.   # 非dev分支禁止有Merge branch 'dev'记录
  13.   if [ "$branch" != "dev" ]; then
  14.     merge_test=$(git log -n 30 $newrev | grep -E "into 'dev'|Merge branch 'dev'")
  15.     if [ -n "$merge_test" ]; then
  16.       echo dev检查出$merge_test记录
  17.       echo "GL-HOOK-ERR: dev分支禁止合入其他分支"
  18.       exit 1
  19.     fi
  20.   fi

  21.   # 统计变更的 commit 数量
  22.   commit_count=$(git rev-list --count $oldrev..$newrev)

  23.   # 统计变更的文件数量
  24.   file_count=$(git diff --numstat $oldrev..$newrev | wc -l)
  25.   echo 提交$commit_count,变更:$file_count
  26.   # 禁止超过30个 commit 的合并
  27.   if [ "$commit_count" -gt 30 ]; then
  28.     echo "GL-HOOK-ERR: 禁止超过30个commit的合并"
  29.     exit 1
  30.   fi

  31.   # 禁止超过100个变更的合并
  32.   if [ "$file_count" -gt 100 ]; then
  33.     echo "GL-HOOK-ERR: 禁止超过100个变更的合并"
  34.     exit 1
  35.   fi
  36. done
  37. exit 0
复制代码
回复

使用道具 举报

ALEXLv.2 发表于 2024-4-18 21:58:14 | 显示全部楼层
用你的 hook 脚本测试,我这边是OK 的,可以在 MR 界面提示 commit数量超标。
你可以根据你的实际提交,检查下分支和其他规则,看看是不是其他规则的错误。



hook.jpg


回复

使用道具 举报

意见建议

Email:forum@gitlab.cn
  • 关注公众号
  • 添加专业顾问
Copyright © 2001-2024 极狐GitLab论坛 版权所有 All Rights Reserved. 鄂ICP备2021008419号-1|鄂公网安备42018502006137号
关灯 快速发帖
扫一扫添加专业顾问
返回顶部
快速回复 返回顶部 返回列表