百度百科 “ 持续交付(英语:Continuous delivery,缩写为 CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况。它的目标在于让软件的构建、测试与发布变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。 ”
如引用所说,持续交付的难点在于使软件稳定、持续的保持在随时可以发布的状态,而传统的CICD并不能满足这一点。当今最优秀的企业都采用Feature Flags技术与CICD配合实现真正的持续交付,并顺其自然地继承精益开发的特质。本文将简单的以如下三个小篇章来介绍如何使用Feature Flags技术"一行代码实现持续交付与精益开发" :
- 精益的持续交付 vs 传统敏捷开发
- 持续交付 vs 持续部署(传统CI/CD)
- 一行代码实现持续交付与精益开发
精益的持续交付 vs 传统敏捷开发交付
下图可以非常清晰的看到使用Feature Flags实现的持续交付+精益开发,相较传统敏捷开发有如下几点优势:
- 迭代周期变短,频率变高。迭代即交付,均伴随市场反馈
- 交付的最小单元为功能模块,而非软件版本
- 试错成本大幅降低,试错机会成倍增加
- 每一个交付都可以做灰度测试,秒级回退
- 大幅降低代码合并风险,增加代码合并速度
持续交付 vs 持续部署
CI/CD中的CD的英文是Continuous delivery(中文即"持续交付")。但只基于DevOps自动化流水线的CD只能做到"持续部署"(Continuous Deploy)。而持续部署与持续交付的区别在于:
- 持续部署只负责将新的功能推送到线上环境(生产环境、预发布环境或者测试等环境)
- 持续交付则负责把推送到线上的功能交付给相应的用户。不同的阶段可能是不同的用户:
- 开发阶段交付给协同开发者、技术leader
- 测试阶段交付给QA、产品经理、运营团队
- 反馈阶段交付给Product Owner
- 发布阶段交付给早期用户、指定的客户群体
- 持续交付可在任何状态交付功能,即使是没有完成的功能模块。以保障
- 使长期挂起或处在开发状态的功能模块与主分支代码保持同步
- 使软件整体构建、测试与发布变的更快以及更频繁
- 可以提前展示给相关群体(包括客户),尽可能早调整错误的决策和功能设计。
众多的DevOps工具可以允许大家做到持续部署(CI+CDeploy),如Coding.net, Gitlab, Github action, Azure DevOps, 阿里云效等等。但只有集成了feature flags系统,才可以真正的做到持续交付,除了国际上的持续交付独角兽是Launchdarkly.com,也可以使用国内最好的持续交付产品“敏捷开关(feature-flags.co)”
# 一行代码实现持续交付与精益开发
上面已经简单讲明什么是持续交付以及作用。下面我们用最简单的方法来讲述如何使用一行代码实现持续交付。很简单,我们只需要用feature flags包裹功能模块即可:
if(flags.newFeature == "开启")
executeNewFeature();
当使用flags.newFeature包裹住功能newFeature时,如newFeature的值等于一个自定义好的值(如"开启"),则执行newFeature,否则则不执行。此时,团队的任何成员(开发者、运维、QA、产品经理、运营等)可通过使用一个UI操作界面,控制newFeature的持续发布过程,这个过程包括:
- 将新特性部署到线上(如生产环境),但不立刻发布
- 发布给自己人,在生产环境上测试
- 逐步地交付出去,不同的场景可以使用不同的策略
- 灰度发布,先发布1%,然后10%,然后50%直到100%,针对出现BUG的用户秒级回滚
- 做AA、AB测试,针对性地发布至特定人群,根据市场与数据反馈决定迭代方案
- 蓝绿发布,当版本有大调整(尤其是数据库变化时),逐步地进行系统与数据迁移
- 等等
通常,这个 flags.newFeature 可以由多种方式实现:
- 通过配置文件控制一个功能是否执行
- 通过连接数据库,远程控制一个功能是否执行
- 自研一套系统,在不同的运行环境下,控制一个功能对不同的用户是否执行
- 使用一个saas服务,实现基于feature flags的持续交付(包含第3点的功能)
为什么使用敏捷开关而不是自研
一些选择自研的团队,是因为一个if else系统看上去并不复杂。但实际一个真正可以加速软件开发与迭代的持续交付系统,需要考虑如下问题:
- 高性能,毫秒级发布、回退,微秒级"if"判断速度, 99.97% SLA
- 高稳定性,弱网(无网)络环境,多线程安全,服务器灾备,异常处理
- 团队协同,跨团队审核协同,功能任务管理协同,日志记录问责,权限控制
- 代码清理,长期积累Feature Flags的代码技术债,快速安全清除Flags
- 拥抱生态,支持三方工具的整合,支持多语言架构,数据开放
- 等等
作为最好可能也是唯一支持持续交付的技术 feature flags,随着各个SaaS厂商多年的耕耘,已经转化成一个全新的Feature Management平台。很多自研 feature flags 技术的团队,受到团队协同的巨大痛点,也慢慢转向使用三方工具。
敏捷开关是国内最好的 feature flags 技术与管理平台
一行代码实现持续交付与精益管理,最大作用解耦了功能模块与正版发布,从而有机会让迭代真正的敏捷起来。想真正的用好持续交付带来的无限好处,还需要更多的配套功能,尤其是少不了一个好的平台的助力。而敏捷开关(https://featureflag.co),正是这样一个好的Feature Management平台,助力企业实现一个可以加速产品迭代的持续交付平台。