本文详细介绍如何将 OpenClaw 与 GitLab 集成,实现自动化的代码提交评审工作流。
一、系统架构概述
1.1 核心组件
OpenClaw Gateway 作为中央控制平面,通过 WebSocket 与各种客户端和通道连接。GitLab 集成技能作为插件形式存在,通过 GitLab API 与 GitLab 实例通信,实现代码评审功能。
核心架构包含以下关键部分:Gateway 守护进程负责维护所有消息通道的连接并暴露类型化的 WebSocket API; Skills 技能系统使用 AgentSkills 格式定义工具使用方法,通过编写技能文件可以让 AI 助手掌握调用 GitLab API 的能力;exec 工具用于执行 shell 命令,实际调用 curl 或 git 命令完成操作;Webhooks 用于事件驱动自动化,可在 GitLab 中配置 webhook 触发 OpenClaw 执行评审;Sessions 会话管理维护评审过程中的对话上下文。
scss
┌─────────────────────────────────────────────────────────────────┐
│ OpenClaw Gateway │
│ (ws://127.0.0.1:18789) │
├─────────────────────────────────────────────────────────────────┤
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ GitLab │ │ Skills │ │ 消息通道 │ │
│ │ 集成技能 │ │ (AgentSkills)│ │ (Telegram/Slack/ │ │
│ │ │ │ │ │ Discord/飞书) │ │
│ └──────┬───────┘ └──────┬───────┘ └──────────┬───────────┘ │
│ │ │ │ │
│ └─────────────────┼──────────────────────┘ │
│ ▼ │
│ ┌────────────────────────┐ │
│ │ AI 代码评审 │ │
│ │ 智能体 (via Skills) │ │
│ └────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ GitLab 实例 │
│ ┌────────────┐ ┌────────────┐ ┌────────────────────────┐ │
│ │ 合并请求 │ │ Webhooks │ │ GitLab API │ │
│ │ (MR) │ │ │ │ (REST/GraphQL) │ │
│ └────────────┘ └────────────┘ └────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
1.2 OpenClaw 核心概念映射
| 概念 | 说明 | 集成用途 |
|---|---|---|
| Gateway | 中央控制平面,守护进程形式运行 | 宿主集成技能 |
| Skills | AgentSkills 兼容的技能包,教授工具使用方法 | 创建 GitLab 评审技能 |
| exec 工具 | 执行 shell 命令 | 执行 git 命令、调用 API |
| Webhooks | 事件驱动自动化 | MR 事件触发评审 |
| Sessions | 对话上下文 | 维护评审会话状态 |
| Multi-agent | 多智能体路由 | 按仓库分配不同评审智能体 |
二、配置要求
2.1 GitLab 访问配置
生成个人访问令牌
第一步,登录 GitLab 并进入个人设置页面。点击头像,选择 Preferences,然后访问 Access Tokens 部分。创建新令牌时,需要配置以下权限范围:api 权限提供完整 API 访问能力,read_api 权限用于读取 API 数据,read_repository 权限用于读取仓库内容,如果需要自动批准合并操作还可以添加 write_repository 权限。
配置环境变量
在系统环境变量中配置 GitLab 访问凭据。GITLAB_TOKEN 填写生成的个人访问令牌,GITLAB_URL 设置为 GitLab 实例地址(如果是自托管版本则填写实际地址),GITLAB_PROJECT_ID 指定要操作的项目 ID。
ini
# 在系统环境变量中配置
export GITLAB_TOKEN="glpat-xxxxxxxxxxxxxxxxxxxx"
export GITLAB_URL="https://gitlab.com" # 或自托管地址
export GITLAB_PROJECT_ID="12345678"
2.2 OpenClaw 工作区配置
编辑 OpenClaw 配置文件 ~/.openclaw/openclaw.json,添加技能加载路径和智能体配置。skills.load.extraDirs 指定额外技能目录位置,agents 部分定义专门的 GitLab 评审智能体。
json
{
"skills": {
"load": {
"extraDirs": [
"~/.openclaw/skills/gitlab"
]
}
},
"agents": {
"gitlab-reviewer": {
"model": "custom-model-router-meitu-com/MiniMax-M2.5-MT",
"skills": ["gitlab-code-review"]
}
}
}
三、实施步骤
步骤一:创建 GitLab 集成技能
创建技能目录 ~/.openclaw/skills/gitlab-code-review/ 并在其中创建 SKILL.md 文件。这个技能文件定义了 AI 助手如何与 GitLab API 交互。
yaml
---
name: gitlab-code-review
description: GitLab 代码评审工作流集成技能
version: 1.0.0
metadata:
openclaw:
triggers:
- when: 消息包含 "评审" 或 "review"
- when: Webhook 事件是 merge_request
env:
GITLAB_TOKEN: 必填
GITLAB_URL: 可选
GITLAB_PROJECT_ID: 可选
---
# GitLab 代码评审技能
此技能使 AI 助手能够通过 GitLab API 执行代码评审任务。
## 可用操作
### 1. 获取合并请求详情
触发条件:用户询问 MR 详情或评审时使用此操作获取 MR 信息。
```bash
curl -s -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
"$GITLAB_URL/api/v4/projects/$GITLAB_PROJECT_ID/merge_requests/$mr_iid"
2. 获取变更文件列表
触发条件:需要查看 MR 中变更了哪些文件时列出所有修改的文件。
bash
curl -s -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
"$GITLAB_URL/api/v4/projects/$GITLAB_PROJECT_ID/merge_requests/$mr_iid/changes"
3. 获取 Diff 内容
触发条件:需要评审特定文件的变更时获取统一 diff。
bash
curl -s -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
"$GITLAB_URL/api/v4/projects/$GITLAB_PROJECT_ID/merge_requests/$mr_iid/diffs"
4. 提交评审评论
触发条件:提交评审反馈时添加评论到 MR。
bash
curl -s -X POST -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
-H "Content-Type: application/json" \
-d '{"body": "评审意见内容"}' \
"$GITLAB_URL/api/v4/projects/$GITLAB_PROJECT_ID/merge_requests/$mr_iid/notes"
5. 批准合并请求
触发条件:代码符合质量标准时批准 MR。
bash
curl -s -X POST -H "PRIVATE-TOKEN: $GITLAB_TOKEN" \
"$GITLAB_URL/api/v4/projects/$GITLAB_PROJECT_ID/merge_requests/$mr_iid/approve"
工作流程
当被要求评审代码时,按以下流程执行:第一步确认请求,明确要评审的 MR 编号。第二步获取 MR 详情,包括标题、描述、作者、源分支和目标分支。第三步获取所有变更,检索修改的文件列表。第四步逐文件分析,获取 diff 内容并分析代码风格、逻辑错误、安全问题、测试覆盖率。第五步整理发现,按严重程度组织观察结果。第六步发布反馈,在 MR 上添加建设性评论。第七步总结,向用户提供整体评估。
代码评审指南
评审时应保持建设性且具体,指出存在的具体问题位置,必要时提供改进建议和代码示例。同时需要突出显示安全问题,检查缩进、命名规范、错误处理、测试覆盖等方面。
yaml
### 步骤二:配置 GitLab Webhooks(可选)
在 GitLab 项目设置中配置 webhook 以实现自动化触发。在项目设置中找到 Webhooks 部分,添加新的 webhook,URL 设置为 OpenClaw 实例地址,触发事件选择 Merge request events。
### 步骤三:测试集成
通过 OpenClaw CLI 测试集成功能。发送消息 "评审 MR !123 in project mygroup/myrepo" 到配置的通道,或使用 CLI 直接测试。
---
四、安全最佳实践
4.1 令牌管理
| 做法 | 实现方式 |
|---|---|
| 永不强存令牌 | 使用环境变量或安全保险库 |
| 限制令牌权限 | 创建具有最小必需权限的令牌 |
| 定期轮换 | 设置令牌过期并定期轮换 |
| 审计访问 | 记录所有 API 调用以符合合规要求 |
4.2 OpenClaw 安全配置
在配置文件中设置安全策略,包括认证模式、exec 工具白名单、技能环境变量隔离等。gateway.auth.mode 设置为 password 启用密码认证,tools.exec.security 设置为 allowlist 限制可执行命令,skills.entries 中的环境变量从系统环境读取而不是硬编码。
4.3 速率限制与安全防护
为防止滥用,应设置每次评审最多处理 20 个文件,最大评论数应批量处理而非每行一个,且必须人工批准后才能自动合并。
五、验证方法
5.1 功能测试
| 测试用例 | 预期结果 |
|---|---|
| 查看 MR !5 详情 | 返回 MR 详情信息 |
| 查看 !5 变更了哪些文件 | 列出修改的文件列表 |
| 评审 !5 | 分析代码并发布评审评论 |
| 新 MR 触发 webhook | 智能体收到通知并开始评审 |
5.2 集成验证
验证 GitLab API 连接是否正常,检查 OpenClaw 执行工具是否可用,确认技能已正确加载。
5.3 监控
定期检查 OpenClaw 日志了解运行状态,检查 GitLab 审计日志中的 API 活动,为失败的评审请求设置告警以便及时处理。
六、高级功能
6.1 多项目支持
按项目路由到不同的评审智能体,实现前端代码和后端代码由不同智能体评审。
json
{
"agents": {
"frontend-reviewer": {
"channels": ["telegram"],
"skills": ["gitlab-code-review"],
"routing": {
"match": "project in ['frontend-app', 'ui-components']"
}
},
"backend-reviewer": {
"channels": ["slack"],
"skills": ["gitlab-code-review"],
"routing": {
"match": "project in ['api-service', 'backend-core']"
}
}
}
}
6.2 AI 驱动评审
增强技能以使用 AI 进行更深层次的分析,包括识别潜在的 bug 和逻辑错误、建议性能优化、检查安全漏洞(OWASP 指南)、评估测试覆盖率、验证项目编码规范的遵守情况。
6.3 常用 GitLab API 端点
| 端点 | 方法 | 用途 |
|---|---|---|
| /projects/:id/merge_requests | GET | 列出 MR |
| /projects/:id/merge_requests/:iid | GET | 获取 MR 详情 |
| /projects/:id/merge_requests/:iid/changes | GET | 获取 MR 变更 |
| /projects/:id/merge_requests/:iid/notes | GET/POST | 获取/添加评论 |
| /projects/:id/merge_requests/:iid/approve | POST | 批准 MR |
| /projects/:id/merge_requests/:iid/merge | POST | 合并 MR |
| /projects/:id/merge_requests/:iid/discussions | GET/POST | 获取/创建讨论 |