4. CI/CD 流水线概述:流水线阶段划分与关键角色
CI/CD 流水线是将代码从提交到生产环境的自动化流程,通常划分为四个核心阶段:代码提交、构建、测试和部署。每个阶段都有明确的输入、输出、关键节点和角色职责。理解这些阶段是定义 SLI 口径和进行故障排查的基础。
4.1 流水线阶段划分与核心活动
下表总结了四个阶段的核心活动、关键节点和典型产出物:
| 阶段 | 核心活动 | 关键节点 | 典型产出物 |
|---|---|---|---|
| 代码提交 | 开发者推送代码变更到版本控制系统(如 Git) | 代码审查(Code Review)、合并请求(Merge Request) | 提交记录、分支、标签 |
| 构建 | 编译代码、下载依赖、生成制品(如 JAR、Docker 镜像) | 编译检查、依赖扫描、制品打包 | 构建产物、构建日志 |
| 测试 | 执行单元测试、集成测试、安全扫描、性能测试 | 测试覆盖率、质量门禁(Quality Gate) | 测试报告、覆盖率报告 |
| 部署 | 将制品部署到目标环境(测试、预发布、生产) | 环境配置、回滚策略、蓝绿/金丝雀发布 | 部署状态、环境版本 |
SLI 口径提示: 每个阶段的关键节点都是 SLI 的天然采集点。例如,“构建阶段”的“编译时长”和“测试阶段”的“测试通过率”是常见的 SLI 指标。
4.2 流水线阶段流程与角色
下图展示了 CI/CD 流水线的标准阶段流程,以及每个阶段涉及的核心角色:
4.3 各阶段关键节点与角色职责
每个阶段都有特定的关键节点,这些节点是流水线稳定性和效率的保障。下表详细列出了各阶段的关键节点、角色职责和常见故障点:
| 阶段 | 关键节点 | 角色职责 | 常见故障点 |
|---|---|---|---|
| 代码提交 | 代码审查 | 开发者:提交代码;审查者:检查代码逻辑和风格 | 审查延迟、合并冲突 |
| 合并请求 | 开发者:创建 MR;DevOps:配置 Webhook 触发流水线 | Webhook 失效、权限不足 | |
| 构建 | 编译检查 | DevOps:维护构建环境;开发者:修复编译错误 | 依赖缺失、环境不一致 |
| 制品打包 | DevOps:配置制品仓库;SRE:验证制品完整性 | 制品损坏、仓库空间不足 | |
| 测试 | 质量门禁 | QA:设定阈值;DevOps:集成 SonarQube 等工具 | 阈值不合理、工具超时 |
| 安全扫描 | 安全团队:定义扫描规则;DevOps:集成扫描工具 | 误报过多、扫描耗时过长 | |
| 部署 | 环境配置 | SRE:管理配置中心;DevOps:自动化配置下发 | 配置错误、密钥泄露 |
| 回滚策略 | SRE:制定回滚流程;DevOps:实现自动化回滚 | 回滚失败、数据不一致 |
故障排查要点: 流水线故障通常发生在阶段交接处。例如,构建阶段失败可能是由于代码提交阶段的依赖声明不完整;部署阶段失败可能是由于测试阶段的环境配置未同步。排查时应从故障点向上游追溯。
4.4 流水线阶段与 SLI 采集点
每个阶段的关键节点都是 SLI 数据的天然采集点。下表展示了各阶段常见的 SLI 指标及其采集位置:
| 阶段 | SLI 指标 | 采集点 | 说明 |
|---|---|---|---|
| 代码提交 | 提交到触发流水线延迟 | Webhook 接收时间 | 衡量代码提交到流水线启动的效率 |
| 构建 | 构建时长、构建成功率 | 构建任务开始/结束时间 | 反映构建环境的性能和稳定性 |
| 测试 | 测试通过率、测试覆盖率 | 测试执行结果、覆盖率报告 | 衡量代码质量和测试有效性 |
| 部署 | 部署时长、部署成功率 | 部署任务开始/结束时间 | 反映部署流程的自动化和可靠性 |
实践建议: 在流水线中为每个阶段的关键节点添加埋点,记录开始时间、结束时间、状态和错误信息。这些数据是后续 SLI 计算和故障排查的基础。建议使用统一的日志格式(如 JSON)以便于解析和分析。