Skip to content

Gitlab Workflow

Verified

Gitlab Workflow — git & version control tool. Supports CI/CD, MorphixAI.

88 downloads
$ Add to .claude/skills/

About This Skill

Content available in Chinese

# GitLab 工作流

通过 `mx_gitlab` 工具管理 GitLab 项目。严格遵守团队规范。

前置条件

  1. 安装插件: `openclaw plugins install openclaw-morphixai`
  2. 获取 API Key: 访问 morphix.app/api-keys 生成 `mk_xxxxxx` 密钥
  3. 配置环境变量: `export MORPHIXAI_API_KEY="mk_your_key_here"`
  4. 链接账号: 访问 morphix.app/connections 链接 GitLab 账号,或通过 `mx_link` 工具链接(app: `gitlab`)

---

参数命名规范(重要)

`mx_gitlab` 工具所有 action 的参数命名:

| 参数 | 说明 | |------|------| | `project` | 项目 ID(数字字符串)或路径(`group/repo`),不是 `project_id` | | `mr_iid` | MR 在项目内的序号,不是 `merge_request_iid` | | `pipeline_id` | Pipeline 的全局 ID |

description 字段换行格式

> ⚠️ `description` 字段必须使用真实换行符,不要使用 `\n` 字面量字符串。 > > 错误示例(在 GitLab 上会显示为 `\n`): > ``` > description: "改动\n- 修复 bug\n- 新增功能" > ``` > > 正确示例(使用 YAML 多行字符串): > ```yaml > description: | > ## 改动 > - 修复 bug > - 新增功能 > > ## 测试 > - 单元测试通过 > ```

---

代码审查策略(优先级顺序)

获取 MR 代码变更时,按以下顺序尝试:

✅ 优先:本地 git(推荐)

  • 本地仓库 + git 命令是最可靠的代码审查方式:
  • 无需额外认证(使用本地已有凭证)
  • 无响应体大小限制(任意规模的 diff)
  • 速度快,工具丰富(log、diff、show、blame)

第一步:查找本地仓库路径

```bash # nodes.run — 在本机执行 find ~/www -maxdepth 4 -type d -name '<仓库名>' # 例:find ~/www -maxdepth 4 -type d -name 'tanka-2b-web' ```

第二步:fetch 最新数据

```bash # nodes.run — 工作目录切换到仓库路径 cd ~/www/<项目路径> && git fetch origin ```

第三步:获取 MR 的 commits(需要知道源分支和目标分支)

```bash # 查看 MR 分支间的 commit 列表 git log origin/<target-branch>..origin/<source-branch> --oneline

# 示例(MR: feat/zoom-v2/main → uat-tanka-oh) git log origin/uat-tanka-oh..origin/feat/zoom-v2/main --oneline ```

第四步:获取文件变更统计

```bash git diff --stat origin/<target-branch>...origin/<source-branch> # 示例 git diff --stat origin/uat-tanka-oh...origin/feat/zoom-v2/main ```

第五步:获取具体文件的 diff

```bash # 全量 diff(大 MR 慎用,建议指定文件) git diff origin/<target-branch>...origin/<source-branch>

# 指定文件 diff(推荐) git diff origin/<target-branch>...origin/<source-branch> -- src/path/to/file.ts

# 只看特定目录 git diff origin/<target-branch>...origin/<source-branch> -- src/components/ ```

---

⚠️ 备用:mx_link proxy(本地无仓库时使用)

当本地不存在仓库时,通过 MorphixAI 代理调用 GitLab API。 注意:大型 MR 的 diff 可能因响应体过大返回 400,此时只能使用本地 git。

``` mx_link: action: proxy account_id: <gitlab-account-id> method: GET url: https://gitlab.com/api/v4/projects/<project-id>/merge_requests/<mr-iid>/changes ```

  • 可用的 MR 相关 API:
  • `GET /api/v4/projects/{id}/merge_requests/{iid}` — MR 详情
  • `GET /api/v4/projects/{id}/merge_requests/{iid}/changes` — 文件变更(可能因大小失败)
  • `GET /api/v4/projects/{id}/merge_requests/{iid}/discussions` — Discussion 线程
  • `GET /api/v4/projects/{id}/merge_requests/{iid}/notes` — 评论列表
  • `POST /api/v4/projects/{id}/merge_requests/{iid}/notes` — 发表评论
  • `GET /api/v4/projects/{id}/merge_requests/{iid}/approvals` — 审批状态

---

分支命名

  • `feature/JIRA-{ID}-{简短描述}` — 新功能
  • `fix/JIRA-{ID}-{简短描述}` — bug 修复
  • `release/v{X.Y.Z}` — 发布分支
  • `hotfix/v{X.Y.Z}-{描述}` — 生产热修复

Commit Message 格式

