2. CI/CD 基础回顾:持续集成与持续部署的核心概念、流水线阶段划分

在深入认证授权平台的接口契约自动校验架构之前,必须夯实 CI/CD 基础。持续集成与持续部署是现代 DevOps 实践的基石,它们将软件交付从手动、低效、高风险的操作转变为自动化、可重复、可审计的工程流程。本章将系统梳理 CI/CD 的核心概念,并详细拆解一条标准流水线的阶段划分。

2.1 核心概念辨析

持续集成、持续交付与持续部署三者常被混用,但其边界与自动化程度存在明确差异。下表从触发时机、人工介入、风险等级三个维度进行对比:

概念 触发时机 人工介入 风险等级 典型产出
持续集成 (CI) 代码提交至共享分支 无(自动构建+自动测试) 低 构建产物 + 测试报告
持续交付 (CD) CI 通过后 需手动确认部署 中 可部署的制品 + 发布审批单
持续部署 (CD) CI 通过后 无(全自动部署至生产) 高 生产环境运行实例
关键认知: 本课程涉及的“接口契约自动校验”主要作用于 CI 阶段,在代码合并前阻断不兼容的 API 变更。持续部署则依赖 CI 阶段产出的可信制品,两者形成前后依赖关系。

2.2 流水线阶段划分

一条成熟的 CI/CD 流水线通常包含 6 个核心阶段。每个阶段都有明确的输入、输出与质量门禁。下图展示了标准流水线的阶段流转关系:

CI/CD 标准流水线阶段流转图 代码提交 Git Push / PR 静态分析 Lint / SAST 构建 & 单元测试 编译 / UT 契约校验 API 兼容性检查 集成测试 E2E / 冒烟 部署 Staging / Prod 说明:契约校验阶段是本章课程的核心关注点,它位于构建之后、集成测试之前,形成早期质量门禁。

2.3 各阶段详细职责与质量门禁

每个阶段都承担特定的质量保障职责,并设置明确的“门禁”条件。只有通过当前阶段,流水线才能继续向下游推进。

  • 代码提交阶段: 触发流水线执行。门禁:提交信息规范、分支命名合规、无合并冲突。
  • 静态分析阶段: 检查代码风格、安全漏洞、潜在缺陷。门禁:无 P0/P1 级别告警。
  • 构建与单元测试阶段: 编译代码、运行单元测试。门禁:编译通过、单元测试覆盖率 ≥ 80%、全部用例通过。
  • 契约校验阶段: 验证 API 接口变更是否向后兼容。门禁:无破坏性变更、新接口注册成功。
  • 集成测试阶段: 部署至测试环境,执行端到端流程。门禁:核心业务场景通过率 100%。
  • 部署阶段: 将制品发布至预发布或生产环境。门禁:人工审批(持续交付)或自动灰度策略(持续部署)。

2.4 流水线执行策略对比

不同的团队规模和项目复杂度,需要选择不同的流水线执行策略。下表对比了三种常见模式:

策略 触发方式 并行度 适用场景 典型工具
线性流水线 串行执行 低 小型项目、单体应用 Jenkins Pipeline
并行阶段流水线 阶段内并行 中 中型项目、多模块 GitLab CI / GitHub Actions
矩阵构建流水线 多维度并行 高 大型项目、多语言/多平台 Jenkins Matrix / CircleCI
实践建议: 对于认证授权平台这类涉及多服务、多协议(OAuth2.0、SAML、JWT)的复杂系统,推荐采用“并行阶段流水线”策略,将契约校验、安全扫描、单元测试等无依赖任务并行执行,以缩短整体流水线耗时。

2.5 流水线产物管理

流水线每个阶段都会产生关键产物,这些产物需要被妥善存储、版本化并传递至下游阶段。以下是标准产物清单:

  • 构建产物: JAR/WAR 包、Docker 镜像、NPM 包。
  • 测试产物: 单元测试报告、覆盖率报告、契约校验报告(含差异对比)。
  • 安全产物: SAST 扫描报告、依赖漏洞清单。
  • 部署产物: Helm Chart、Kubernetes 部署清单、环境变量配置。
常见陷阱: 产物管理不当会导致“构建一次、部署多次”原则失效。务必为每个构建产物生成唯一版本号(如 Git Commit SHA + 构建序号),并上传至制品仓库(如 Nexus、Harbor、Artifactory),避免在流水线节点间直接传递文件。