CI/CD管道消防队技能Skill ci

这是一个用于解决CI/CD管道问题的技能,专注于持续集成和持续部署流程中的失败分析、测试修正、原因判定和故障排查。关键词:CI, CD, 管道, 失败分析, 测试修正, DevOps, 自动测试, 构建错误, 环境问题。

CI/CD 0 次安装 0 次浏览 更新于 3/10/2026

name: ci description: “CI变红时呼叫。管道消防队,出动。当用户提到CI失败、构建错误、测试失败或管道问题时使用。不要用于:本地构建、标准实现工作、审查或设置。” description-en: “CI变红?呼叫我们。管道消防队部署。当用户提到CI失败、构建错误、测试失败或管道问题时使用。不要用于:本地构建、标准实现工作、审查或设置。” description-ja: “CI变红时呼叫。管道消防队,出动。当用户提到CI失败、构建错误、测试失败或管道问题时使用。不要用于:本地构建、标准实现工作、审查或设置。” allowed-tools: [“Read”, “Grep”, “Bash”, “Task”] user-invocable: false context: fork argument-hint: “[analyze|fix|run]”

CI/CD 技能

CI/CD 管道相关问题的解决技能群。


触发条件

  • “CI失败了”“GitHub Actions失败”
  • “构建错误”“测试不通过”
  • “修复管道”

功能详细

功能 详细 触发器
失败分析 参见 references/analyzing-failures.md “查看日志”“调查原因”
测试修正 参见 references/fixing-tests.md “修复测试”“提出修正方案”

执行步骤

  1. 测试 vs 实现判定(步骤 0)
  2. 分类用户意图(分析或修正)
  3. 判定复杂度(如下所述)
  4. 从上述“功能详细”中读取适当参考文件,或启动 ci-cd-fixer 子代理
  5. 确认结果,必要时重新执行

步骤 0: 测试 vs 实现判定(品质判定门)

CI 失败时,首先进行原因分析:

CI 失败报告
    ↓
┌─────────────────────────────────────────┐
│           测试 vs 实现判定              │
├─────────────────────────────────────────┤
│  错误原因分析:                         │
│  ├── 实现错误 → 修正实现                │
│  ├── 测试过时 → 向用户确认              │
│  └── 环境问题 → 修正环境                │
└─────────────────────────────────────────┘

禁止事项(防止篡改)

⚠️ CI 失败时的禁止事项

以下“解决方案”是禁止的:

| 禁止 | 例 | 正确对应 |
|------|-----|-----------|
| 测试跳过化 | `it.skip(...)` | 修正实现 |
| 断言删除 | 删除 `expect()` | 确认期望值 |
| CI 检查绕过 | `continue-on-error` | 修正根本原因 |
| lint 规则放宽 | `eslint-disable` | 修正代码 |

判断流程

🔴 CI 已失败

**需要判断**:

1. **实现错误** → 修正实现 ✅
2. **测试期望值过时** → 向用户请求确认
3. **环境问题** → 修正环境设置

⚠️ 禁止篡改测试(跳过化、断言删除)

属于哪种情况?

需要批准的情况

测试/设置变更不可避免时:

## 🚨 测试/设置变更的批准请求

### 理由
[为什么需要此变更]

### 变更内容
[差异]

### 替代方案考虑
- [ ] 确认是否可以通过实现修正解决

等待用户的明确批准

Git log 扩展标志的活用(CC 2.1.49+)

利用结构化日志确定 CI 失败时的原因提交。

原因提交的确定

# 结构化格式进行提交分析
git log --format="%h|%s|%an|%ad" --date=short -10

# 拓扑顺序进行时间序列分析
git log --topo-order --oneline -20

# 变更文件与原因的关联
git log --raw --oneline -5

主要活用场景

用途 标志 效果
失败原因确定 `–format="%h %s"`
时间序列追踪 --topo-order 考虑合并顺序的追踪
变更影响把握 --raw 文件变更的详细显示
合并排除分析 --cherry-pick --no-merges 仅提取实际提交

输出示例

🔍 CI 失败原因分析

最近的提交(结构化):
| Hash | Subject | Author | Date |
|------|---------|--------|------|
| a1b2c3d | feat: 更新 API | Alice | 2026-02-04 |
| e4f5g6h | test: 添加测试 | Bob | 2026-02-03 |

变更文件(--raw):
├── src/api/endpoint.ts(修改)← 类型错误发生
├── tests/api.test.ts(修改)
└── package.json(修改)

→ a1b2c3d 的提交可能是原因
  类型错误:src/api/endpoint.ts:42

子代理联动

满足以下条件时,使用 Task tool 启动 ci-cd-fixer:

  • 修正 → 重新执行 → 失败的循环发生 2次以上
  • 或者,错误涉及多个文件的复杂情况

启动模式

Task tool:
  subagent_type="ci-cd-fixer"
  prompt="请诊断和修正 CI 失败。错误日志:{error_log}"

ci-cd-fixer 以安全第一运行(默认 dry-run 模式)。 详情参见 agents/ci-cd-fixer.md


面向 VibeCoder

🔧 CI 坏掉时的说法

1. **“CI 失败了”“变红了”**
   - 自动测试失败的状态

2. **“为什么失败了?”**
   - 希望调查原因

3. **“修复它”**
   - 尝试自动修正

💡 重要:禁止“糊弄”测试的修正
   - ❌ 删除测试、跳过测试
   - ⭕ 正确修正代码

如果觉得“测试可能错了”,
首先确认,然后决定对应方式