名称: 监控管道 描述: 监控一个 GitLab 管道或作业直到完成,实时报告状态更改和失败
监控 GitLab 管道
名称
gitlab:monitor-pipeline - 监控管道或作业直到完成,带实时状态更新
概要
/monitor-pipeline <项目-id> <管道-id> [--job <作业-id>] [--interval <秒>]
描述
持续监控一个 GitLab CI/CD 管道或特定作业,直到达到终端状态(成功、失败或取消)。实时报告状态更改,并在任何失败时立即通知用户,提供详细错误信息。
实现
此技能使用轮询方法监控管道和作业状态:
- 初始状态检查:获取当前管道/作业状态
- 轮询循环:定期检查状态(默认:15 秒)
- 更改检测:比较当前状态与先前状态
- 实时报告:输出作业状态转换时的更新
- 失败通知:立即报告失败并提供作业日志
- 完成:当管道达到终端状态时退出
监控算法
WHILE pipeline.status IN [pending, running, waiting_for_resource, preparing]
WAIT interval seconds
FETCH current pipeline status
FETCH all job statuses
FOR each job:
IF job.status changed:
REPORT status change
IF job.status == "failed":
FETCH job logs
REPORT failure details immediately
REPORT overall progress summary
REPORT final pipeline result
用法
监控一个管道
/monitor-pipeline 456 1234
监控特定作业
/monitor-pipeline 456 1234 --job 5678
自定义轮询间隔
/monitor-pipeline 456 1234 --interval 30
此技能的功能
- 使用 GitLab API 获取初始管道状态
- 跟踪作业从待定 -> 运行 -> 成功/失败的转换
- 任何作业失败时立即报告
- 自动获取失败作业的日志
- 提供进度更新,显示已完成与剩余作业
- 管道完成或取消时干净退出
先决条件
- 必须配置 GitLab MCP 服务器
- 访问目标项目
- 有效管道 ID(可从 MR 或项目管道列表获取)
示例交互
成功管道监控
用户: /monitor-pipeline 456 1234
Claude: 开始监控项目 456 中的管道 #1234...
## 管道监控已启动
**管道**: #1234
**分支**: feature/add-authentication
**开始时间**: 2025-01-15 10:30:22
**状态**: 运行中
我将监控此管道并实时报告状态更改。
---
### 更新 [10:31:45]
**阶段: 构建**
- ✓ `compile` 成功完成 (1m 18s)
进度: 1/6 作业完成
---
### 更新 [10:32:30]
**阶段: 构建**
- ✓ `bundle-assets` 成功完成 (42s)
进度: 2/6 作业完成
---
### 更新 [10:34:15]
**阶段: 测试**
- ✓ `unit-tests` 成功完成 (1m 45s)
进度: 3/6 作业完成
---
### 更新 [10:36:00]
**阶段: 测试**
- ✓ `integration-tests` 成功完成 (1m 45s)
进度: 4/6 作业完成
---
### 更新 [10:37:30]
**阶段: 代码检查**
- ✓ `eslint-check` 成功完成 (1m 30s)
- ✓ `type-check` 成功完成 (1m 28s)
进度: 6/6 作业完成
---
## 管道完成
**状态**: ✓ 成功
**总时长**: 7m 08s
**所有 6 个作业通过**
管道成功完成。您的更改已准备好合并。
带失败的管道
用户: /monitor-pipeline 456 1234
Claude: 开始监控管道 #1234...
## 管道监控已启动
**管道**: #1234
**分支**: feature/database-migration
**状态**: 运行中
---
### 更新 [10:31:45]
**阶段: 构建**
- ✓ `compile` 成功完成 (1m 18s)
进度: 1/6 作业完成
---
### 失败警报 [10:33:20]
**作业失败**: `integration-tests` 在阶段 `test`
**时长**: 1m 35s
**退出代码**: 1
**错误日志**:
FAILED tests/integration/auth.test.ts
● Authentication API › POST /login › should validate credentials
ConnectionError: Connection to database refused
at PostgresClient.connect (src/db/client.ts:45:12)
at setupTestDB (tests/setup.ts:23:8)
1 test failed, 12 passed
**可能原因**:
1. CI 环境中数据库服务不可用
2. 缺少 DATABASE_URL 环境变量
3. 测试容器中的网络连接问题
---
## 管道失败
**状态**: ✗ 失败
**时长**: 3m 35s
**失败作业**: 1 (integration-tests)
**通过作业**: 2
**取消作业**: 3
管道因测试失败而失败。请查看以上错误并推送修复。
您需要我帮助调试数据库连接问题吗?
监控特定作业
用户: /monitor-pipeline 456 1234 --job 5678
Claude: 开始监控作业 #5678 (deploy-production)...
## 作业监控已启动
**作业**: deploy-production (#5678)
**阶段**: 部署
**状态**: 运行中
**开始时间**: 2025-01-15 14:30:00
---
### 进度 [14:31:00]
正在部署到生产集群…
- 拉取最新镜像… 完成
- 运行数据库迁移… 完成
- 启动新容器…
---
### 进度 [14:32:30]
- 健康检查通过 (3/3 副本)
- 排空旧实例…
- 部署完成!
---
## 作业完成
**状态**: ✓ 成功
**时长**: 2m 45s
生产部署成功!
参数
| 参数 | 必需 | 描述 |
|---|---|---|
project-id |
是 | 数字项目 ID 或 URL 编码路径 |
pipeline-id |
是 | 要监控的管道 ID |
--job |
否 | 要监控的特定作业 ID,而不是整个管道 |
--interval |
否 | 轮询间隔,以秒为单位(默认: 15,最小: 5,最大: 300) |
终端状态
监控在管道/作业达到以下状态之一时退出:
| 状态 | 描述 |
|---|---|
success |
所有作业成功完成 |
failed |
一个或多个作业失败 |
canceled |
管道被手动取消 |
skipped |
管道被跳过(规则未满足) |
状态指示器
| 图标 | 含义 |
|---|---|
| ✓ | 成功/通过 |
| ✗ | 失败 |
| ⏳ | 运行中 |
| ⏸️ | 待定/等待 |
| ⏭️ | 跳过 |
| ⊘ | 取消 |
提示
- 对于快速管道,使用较短间隔(5-10 秒)
- 对于长时间运行的部署,使用较长间隔(30-60 秒)
- 当您只关心一个阶段时,监控特定作业
- 技能自动获取失败作业的日志
- 如果需要,使用 Ctrl+C 取消监控
错误处理
- API 错误: 使用指数退避重试
- 网络问题: 报告连接问题,继续监控
- 无效 ID: 立即退出并显示有帮助的错误消息
- 权限拒绝: 报告访问问题,建议检查权限
相关命令
/view-pipeline: 管道状态的一次性快照/create-mr: 创建触发管道的 MR/review-mr: 审查 MR,包括管道状态