CI/CD 流水线概述

CI/CD(持续集成与持续部署/交付)是现代 DevOps 实践的基石,它将软件从代码提交到生产部署的整个过程自动化、标准化。理解 CI/CD 的核心定义、阶段划分以及持续集成与持续部署的区别,是构建可靠流水线、设定有效 SLI 的前提。

CI/CD 的核心定义

  • 持续集成 (Continuous Integration, CI):开发人员频繁地将代码变更合并到主干分支,每次合并都通过自动化构建与测试来验证,从而尽早发现集成错误。
  • 持续交付 (Continuous Delivery, CD):在 CI 的基础上,确保代码随时可以部署到生产环境,但部署动作可能需要手动触发。
  • 持续部署 (Continuous Deployment, CD):在持续交付的基础上,将通过所有自动化测试的代码变更自动部署到生产环境,无需人工干预。
关键区分:持续交付与持续部署的核心区别在于“生产部署是否自动化”。持续交付要求代码随时可部署,但保留人工审批环节;持续部署则完全自动化,适合对发布速度要求极高、且具备完善灰度与回滚能力的团队。

持续集成与持续部署的区别

维度 持续集成 (CI) 持续部署 (CD)
核心目标 快速发现集成错误,保证主干代码质量 自动化发布,缩短交付周期,降低发布风险
主要活动 代码合并、构建、单元测试、静态分析 集成测试、性能测试、环境部署、灰度发布
触发方式 代码 push 或 PR 合并 CI 通过后自动触发或手动审批
产出物 构建产物(如 jar、docker image) 生产环境可运行的服务实例
失败影响 阻塞后续合并,开发需立即修复 可能影响生产环境,需具备回滚能力

典型流水线阶段

一个完整的 CI/CD 流水线通常包含以下四个核心阶段,每个阶段都对应明确的检查点与质量门禁。

  1. 代码提交 (Code Commit):开发者将代码推送至版本控制系统(如 Git),触发流水线。此阶段关注提交频率、分支策略与代码规范。
  2. 构建 (Build):将源代码编译、打包为可部署的制品。此阶段关注构建成功率、构建时长与依赖缓存命中率。
  3. 测试 (Test):运行单元测试、集成测试、静态代码分析等。此阶段关注测试覆盖率、测试通过率与测试执行时间。
  4. 部署 (Deploy):将构建产物部署到目标环境(测试、预发、生产)。此阶段关注部署成功率、部署时长与回滚频率。
SLI 设计启示:每个阶段都可以提取关键 SLI。例如,构建阶段可关注“构建成功率 ≥ 95%”,部署阶段可关注“部署失败回滚率 ≤ 5%”。这些 SLI 将作为后续章节的案例基础。

典型 CI/CD 流水线流程

下图展示了一个包含四个核心阶段的典型 CI/CD 流水线,从代码提交到生产部署的完整路径。

典型 CI/CD 流水线流程 典型 CI/CD 流水线流程 代码提交 Git Push / PR 构建 编译 / 打包 测试 单元 / 集成 部署 生产 / 预发 质量门禁 (Quality Gates) 每个阶段通过后,流水线自动进入下一阶段;若失败则阻断并通知开发团队。 失败反馈循环

流水线阶段详细说明

阶段 关键活动 常见工具 典型 SLI 示例
代码提交 代码审查、分支合并、提交信息规范检查 Git, GitHub, GitLab 提交频率、PR 合并时长
构建 编译、依赖下载、制品打包、镜像构建 Maven, Gradle, Docker 构建成功率、构建时长 P95
测试 单元测试、集成测试、代码扫描、安全检测 JUnit, Selenium, SonarQube 测试通过率、代码覆盖率
部署 环境配置、灰度发布、健康检查、回滚 Kubernetes, Ansible, Spinnaker 部署成功率、回滚频率

CI/CD 流水线架构示意

下图从架构视角展示 CI/CD 流水线中各组件之间的协作关系,包括代码仓库、构建服务器、制品仓库、测试环境与生产集群。

CI/CD 流水线架构示意 CI/CD 流水线架构示意 代码仓库 Git / SVN 构建服务器 Jenkins / GitLab CI 制品仓库 Nexus / Docker Hub 测试环境 K8s / 虚拟机 生产集群 K8s / 云服务 自动化触发与反馈 代码提交自动触发构建 → 构建成功推送制品 → 制品自动部署测试环境 → 测试通过后触发生产部署
常见误区:很多团队将 CI/CD 简单理解为“自动构建+自动部署”,却忽略了测试阶段的质量门禁作用。没有充分测试的自动部署,只会加速故障扩散。建议在每个阶段都设置明确的 SLI 阈值,确保流水线不仅是“自动的”,更是“可靠的”。