`{Scope}: {action} {description}`

  • Scope:模块名(SDK、CLI、Gateway、Bot 等)
  • Actions:add / update / fix / remove / refactor
  • 示例:`SDK: add message retry logic`
  • 相关改动一个 commit,绝不混杂无关重构

---

核心操作(mx_gitlab)

查看当前用户

``` mx_gitlab: action: get_user ```

列出项目

``` mx_gitlab: action: list_projects per_page: 10 ```

查看项目详情

``` mx_gitlab: action: get_project project: "12345" ```

MR 操作

列出 MR: ``` mx_gitlab: action: list_merge_requests project: "12345" state: "opened" ```

创建 MR: ``` mx_gitlab: action: create_merge_request project: "12345" source_branch: "feature/JIRA-123-user-login" target_branch: "main" title: "[JIRA-123] 实现用户登录功能" description: "## 改动\n- 实现 JWT 登录\n\n## 测试\n- 单元测试通过\n\n## 关联\n- JIRA-123" ```

审批 MR: ``` mx_gitlab: action: approve_merge_request project: "12345" mr_iid: 42 ```

  • 查看单条 MR 详情(含合并就绪状态):
  • ```
  • mx_gitlab:
  • action: get_merge_request
  • project: "12345"
  • mr_iid: 42
  • ```
  • 返回关键字段:
  • `detailed_merge_status`: `mergeable`(可合并)/ `preparing`(准备中,需等待)/ `checking`(检查中)/ `ci_must_pass`(CI 未通过)/ `not_approved`(未获批准)/ `discussions_not_resolved`(有未解决讨论)
  • `has_conflicts`: 是否有冲突
  • `blocking_discussions_resolved`: 阻塞性讨论是否已解决
  • `pipeline`: 最新 Pipeline 状态

合并前必须先检查状态(重要):

> ⚠️ 直接调用 `merge_merge_request` 而不检查状态会导致 500 错误(MR 未就绪时 GitLab 拒绝合并)

  1. ```
  2. # 正确流程:
  3. mx_gitlab: get_merge_request → 确认 detailed_merge_status === "mergeable"
  4. 如果是 "preparing" 或 "checking" → 等待后重试 get_merge_request
  5. 如果是 "ci_must_pass" → CI 未通过,不能合并
  6. 如果是 "not_approved" → 需要审批,先 approve_merge_request
  7. 确认 mergeable 后 → mx_gitlab: merge_merge_request
  8. ```

合并 MR: ``` mx_gitlab: action: merge_merge_request project: "12345" mr_iid: 42 ```

> ✅ `merge_merge_request` 会自动检查 `detailed_merge_status`,若 MR 未就绪会直接返回错误和原因,无需手动 pre-check。

更新 MR(设置 Reviewer / Assignee / 标签等): ``` # 先搜索 GitLab 用户 ID mx_gitlab: action: search_users search: "username_or_name"

# 再设置 reviewer(使用搜索结果中的 id 字段) mx_gitlab: action: update_merge_request project: "12345" mr_iid: 42 reviewer_ids: [12345] ```

CI/CD 操作

查看 Pipeline: ``` mx_gitlab: action: list_pipelines project: "12345" per_page: 5 ```

重试失败的 Pipeline: ``` mx_gitlab: action: retry_pipeline project: "12345" pipeline_id: 67890 ```

Issue 操作

列出 Issue: ``` mx_gitlab: action: list_issues project: "12345" state: "opened" ```

创建 Issue: ``` mx_gitlab: action: create_issue project: "12345" title: "Bug: 登录页面白屏" description: "## 问题\n在 Safari 下登录页面白屏\n\n## 复现\n1. 打开 Safari\n2. 访问 /login" labels: ["bug", "frontend"] ```

分支操作

列出分支: ``` mx_gitlab: action: list_branches project: "12345" search: "feature/" ```

---

MR 创建规范

标题:`[JIRA-{ID}] {描述}`

  1. 描述必须包含:
  2. 改了什么,为什么改
  3. 如何测试
  4. 关联的 Jira Issue 链接

至少指定 1 个 Reviewer。单个 MR 最多 500 行变更。

Code Review 检查清单

  1. Review MR 时,按顺序检查所有项目:
  2. 分支命名符合规范
  3. Commit message 清晰且有 scope
  4. 代码符合团队风格指南
  5. 有对应的测试用例
  6. CI pipeline 全绿
  7. 无未解决的 Discussion
  8. 无硬编码的 secret 或 token
  9. 破坏性变更有文档说明

所有项通过才能 approve。评论具体问题时引用行号。

---

常见工作流

