1.1 CI/CD 管道概述
1.1.1 CI/CD 定义
持续集成(Continuous Integration, CI) 是一种软件开发实践,要求开发人员频繁地将代码变更合并到共享主干仓库(通常每天多次)。每次合并前,通过自动化构建与测试来验证变更,从而尽早发现集成错误。
持续交付(Continuous Delivery, CD) 在 CI 的基础上,确保代码始终处于可部署到生产环境的状态。每次通过 CI 验证的变更,都会自动部署到类生产环境,并通过自动化验收测试,但生产环境的部署仍需手动触发。
持续部署(Continuous Deployment, CD) 是持续交付的延伸,它将通过所有自动化测试的变更直接部署到生产环境,无需人工干预。
核心公式: CI + 自动化测试 + 自动化部署 = 持续交付 → 持续部署
1.1.2 持续集成与持续部署的区别
| 维度 | 持续集成(CI) | 持续部署(CD) |
|---|---|---|
| 目标 | 频繁合并代码,快速发现集成问题 | 自动化将代码部署到生产环境 |
| 触发时机 | 代码推送至共享仓库 | CI 管道通过 + 所有自动化测试通过 |
| 关键活动 | 代码编译、单元测试、静态分析、代码扫描 | 集成测试、性能测试、安全扫描、灰度发布、生产部署 |
| 人工干预 | 无(完全自动化) | 无(完全自动化) |
| 交付频率 | 每天多次 | 每次代码变更通过后立即部署 |
| 风险等级 | 低(仅影响开发环境) | 高(直接影响生产环境) |
| 典型工具 | Jenkins、GitLab CI、GitHub Actions | Spinnaker、ArgoCD、Flux |
实践建议: 团队应从 CI 起步,待测试覆盖率和自动化成熟度达到 80% 以上后,再逐步向持续部署演进。切勿在测试不充分时强行推行全自动部署。
1.1.3 管道在 DevOps 中的核心价值
CI/CD 管道是 DevOps 实践的技术骨架,它将开发、测试、运维流程串联为一条自动化流水线,实现以下核心价值:
- 缩短交付周期: 从代码提交到生产部署的时间从数周缩短到数分钟。
- 提升交付质量: 每次变更都经过自动化测试、代码扫描和安全检查,缺陷在早期被捕获。
- 降低部署风险: 小批量、高频次的部署降低了单次变更的影响范围,回滚更快速。
- 增强团队协作: 开发、测试、运维通过同一管道协作,消除信息孤岛。
- 实现可重复性: 管道定义即代码(Pipeline as Code),环境一致、过程可审计。
- 支持快速回滚: 管道内置回滚机制,一旦生产出现异常,可一键恢复到上一稳定版本。
常见误区: 管道不是“自动化构建脚本”的简单堆砌。缺乏连接池配置、缓存一致性治理、索引选择等基础设施优化的管道,在高并发、大数据量场景下会频繁阻塞,反而成为交付瓶颈。
1.1.4 管道中的关键基础设施治理
在大型分布式系统中,CI/CD 管道的稳定性和性能不仅取决于构建脚本,更依赖于底层基础设施的合理配置。本课程将重点治理以下三大核心问题:
| 治理领域 | 问题描述 | 影响范围 | 本课程覆盖章节 |
|---|---|---|---|
| 连接池配置 | 管道中数据库、Redis、消息队列等连接池大小设置不当,导致资源争抢或连接泄漏 | 构建速度、测试稳定性、部署成功率 | 第 5-10 章 |
| 缓存一致性 | 多阶段管道中缓存(Maven、npm、Docker 层)过期、污染或失效,导致重复下载和构建失败 | 构建时长、磁盘占用、管道可靠性 | 第 11-18 章 |
| 索引选择 | 数据库查询在管道测试阶段因索引缺失或错误选择导致超时,阻塞整个管道 | 测试执行时间、管道吞吐量 | 第 19-25 章 |
课程目标: 通过本课程的学习,你将掌握如何诊断和优化 CI/CD 管道中的连接池瓶颈、缓存策略和数据库索引,使管道在日均千次构建的高负载下仍保持稳定、高效运行。