CI/CD 技能
解決 CI/CD 管線問題的技能組合。
觸發條件
- 「CI 掛了」「GitHub Actions 失敗」
- 「建置錯誤」「測試沒通過」
- 「把管線修好」
功能詳情
| 功能 | 詳情 | 觸發詞 |
|---|---|---|
| 失敗分析 | 請參考 references/analyzing-failures.md | 「查看日誌」「調查原因」 |
| 測試修正 | 請參考 references/fixing-tests.md | 「修好測試」「提出修正方案」 |
執行步驟
- 測試 vs 實作判定(步驟 0)
- 分類使用者意圖(分析或修正)
- 判定複雜度(請參考下方說明)
- 依據上述「功能詳情」讀取適當的參考檔案,或啟動 ci-cd-fixer 子代理
- 檢查結果,必要時重新執行
步驟 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: update API | Alice | 2026-02-04 |
| e4f5g6h | test: add tests | Bob | 2026-02-03 |
變更檔案(--raw):
├── src/api/endpoint.ts (Modified) ← 發生型別錯誤
├── tests/api.test.ts (Modified)
└── package.json (Modified)
→ 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. **「修好它」**
- 嘗試自動修正
💡 重要:嚴禁「蒙混過關」的修正
- ❌ 刪除測試、跳過測試
- ⭕ 正確修正程式碼
如果覺得「測試好像有問題」,
請先確認再決定處理方式。