DevOps从持续开发到持续部署 - 编程一生

DevOps从持续开发到持续部署 - 编程一生

💡 原文中文,约3100字,阅读约需8分钟。
📝

内容提要

DevOps整合开发、测试与运维,强调人员一体化,并通过CI/CD工具落地。CI/CD包括持续开发、持续集成、持续交付和持续部署:持续开发注重单元测试与代码质量;持续集成频繁合并主干并自动化验证;持续交付将代码发布到类生产环境并测试;持续部署实现生产环境自动化发布,常用灰度与蓝绿部署。

🔎

延伸解读

持续开发:质量内建与提交纪律

文章强调持续开发阶段需通过单元测试和静态代码检查(如Sonar)实现质量内建,并引用戴明观点说明质量源于生产而非检测。对提交者的要求包括:CICD失败时禁止提交新代码,失败不能过夜,需快速修复或回滚。这些规范旨在尽早发现问题,降低修复成本,体现了测试驱动开发的意义。

持续集成:主干开发的高要求

持续集成针对合并到主干后的代码,与持续开发(本地到仓库)对象不同。谷歌提倡主干开发,优势是分支模型简单、避免合并冲突、随时可发布。但这对持续集成工具要求很高:基础架构需高效把关,自动化测试需完备,否则主干代码质量问题会阻塞整个团队。特性分支开发一般不超过3个。

持续交付:类生产环境验证

持续交付将集成后的代码发布到类生产环境(staging),并集成冒烟测试和自动化回归测试。冒烟测试确认版本无致命bug,回归测试覆盖生产场景或通过流量回放验证。由于包含新特性,QA测试也建议在此阶段进行。若环境足够相似,还可自动化进行全链路压力测试和疲劳测试。

持续部署:自动化与人工权衡

持续部署旨在自动化生产环境发布,但文章指出实际中多数部署仍为手动,灰度发布工具也需人工确认每一步。蓝绿部署通过两套系统(绿为旧版、蓝为新版)降低风险:蓝色系统先测试,达标后切换用户流量,观察期间可快速回滚。确认稳定后,蓝色系统成为新绿色系统,原系统资源释放。

Q&A

DevOps和CICD之间是什么关系?

DevOps是一种方法论,旨在促进开发、测试和运维部门之间的沟通、协作与整合,本质是人员一体化。CICD是一组自动化工具集,用于实现DevOps的自动化实践,因此DevOps与CICD紧密相连。

持续开发和持续集成有什么区别?

持续开发针对从本地提交到仓库的代码,注重单元测试和静态代码质量检查;持续集成针对合并到主干之后的代码,进行构建、测试和质量检查。两者针对的对象不同。

什么是持续交付?它通常包含哪些测试?

持续交付是在持续集成基础上将集成后的代码发布到类生产环境(staging)中。很多公司在此阶段集成冒烟测试和自动化回归测试,冒烟测试确认新版本无致命bug,自动化回归测试覆盖生产环境所有场景。

蓝绿部署是如何工作的?

蓝绿部署有两套系统:绿色系统正在对外提供服务,蓝色系统准备发布。蓝色系统先不对外,用于测试和修改,达到上线标准后,将用户切换到蓝色系统。观察一段时间,若出现问题则切回绿色系统;若正常,蓝色系统成为新的绿色系统,原绿色系统可销毁。

在持续开发阶段,对提交代码的人有哪些要求?

要求包括:CICD状态失败时禁止提交新代码;CICD失败不能过夜,要么快速修复,要么回滚。

为什么需要单元测试?

因为产品质量不是检测出来的,问题发现得越早,修复成本越低。单元测试是测试驱动开发的重要组成部分,能在生产阶段自我进行质量保障。

🏷️

标签

➡️

继续阅读