CI/CD 流水线入门
一、持续集成:频繁合并、自动构建与测试
持续集成(Continuous Integration, CI)的核心是:频繁把代码合并到主分支(或集成分支),每次合并触发自动构建与测试。这样集成问题在几十分钟内暴露,而不是攒到发布前才发现。典型 CI 流程:提交或 PR 合并 → 触发流水线 → 拉取代码 → 安装依赖 → 编译/打包 → 跑单元测试与 Lint → 产出制品(可选)→ 报告通过/失败。若任一步失败,流水线红,合并被拦或需修复后重跑。CI 是 CD 的基础:只有「每次提交都能通过一套自动化检查」,才有底气做自动或一键发布。
二、持续交付 / 持续部署:自动化发布到生产
持续交付(Continuous Delivery)指:CI 通过后,制品处于「可随时发布」状态,发布到生产是人工触发或审批后触发。持续部署(Continuous Deployment)更进一步:CI 通过后自动部署到生产,无需人工点发布。两者都依赖 CI 产出的可信制品与自动化部署脚本;区别在于「谁点最后一下」。实践中可根据业务与合规要求选择:强合规或强稳定性要求可先做持续交付(一键发布);成熟后可做持续部署。无论哪种,部署步骤都应脚本化、可重复、可回滚。
三、流水线设计:阶段、门禁、回滚
流水线由多个阶段组成:如「构建 → 单测 → 集成测 → 部署到测试环境 → 部署到生产」。每个阶段可设门禁(Gate):上一阶段成功才进入下一阶段;门禁不通过则流水线停住,不继续部署。这样有问题的制品不会流到生产。常见门禁:构建成功、测试通过、安全扫描无高危、人工审批(可选)。回滚策略要事先设计:发现生产问题后能快速回退到上一版本(重新部署上一版制品、或通过发布策略切回),并配合监控与告警,避免「只能往前修、不能往回退」。
门禁与回滚要点
- 门禁:构建成功、测试通过、安全/质量扫描、人工审批(按需);不通过则停止,不部署到下一环境。
- 回滚:预案要事先有(上一版制品、回滚脚本或发布策略);配合监控,问题发现后能快速回退。
四、常见工具与选型
CI/CD 工具负责「触发、执行、报告」:与代码仓库集成(如 Git push 触发)、在 Runner 上执行脚本、展示流水线状态与日志。选型时可看:与现有仓库与部署栈的集成、是否支持并行与缓存、是否支持流水线即代码(Pipeline as Code)、托管 vs 自建、团队熟悉度。常见组合:GitHub Actions、GitLab CI、Jenkins、Azure DevOps、CircleCI、Travis CI 等做 CI;部署端可用同一工具或配合 Ansible、Terraform、K8s 等。先跑通一条「提交 → 构建 → 测试」的 CI,再逐步加部署阶段与门禁。
一句话: CI在每次提交/合并时自动构建与测试,尽早发现集成问题。持续交付是制品可随时发布、发布由人工触发;持续部署是 CI 通过后自动发布到生产。流水线分阶段、设门禁(构建/测试/审批),不通过不往下走;回滚预案要事先有。工具选型看仓库集成、Pipeline as Code、托管 vs 自建;先跑通 CI 再加 CD。
五、小结
CI:频繁合并、自动构建与测试,失败则拦合或修复。持续交付:制品可发布、人工触发;持续部署:自动发布到生产。流水线:阶段 + 门禁(构建、测试、审批),回滚预案事先设计。工具:GitHub Actions、GitLab CI、Jenkins 等,按集成与团队选型。下一章讲环境管理、配置与密钥,把多环境隔离与敏感信息管理说细。