审查指定 MR(完整流程)

  1. ```
  2. mx_gitlab: list_merge_requests, project: "<id>", state: "opened"
  3. → 获取 MR 信息(source_branch, target_branch, mr_iid)
  1. nodes.run: find ~/www -maxdepth 4 -type d -name '<repo>'
  2. → 查找本地仓库路径
  1. nodes.run: cd <repo-path> && git fetch origin
  2. → 更新远端分支数据
  1. nodes.run: git log origin/<target>..origin/<source> --oneline
  2. → 查看 commit 列表
  1. nodes.run: git diff --stat origin/<target>...origin/<source>
  2. → 查看文件变更统计
  1. nodes.run: git diff origin/<target>...origin/<source> -- <关键文件>
  2. → 深入审查关键文件的 diff
  1. mx_gitlab: list_pipelines, project: "<id>" → 确认 CI 状态
  1. mx_gitlab: approve_merge_request, project: "<id>", mr_iid: <iid>(审查通过后)
  2. ```

查看我的待处理 MR

  1. ```
  2. mx_gitlab: get_user → 获取用户名
  3. mx_gitlab: list_merge_requests, project: "<id>", state: "opened"
  4. → 列出 open 状态的 MR
  5. mx_gitlab: list_pipelines, project: "<id>" → 检查 CI 状态
  6. ```

创建并合并 Feature MR

  1. ```
  2. mx_gitlab: create_merge_request
  3. project: "<id>", source_branch: "feature/xxx", target_branch: "main"
  4. title: "[JIRA-xxx] desc"
  5. mx_gitlab: get_merge_request, project: "<id>", mr_iid: <iid>
  6. → 等待 detailed_merge_status 变为 "mergeable"
  7. (刚创建后状态为 "preparing",需要等待 GitLab 完成检查)
  8. mx_gitlab: list_pipelines, project: "<id>" → 确认 CI 通过
  9. mx_gitlab: merge_merge_request, project: "<id>", mr_iid: <iid> → 合并
  10. ```

CI 失败处理

  1. ```
  2. mx_gitlab: list_pipelines, project: "<id>", status: "failed"
  3. mx_gitlab: retry_pipeline, project: "<id>", pipeline_id: <id>
  4. ```

设置 MR Reviewer(完整流程)

  1. ```
  2. mx_gitlab: search_users, search: "reviewer_name"
  3. → 从结果中找到目标用户的 id(数字)
  4. mx_gitlab: update_merge_request
  5. project: "<id>", mr_iid: <iid>, reviewer_ids: [<user_id>]
  6. ```

Pipeline 监控(等待 Pipeline 完成)

> ⚠️ 心跳(HEARTBEAT)默认间隔 30m,Anthropic setup-token 下为 1h,不适合实时监控。 > > 推荐做法:将监控任务写入 `HEARTBEAT.md`,心跳触发时自动检查: > ```md > ## 待监控 > - Pipeline #10164 (project: tanka-electron):等待完成,完成后通知用户 > ``` > > 或用户要求"立即检查"时,直接调用: > ``` > mx_gitlab: list_pipelines, project: "<id>", per_page: 5 > ``` > 对比 pipeline id 和状态,判断是否完成。

---

注意事项

  • `project` 参数:数字 ID(如 `"12345"`)或路径(如 `"my-group/my-project"`),通过 `list_projects` 或 `get_project` 获取
  • `mr_iid` 是 MR 在项目内的序号(非全局 ID),从 `list_merge_requests` 或 `create_merge_request` 返回结果中获取
  • `account_id` 参数通常省略,工具自动检测已链接的 GitLab 账号
  • `mx_link proxy` 获取 MR diff 可能因响应体过大返回 400,优先使用本地 git

Use Cases

  • Manage GitLab CI/CD pipeline configurations and workflow automation
  • Create and manage merge requests through the GitLab API
  • Automate GitLab repository operations for team workflows
  • Configure GitLab CI pipelines for automated testing and deployment
  • Streamline GitLab-based development workflows with AI assistance

Pros & Cons

Pros

  • +Compatible with multiple platforms including claude-code, openclaw
  • +Well-documented with detailed usage instructions and examples
  • +Open source with permissive licensing for commercial use

Cons

  • -Documentation primarily in Chinese — may be less accessible for English-only users
  • -No built-in analytics or usage metrics dashboard

FAQ

What does Gitlab Workflow do?
Gitlab Workflow — git & version control tool. Supports CI/CD, MorphixAI.
What platforms support Gitlab Workflow?
Gitlab Workflow is available on Claude Code, OpenClaw.
What are the use cases for Gitlab Workflow?
Manage GitLab CI/CD pipeline configurations and workflow automation. Create and manage merge requests through the GitLab API. Automate GitLab repository operations for team workflows.

100+ free AI tools

Writing, PDF, image, and developer tools — all in your browser.

Next Step

Use the skill detail page to evaluate fit and install steps. For a direct browser workflow, move into a focused tool route instead of staying in broader support surfaces.