GitLab-Help - GitLab 增强扩展平台
智能代码审查 · 团队协作管理 · 数据可视化分析 · 自动化工作流
功能特性 •
系统架构 •
快速开始 •
部署指南 •
技术栈 •
API 接口
📖 项目介绍
GitLab-Help 是一款面向 GitLab 的增强扩展平台,为开发团队提供一站式的代码管理辅助工具。通过与 GitLab 深度集成,提供 AI 代码审查、团队贡献分析、权限守卫、自动化通知等增强功能,帮助团队提升开发效率和代码质量。
🎯 核心价值
- 🔗 GitLab 深度集成 - 无缝对接 GitLab Webhook,自动处理 Push/MR 事件
- 🤖 AI 智能审查 - 支持多种 LLM 模型,自动审查代码并给出改进建议
- 📊 团队数据分析 - 成员贡献统计、提交热力图、代码质量趋势
- 🚧 权限守卫 - 路径级访问控制,防止未授权的关键代码变更
- 🔔 IM 通知 - 审查结果、MR 动态实时推送到企业微信/钉钉/飞书
- 📋 日报自动生成 - 每日自动汇总团队代码活动,支持定时推送
- 🛡️ RBAC 权限体系 - 完整的角色权限管理,支持 LDAP/AD 集成
✨ 功能特性
🔗 GitLab 集成
| 功能 | 说明 |
|---|
| Webhook 自动处理 | 自动接收和处理 Push、Merge Request 事件 |
| 项目自动创建 | 配置 Git 凭证后,首次 Webhook 自动创建项目 |
| 成员自动同步 | 从 GitLab 自动同步项目成员信息 |
| MR 评论回写 | 审查结果自动发布到 MR 评论区 |
| 构建状态上报 | 审查结果同步到 GitLab Pipeline 状态 |
| 私有部署支持 | 支持自托管 GitLab 实例 |
🤖 AI 代码审查
| 特性 | 说明 |
|---|
| 多模型支持 | OpenAI、Azure、Anthropic、Gemini、Ollama、DeepSeek 等 |
| 智能评分 | 自动提取 0-100 分值,量化代码质量 |
| 分批审查 | 大型 MR 自动拆分,避免超出 Token 限制 |
| 文件上下文 | 自动获取相关文件内容,提高审查准确性 |
| 文件级审查 | 按文件独立审查,精准定位问题 |
| 交互式反馈 | 支持对审查结果提出异议并重新评估 |
| 自定义提示词 | 可配置审查模板,支持变量替换 |
📊 团队数据分析
| 功能 | 说明 |
|---|
| 仪表盘 | 项目概览、审查趋势、分数分布、Top 项目/作者 |
| 成员分析 | 个人贡献统计、提交趋势、代码质量评分 |
| 提交热力图 | 可视化展示成员提交活跃度 |
| 日报系统 | 自动生成每日审查报告,支持工作日检测 |
| 历史补录 | 支持批量导入历史提交记录 |
🚧 权限守卫
| 功能 | 说明 |
|---|
| 路径级控制 | 限制指定成员对特定文件/目录的修改权限 |
| 自定义规则 | 支持按事件类型(Push/MR)配置不同规则 |
| 违规通知 | 发现违规变更时自动通知并阻止合并 |
| 自定义提示 | 可配置违规提示消息 |
🔔 通知系统
| 平台 | 格式 | 字符限制 | 特性 |
|---|
| 企业微信 | Markdown | 4096 | markdown_v2 格式 |
| 钉钉 | Markdown | 20000 | 支持加签验证 |
| 飞书 | 富文本 | 4096 | 支持签名密钥 |
🛡️ 系统管理
| 功能 | 说明 |
|---|
| RBAC 角色 | 完整的角色权限管理,支持菜单、项目组、项目级权限 |
| LDAP 集成 | 支持 LDAP/AD 认证,自动同步用户 |
| 项目分组 | 支持项目分组管理,组级访问令牌继承 |
| Git 凭证 | 统一管理平台凭证,支持自动创建项目 |
| 审查模板 | 预置前端/后端/安全/通用审查模板 |
| 系统日志 | 完整的操作审计日志,支持保留期配置 |
| 假日检测 | 支持 22+ 国家的假日日历,日报跳过节假日 |
🏗️ 系统架构
项目目录结构
gitlab-help/
├── backend/ # Go 后端服务
│ ├── cmd/
│ │ ├── server/ # 主入口
│ │ │ └── main.go # 路由定义、服务初始化
│ │ └── scripts/ # 数据库迁移脚本
│ └── internal/
│ ├── config/ # 配置管理
│ ├── handlers/ # API 处理器 (23个)
│ ├── middleware/ # 认证、CORS 中间件
│ ├── models/ # 数据模型 (GORM)
│ ├── services/ # 业务逻辑 (50+ 服务)
│ │ └── webhook/ # Webhook 处理
│ └── utils/ # JWT、密码工具
├── frontend/ # React 前端应用
│ └── src/
│ ├── components/ # 通用组件
│ ├── constants/ # 常量、权限定义
│ ├── hooks/ # 自定义 Hooks
│ │ └── queries/ # TanStack Query Hooks
│ ├── i18n/ # 国际化 (中/英)
│ ├── layouts/ # 布局组件
│ ├── pages/ # 页面组件 (20个)
│ ├── providers/ # Query Provider
│ ├── services/ # API 服务
│ ├── stores/ # Zustand 状态管理
│ └── types/ # TypeScript 类型
├── docker-compose.yml # Docker 部署配置
├── Dockerfile # 多阶段构建
└── config.yaml.example # 配置示例
整体架构图
graph TB
subgraph "Git 平台"
GL[GitLab]
end
subgraph "GitLab-Help 服务"
WEB[Webhook 接收器]
API[REST API]
SSE[SSE 实时推送]
subgraph "核心服务"
AI[AI 审查引擎]
GUARD[权限守卫]
NOTIFY[通知服务]
REPORT[日报服务]
end
subgraph "数据层"
DB[(SQLite/MySQL/PG)]
REDIS[(Redis 队列)]
end
end
subgraph "通知渠道"
WW[企业微信]
DT[钉钉]
FS[飞书]
end
subgraph "LLM 提供商"
OAI[OpenAI]
AZ[Azure]
ANT[Anthropic]
GEM[Gemini]
OLL[Ollama]
end
GL --> WEB
WEB --> AI
WEB --> GUARD
API --> DB
AI --> OAI & AZ & ANT & GEM & OLL
AI --> NOTIFY
AI --> DB
NOTIFY --> WW & DT & FS
SSE --> DB
数据模型
erDiagram
USER ||--o{ PROJECT : creates
USER }o--|| ROLE : has
ROLE ||--o{ ROLE_MENU : has
ROLE ||--o{ ROLE_PROJECT_GROUP : has
ROLE ||--o{ ROLE_PROJECT : has
PROJECT_GROUP ||--o{ PROJECT : contains
PROJECT ||--o{ REVIEW_LOG : has
PROJECT ||--o{ PROJECT_MEMBER : has
PROJECT ||--o{ PERMISSION_GUARD_RULE : has
PROJECT }o--o| LLM_CONFIG : uses
PROJECT }o--o| PROMPT_TEMPLATE : uses
PROJECT }o--o| IM_BOT : notifies
REVIEW_LOG ||--o{ FILE_REVIEW : has
REVIEW_LOG ||--o{ REVIEW_FEEDBACK : receives
IM_BOT ||--o{ DAILY_REPORT : sends
USER {
uint id PK
string username UK
string password
string email
string nickname
uint role_id FK
string auth_type "local/ldap"
bool is_active
datetime last_login
}
ROLE {
uint id PK
string name UK
string display_name
bool is_system
bool can_write
bool is_active
}
PROJECT {
uint id PK
string name UK
string url UK
string platform
string access_token
string webhook_secret
bool ai_enabled
uint llm_config_id FK
uint ai_prompt_id FK
uint im_bot_id FK
uint group_id FK
float min_score
bool file_review_enabled
}
REVIEW_LOG {
uint id PK
uint project_id FK
string event_type
string commit_hash
string branch
string author
float score
string review_status
string review_result
bool is_manual
}
FILE_REVIEW {
uint id PK
uint review_log_id FK
string file_path
float score
string review_result
string review_status
}
LLM_CONFIG {
uint id PK
string name
string provider
string base_url
string api_key
string model
bool is_default
}
🚀 快速开始
环境要求
| 组件 | 版本要求 | 说明 |
|---|
| Go | ≥ 1.21 | 后端运行环境 |
| Node.js | ≥ 18 | 前端构建环境 |
| Docker | ≥ 20.10 | 容器化部署(可选) |
| MySQL/PostgreSQL | ≥ 8.0 / ≥ 13 | 数据库(可选,默认 SQLite) |
| Redis | ≥ 6.0 | 异步任务队列(可选) |
方式一:Docker 部署(推荐)
git clone https://github.com/your-repo/gitlab-help.git
cd gitlab-help
docker-compose -f docker-compose.sqlite.yml up -d
docker-compose up -d
方式二:本地开发
git clone https://github.com/your-repo/gitlab-help.git
cd gitlab-help
cp config.yaml.example config.yaml
cd backend
go mod download
go run ./cmd/server
cd frontend
npm install
npm run dev
首次配置
- 登录系统 - 使用默认账号
admin / admin
- 配置 Git 凭证 - 在「Git 凭证」添加 GitLab Access Token
- 配置 LLM - 在「大模型管理」添加 AI 模型(如需 AI 审查)
- 配置 Webhook - 将 Webhook URL 配置到 GitLab 项目
- 测试集成 - 提交代码或创建 MR 触发流程
📦 部署指南
Docker Compose 配置
| 配置文件 | 适用场景 |
|---|
docker-compose.yml | 生产部署,MySQL |
docker-compose.sqlite.yml | 轻量部署,SQLite |
docker-compose.postgres.yml | PostgreSQL 部署 |
docker-compose.dev.yml | 开发环境 |
环境变量
| 变量名 | 说明 | 默认值 |
|---|
SERVER_HOST | 服务监听地址 | 0.0.0.0 |
SERVER_PORT | 服务端口 | 8080 |
SERVER_MODE | 运行模式 (debug/release/test) | release |
DB_DRIVER | 数据库类型 (sqlite/mysql/postgres) | sqlite |
DB_DSN | 数据库连接串 | gitlab-help.db |
JWT_SECRET | JWT 密钥 | 随机生成 |
REDIS_URL | Redis 连接 (可选) | - |
配置文件结构
server:
host: "0.0.0.0"
port: "8080"
mode: "release"
database:
driver: "sqlite"
dsn: "gitlab-help.db"
jwt:
secret: "your-secret-key"
expire_hour: 24
ldap:
enabled: false
host: "ldap.example.com"
port: 389
base_dn: "dc=example,dc=com"
bind_dn: "cn=admin,dc=example,dc=com"
bind_password: ""
user_filter: "(uid=%s)"
use_ssl: false
redis:
enabled: false
addr: "localhost:6379"
password: ""
db: 0
GitLab Webhook 配置
- 进入 GitLab 项目 Settings → Webhooks
- 填写配置:
- URL:
https://your-domain/webhook
- Secret token: 配置的 Webhook 密钥
- Trigger:
- ✅ Push events
- ✅ Merge request events
- 点击 Add webhook
💡 提示: 配置 Git 凭证后,系统会在收到 Webhook 时自动创建对应项目,无需手动添加。
🛠️ 技术栈
后端
前端
数据库支持
| 数据库 | 说明 |
|---|
| SQLite | 默认,无需额外配置,适合小团队 |
| MySQL | 生产环境推荐 |
| PostgreSQL | 企业级选择 |
📋 API 接口
认证接口
| 方法 | 路径 | 说明 | 权限 |
|---|
POST | /api/auth/login | 登录 | 公开 |
GET | /api/auth/config | 获取认证配置 | 公开 |
GET | /api/auth/me | 获取当前用户 | 登录 |
POST | /api/auth/logout | 退出登录 | 登录 |
POST | /api/auth/change-password | 修改密码 | 登录 |
项目管理
| 方法 | 路径 | 说明 | 权限 |
|---|
GET | /api/projects | 项目列表 | 登录 |
GET | /api/projects/:id | 项目详情 | 登录 |
POST | /api/projects | 创建项目 | Admin |
PUT | /api/projects/:id | 更新项目 | Admin |
DELETE | /api/projects/:id | 删除项目 | Admin |
GET | /api/projects/:id/members | 项目成员 | 登录 |
POST | /api/projects/:id/members/sync | 同步成员 | Admin |
代码审查
| 方法 | 路径 | 说明 | 权限 |
|---|
GET | /api/review-logs | 审查记录列表 | 登录 |
GET | /api/review-logs/:id | 审查详情 | 登录 |
POST | /api/review-logs/:id/retry | 重试审查 | Admin |
DELETE | /api/review-logs/:id | 删除记录 | Admin |
POST | /api/review-logs/manual | 手动创建 | Admin |
POST | /api/review-logs/import | 批量导入 | Admin |
GET | /api/review-logs/:id/file-reviews | 文件级审查 | 登录 |
GET | /api/review-logs/:id/feedbacks | 反馈列表 | 登录 |
POST | /api/review-feedbacks | 创建反馈 | 登录 |
用户与角色
| 方法 | 路径 | 说明 | 权限 |
|---|
GET | /api/users | 用户列表 | Admin |
POST | /api/users | 创建用户 | Admin |
PUT | /api/users/:id | 更新用户 | Admin |
DELETE | /api/users/:id | 删除用户 | Admin |
GET | /api/roles | 角色列表 | Admin |
POST | /api/roles | 创建角色 | Admin |
PUT | /api/roles/:id | 更新角色 | Admin |
DELETE | /api/roles/:id | 删除角色 | Admin |
GET | /api/roles/:id/menus | 角色菜单 | Admin |
PUT | /api/roles/:id/menus | 更新菜单权限 | Admin |
配置管理
| 方法 | 路径 | 说明 | 权限 |
|---|
GET | /api/llm-configs | LLM 配置列表 | Admin |
POST | /api/llm-configs | 创建 LLM | Admin |
GET | /api/im-bots | IM 机器人列表 | Admin |
POST | /api/im-bots | 创建机器人 | Admin |
GET | /api/prompts | 提示词列表 | 登录 |
POST | /api/prompts | 创建提示词 | Admin |
GET | /api/git-credentials | Git 凭证列表 | Admin |
POST | /api/git-credentials | 创建凭证 | Admin |
GET | /api/review-templates | 审查模板列表 | 登录 |
POST | /api/review-templates | 创建模板 | Admin |
Webhook
| 方法 | 路径 | 说明 |
|---|
POST | /webhook | 统一 Webhook 入口 |
POST | /api/webhook/gitlab/:project_id | GitLab Webhook(指定项目) |
实时事件 (SSE)
| 方法 | 路径 | 说明 |
|---|
GET | /api/events/reviews | 审查事件流 |
GET | /api/events/imports | 导入事件流 |
数据分析
| 方法 | 路径 | 说明 | 权限 |
|---|
GET | /api/dashboard/stats | 仪表盘统计 | 登录 |
GET | /api/members | 成员列表 | 登录 |
GET | /api/members/detail | 成员详情 | 登录 |
GET | /api/members/overview | 团队概览 | 登录 |
GET | /api/members/heatmap | 提交热力图 | 登录 |
GET | /api/daily-reports | 日报列表 | Admin |
POST | /api/daily-reports/generate | 生成日报 | Admin |
🖥️ 功能模块
| 模块 | 功能说明 |
|---|
| 仪表盘 | 项目概览、审查趋势、分数分布、Top 项目/作者 |
| 审查记录 | 审查历史、筛选、重试、手动录入、批量导入、文件级详情 |
| 项目管理 | 项目 CRUD、Webhook 配置、AI 设置、通知配置、文件过滤 |
| 项目组 | 项目分组管理、组级访问令牌 |
| 成员分析 | 团队统计、个人详情、提交热力图、性能趋势 |
| 成员管理 | 全局成员档案、中文名、电话号码 |
| 权限守卫 | 路径级访问控制规则配置 |
| 用户管理 | 用户 CRUD、角色分配、认证类型 |
| 角色管理 | RBAC 角色、菜单权限、项目组权限、项目权限 |
| 大模型管理 | 多 LLM 配置、默认模型切换 |
| 通知机器人 | IM 通知配置、错误通知、日报推送 |
| 提示词管理 | 审查提示词模板、变量支持 |
| 审查模板 | 预置审查模板(前端/后端/安全/通用) |
| Git 凭证 | 平台凭证管理、自动创建项目 |
| 系统日志 | 操作审计、日志清理、保留期配置 |
| 系统设置 | LDAP、日报调度、分批审查、文件上下文、假日检测 |
| 日报 | 自动生成、手动发送、调度测试 |
🔐 权限说明
内置角色
| 角色 | 说明 |
|---|
| admin | 系统管理员,拥有所有权限 |
| user | 普通用户,只读权限 |
权限对照表
| 功能模块 | Admin | User |
|---|
| 仪表盘 | ✅ | ✅ |
| 审查记录(查看) | ✅ | ✅ |
| 审查记录(重试/删除) | ✅ | ❌ |
| 项目管理(查看) | ✅ | ✅ |
| 项目管理(编辑) | ✅ | ❌ |
| 成员分析 | ✅ | ✅ |
| 提示词(查看) | ✅ | ✅ |
| 提示词(编辑) | ✅ | ❌ |
| 大模型管理 | ✅ | ❌ |
| 通知机器人 | ✅ | ❌ |
| Git 凭证 | ✅ | ❌ |
| 用户管理 | ✅ | ❌ |
| 角色管理 | ✅ | ❌ |
| 系统日志 | ✅ | ❌ |
| 系统设置 | ✅ | ❌ |
| 日报管理 | ✅ | ❌ |
🌍 国际化
系统支持中英文双语:
- 🇨🇳 简体中文 (zh)
- 🇺🇸 English (en)
语言自动检测浏览器设置,也可手动切换。
🎨 主题支持
支持一键切换,自动保存用户偏好。
🤝 贡献指南
欢迎贡献代码!请遵循以下步骤:
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature)
- 提交更改 (
git commit -m 'Add amazing feature')
- 推送分支 (
git push origin feature/amazing-feature)
- 创建 Pull Request
开发规范
- 后端代码遵循 Go 官方代码规范
- 前端代码使用 ESLint + TypeScript 严格模式
- 提交信息遵循 Conventional Commits 规范