CI/CD 概念与部署策略
CI/CD 概念与部署策略
整理一下 CI/CD 三个"持续"分别指什么、能带来什么变化,以及上线时常用的两种零停机部署策略。
三个"持续"
持续集成(Continuous Integration, CI)是一种软件开发实践。团队频繁集成各自的工作成果,一般每人每天至少集成一次,也可以多次。每次集成都经过自动构建(包括静态扫描、安全扫描、自动测试等)的检验,尽快发现集成错误。这种方法能显著减少集成引起的问题,加快团队协作开发的速度。
持续交付(Continuous Delivery)指频繁地把软件新版本交给质量团队或用户评审,评审通过后代码就进入生产阶段。
持续部署(Continuous Deployment)是持续交付的下一步,代码通过评审后自动部署到生产环境。
这三者突出的就是一个"快"字。商业软件快速落地的需求推动了软件工程的发展,可持续、快速迭代已经是主流的开发方式。互联网行业尤其看重快速响应:从想法到产品落地要快,响应用户反馈也要快,早上收到的反馈当天就能上线。"快"本身就是一种商业竞争力,这也是推动 CI/CD 的动力。
团队协作里,工作交接(系统集成)这部分最容易出问题,会消耗大量沟通和时间成本,直接拖慢进度。当前敏捷开发是主流,CI/CD 正好能帮助高效实施敏捷过程,促进开发、运维和质量保证部门之间的沟通协作。
CI/CD 带来的变化
软件开发过程通常分编码、构建、集成、测试、交付、部署几个阶段,CI/CD 刚好覆盖这些阶段。对每个阶段做优化都能缩短软件交付时间。
把持续集成的过程固化成自动化流程后:
- 管理流程固化,集成有序、可靠
- 减少版本发布的不合规(手动打包可能一天打多个包、更新多次、测试不充分),版本可控、问题可追溯,出问题能回溯到具体版本
- 自动化抛弃人工,降低出错率、提高速度,自然节省成本
(本节内容摘自《持续集成与持续部署实践》)
零停机部署
上线新版本时,怎么尽量不让用户感知到停机。两种常用策略。
蓝绿部署
存在蓝、绿两套环境,升级过程由负载均衡器控制。流程:
- 初始发布:所有用户流量都打到绿环境的 version 1.0。
- 新版本发布:version 2.0 部署上去,但流量仍在 1.0。这期间开发人员可以在 2.0 上做功能测试和验证。
- 流量切换:验证完成后,操作负载均衡器把流量切到 2.0,所有用户开始访问新版本。旧版本不立即删除,等新版本稳定运行后再计划删除。
- 终态:切换完成,所有用户访问 version 2.0。
好处是出问题能快速切回旧版本。
金丝雀部署
思路和蓝绿类似,但实现略有不同。金丝雀部署先只更新一小部分服务器或节点,观察没问题后再逐步完成其余节点的更新,把风险控制在小范围内。