参考手册 / 网络常识 / 网络常识
什么是CI/CD

CI/CD 是软件开发中的两个核心实践,合起来构成了现代 DevOps(开发运维一体化)流程的基石。它是“持续集成”和“持续交付/部署”的缩写,旨在通过自动化来加快软件交付的速度、提高质量并降低风险。

简单来说,CI/CD 就像一个自动化的软件生产线,帮助开发团队高效、稳定地将代码变成用户可以使用的功能。


一、什么是持续集成 (CI)?

持续集成指的是开发人员频繁地将代码变更合并到主干分支(如 main 或 master),并且每次合并都会触发自动化构建和测试的流程。

核心目标: 尽早发现集成错误,避免“集成地狱”(即所有人在开发最后一天才合并代码,导致冲突和错误爆发)。

CI 的典型流程:

  1. 代码提交: 开发人员完成功能后,将代码推送到远程代码仓库(如 GitHub、GitLab)。

  2. 自动触发: 代码仓库或 CI 工具(如 Jenkins、GitHub Actions)检测到推送,自动开始工作。

  3. 拉取代码: CI 服务器拉取最新的代码。

  4. 构建: 编译代码、打包依赖项。

  5. 测试: 运行自动化测试(单元测试、集成测试等)。

  6. 反馈: 如果构建或测试失败,工具会立即通知开发团队(如通过邮件、即时通讯工具),要求修复。

CI 的好处:

  • 快速发现错误: 每次提交都会验证,bug 在产生后几分钟内就能被发现。

  • 减少合并冲突: 频繁合并代码,让冲突变得小且容易解决。

  • 提高代码质量: 强制自动化测试通过才能合并,形成了一道质量防线。


二、什么是持续交付与持续部署 (CD)?

CD 有两层含义,通常根据团队的需求区分:

1. 持续交付

指在 CI 阶段通过测试后,自动将软件打包并部署到一个类生产环境(如测试环境、预发布环境),等待人工确认后才手动发布到生产环境。

  • 特点: 软件任何时候都是可发布的状态。部署到生产环境需要按下一个按钮(手动触发)。

  • 适用场景: 大多数业务系统、金融系统、电商平台等,需要有业务人员或产品经理最终审核发布窗口。

2. 持续部署

是 CI/CD 的最终极形态。指在 CI 阶段通过测试后,自动将代码部署到生产环境,无需人工干预。

  • 特点: 全自动化。代码合并到主干几分钟后,新功能就上线了。

  • 适用场景: 大型互联网公司(如 Netflix、Amazon)、SaaS(软件即服务)服务商,这些公司需要极高的发布频率和极快的市场响应速度。

CD 的典型流程(以持续部署为例):

代码合并 → 自动构建 → 自动测试 → 自动构建镜像 → 自动发布到生产服务器 → 自动运行冒烟测试


三、一个完整的 CI/CD 流水线示例

假设一个电商网站的开发团队:

  1. 开发: 程序员小张写完“优惠券功能”,执行 git push。

  2. CI(持续集成): GitHub Actions 自动运行。

    • 拉取代码。

    • 安装依赖。

    • 运行单元测试(检查优惠券逻辑是否正确)。

    • 运行代码扫描(检查是否有安全漏洞)。

    • 结果: 测试通过。

  3. CD(持续部署/交付):

    • 打包: 将代码打包成 Docker 镜像。

    • 推送: 将镜像推送到镜像仓库。

    • 部署到测试环境: 自动部署到测试服务器,供测试人员验证。

    • (如果是持续交付,此时暂停,等待点击“发布”按钮)

    • 部署到生产环境: 自动滚动更新生产环境的服务器,新功能上线。


四、CI/CD 的核心价值

  1. 加快上市速度: 从代码写完到用户能使用的时间,从几周甚至几个月缩短到几分钟或几小时。

  2. 降低风险: 每次部署的变更量小(因为频繁部署),如果出了问题,很容易定位和回滚。

  3. 解放人力: 开发人员和运维人员不再需要熬夜做复杂的上线部署手册,枯燥的重复劳动被自动化取代。

  4. 提升软件质量: 流水线强制要求代码必须经过自动化测试和合规检查才能上线。

总结

  • CI 解决的是“代码合在一起能不能跑通”的问题(自动化构建+测试)。

  • CD 解决的是“跑通之后怎么让用户用上”的问题(自动化部署)。

在现代软件开发中,CI/CD 已经不仅仅是工具链,更是一种文化——鼓励频繁迭代、自动化优先、快速反馈。