2. Runbook 概述:定义、作用与常见类型

Runbook(运行手册)是 CI/CD 流水线运维中最重要的知识载体。它把“人知道怎么做”变成“系统可执行、团队可查阅”的标准化文档。在失败复测场景下,Runbook 直接决定 MTTR(平均修复时间)能从小时级降到分钟级。

2.1 Runbook 的定义

Runbook 是一套结构化的操作指令集,用于指导运维或开发人员完成特定任务。它包含:

  • 触发条件:什么情况下执行该 Runbook(如流水线失败、告警触发)。
  • 前置检查:执行前必须确认的状态(如环境变量、权限、依赖服务)。
  • 操作步骤:按顺序执行的命令、脚本或界面操作。
  • 预期结果:每一步完成后应看到的输出或状态。
  • 回滚方案:操作失败或异常时的恢复路径。
核心公式: Runbook = 标准化操作 × 可重复执行 × 可审计追溯

2.2 Runbook 的作用

作用维度 具体说明 失败复测场景价值
减少认知负荷 新人无需理解全系统架构即可执行修复 降低复测门槛,值班人员可快速上手
保证操作一致性 消除“不同人不同做法”的偏差 复测结果可对比,避免人为差异
加速故障恢复 预定义步骤减少决策时间 流水线失败后 5 分钟内启动复测
知识沉淀 将隐性经验转化为显性文档 每次失败复测都更新 Runbook,持续优化
审计与合规 记录谁在何时执行了什么操作 满足变更管理、SLA 追溯要求

2.3 Runbook 的常见类型

根据触发场景和执行目标,Runbook 分为三大类:

分类原则: 操作型 → 日常维护;故障型 → 异常恢复;变更型 → 计划内修改。三类 Runbook 在 CI/CD 流水线中可能串联使用。

2.3.1 操作型 Runbook

用于执行常规、重复性的运维操作,不涉及故障或变更审批。典型场景:

  • 重启流水线 Agent 节点
  • 清理构建缓存与历史制品
  • 手动触发特定阶段的重新执行
  • 查看和导出流水线日志

2.3.2 故障型 Runbook

针对已知故障模式设计的恢复流程,是失败复测课程的核心关注点。典型场景:

  • 编译失败:检查依赖版本、清理缓存、重试
  • 单元测试失败:定位失败用例、回滚代码、重新触发
  • 部署超时:检查资源配额、重启服务、回滚版本
  • 环境不一致:对比配置差异、同步环境变量

2.3.3 变更型 Runbook

用于计划内的系统变更,需要审批、窗口期和回滚计划。典型场景:

  • 升级 CI/CD 工具版本(如 Jenkins → GitLab CI)
  • 修改流水线触发规则或分支策略
  • 调整构建资源规格(CPU/内存)
  • 新增或废弃制品仓库

2.4 三类 Runbook 对比

对比维度 操作型 故障型 变更型
触发方式 定时 / 手动 告警 / 流水线失败 工单 / 审批通过
执行频率 高(每日多次) 中(按失败频率) 低(每周/每月)
风险等级 低 中 高
是否需要审批 否 视情况(紧急可跳过) 是
回滚要求 可选 必须 必须
失败复测关联 间接(环境准备) 直接(核心场景) 间接(变更后验证)

2.5 Runbook 在失败复测中的典型结构

一个面向流水线失败复测的 Runbook 通常包含以下字段:

# Runbook 模板:流水线失败复测
---
title: "编译阶段失败复测"
type: 故障型
trigger: "流水线 job:build 返回非零退出码"
precheck:
  - "确认构建节点磁盘剩余 > 10GB"
  - "确认基础镜像标签存在"
  - "确认 Git 分支未锁定"
steps:
  - step: 1
    action: "获取失败日志"
    command: "kubectl logs -n ci $(kubectl get pod -n ci -l job=build -o jsonpath='{.items[0].metadata.name}') --tail=200"
    expected: "看到具体编译错误行"
  - step: 2
    action: "清理构建缓存"
    command: "rm -rf /var/cache/ci/build/*"
    expected: "目录清空"
  - step: 3
    action: "重新触发流水线"
    command: "curl -X POST https://ci.example.com/api/pipelines/${PIPELINE_ID}/retry"
    expected: "返回 202 Accepted"
rollback:
  - "如果重试后仍失败,标记为 '需人工介入' 并通知 SRE 值班组"

2.6 Runbook 生命周期与 CI/CD 集成

下图展示 Runbook 从创建到持续优化的完整生命周期,以及它与 CI/CD 流水线的集成关系:

Runbook 生命周期与 CI/CD 集成 1. 创建/编写 2. 版本化存储 3. 自动触发 4. 执行/记录 5. 反馈优化 CI/CD 集成关键点 • Runbook 存储在 Git 仓库中,与流水线配置同版本管理 • 流水线失败时,通过 Webhook 自动匹配并触发对应故障型 Runbook • 执行结果自动回写至 Runbook 日志,用于后续分析和优化 • 每次成功复测后,Runbook 版本号递增,形成知识闭环

2.7 失败复测场景的 Runbook 选择策略

当流水线失败时,值班人员应按照以下优先级选择 Runbook:

  1. 匹配故障型 Runbook:检查是否有针对该失败模式的已知 Runbook(如“编译失败”、“测试超时”)。
  2. 执行操作型 Runbook:若无专用故障 Runbook,先执行“环境检查”和“日志收集”操作型 Runbook 获取上下文。
  3. 触发变更型 Runbook:若确认是环境或配置变更导致失败,执行对应的变更回滚 Runbook。
  4. 创建新 Runbook:若以上均不匹配,记录失败模式并在修复后创建新的故障型 Runbook。
常见误区: 不要跳过故障型 Runbook 直接执行变更型 Runbook。变更型 Runbook 需要审批,会延长 MTTR。优先使用故障型 Runbook 快速恢复流水线,再通过变更型 Runbook 进行根因修复。