帮助中心
持续交付与精益开发

百度百科 持续交付(英语:Continuous delivery,缩写为 CD),是一种软件工程手法,让软件产品的产出过程在一个短周期内完成,以保证软件可以稳定、持续的保持在随时可以发布的状况。它的目标在于让软件的构建、测试与发布变得更快以及更频繁。这种方式可以减少软件开发的成本与时间,减少风险。

如引用所说,持续交付的难点在于使软件稳定、持续的保持在随时可以发布的状态,而传统的CICD并不能满足这一点。当今最优秀的企业都采用Feature Flags技术与CICD配合实现真正的持续交付,并顺其自然地继承精益开发的特质。本文将简单的以如下三个小篇章来介绍如何使用Feature Flags技术"一行代码实现持续交付与精益开发" :

  • 精益的持续交付 vs 传统敏捷开发
  • 持续交付 vs 持续部署(传统CI/CD)
  • 一行代码实现持续交付与精益开发

精益的持续交付 vs 传统敏捷开发交付

下图可以非常清晰的看到使用Feature Flags实现的持续交付+精益开发,相较传统敏捷开发有如下几点优势:

  1. 迭代周期变短,频率变高。迭代即交付,均伴随市场反馈
  2. 交付的最小单元为功能模块,而非软件版本
  3. 试错成本大幅降低,试错机会成倍增加
  4. 每一个交付都可以做灰度测试,秒级回退
  5. 大幅降低代码合并风险,增加代码合并速度

持续交付 vs 持续部署

CI/CD中的CD的英文是Continuous delivery(中文即"持续交付")。但只基于DevOps自动化流水线的CD只能做到"持续部署"(Continuous Deploy)。而持续部署与持续交付的区别在于:

  1. 持续部署只负责将新的功能推送到线上环境(生产环境、预发布环境或者测试等环境)
  2. 持续交付则负责把推送到线上的功能交付给相应的用户。不同的阶段可能是不同的用户:
    • 开发阶段交付给协同开发者、技术leader
    • 测试阶段交付给QA、产品经理、运营团队
    • 反馈阶段交付给Product Owner
    • 发布阶段交付给早期用户、指定的客户群体
  3. 持续交付可在任何状态交付功能,即使是没有完成的功能模块。以保障
    1. 使长期挂起或处在开发状态的功能模块与主分支代码保持同步
    2. 使软件整体构建、测试与发布变更快以及更频繁
    3. 可以提前展示给相关群体(包括客户),尽可能早调整错误的决策和功能设计。

众多的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. 将新特性部署到线上(如生产环境),但不立刻发布
  2. 发布给自己人,在生产环境上测试
  3. 逐步交付出去,不同的场景可以使用不同的策略
    1. 灰度发布,先发布1%,然后10%,然后50%直到100%,针对出现BUG的用户秒级回滚
    2. 做AA、AB测试,针对性发布至特定人群,根据市场与数据反馈决定迭代方案
    3. 蓝绿发布,当版本有大调整(尤其是数据库变化时),逐步进行系统与数据迁移
    4. 等等

通常,这个 flags.newFeature 可以由多种方式实现:

  1. 通过配置文件控制一个功能是否执行
  2. 通过连接数据库,远程控制一个功能是否执行
  3. 自研一套系统,在不同的运行环境下,控制一个功能对不同的用户是否执行
  4. 使用一个saas服务,实现基于feature flags的持续交付(包含第3点的功能)

为什么使用敏捷开关而不是自研

一些选择自研的团队,是因为一个if else系统看上去并不复杂。但实际一个真正可以加速软件开发与迭代的持续交付系统,需要考虑如下问题:

  1. 高性能,毫秒级发布、回退,微秒级"if"判断速度, 99.97% SLA
  2. 高稳定性,弱网(无网)环境,多线程安全,服务器灾备,异常处理
  3. 团队协同,跨团队审核协同,功能任务管理协同,日志记录问责,权限控制
  4. 代码清理,长期积累Feature Flags的代码技术债,快速安全清除Flags
  5. 拥抱生态,支持三方工具的整合,支持多语言架构,数据开放
  6. 等等

作为最好可能也是唯一支持持续交付的技术 feature flags,随着各个SaaS厂商多年的耕耘,已经转化成一个全新的Feature Management平台。很多自研 feature flags 技术的团队,受到团队协同的巨大痛点,也慢慢转向使用三方工具。

敏捷开关是国内最好的 feature flags 技术与管理平台

一行代码实现持续交付与精益管理,最大作用解耦了功能模块与正版发布,从而有机会让迭代真正的敏捷起来。想真正的用好持续交付带来的无限好处,还需要更多的配套功能,尤其是少不了一个好的平台的助力。而敏捷开关(https://featureflag.co),正这样一个好的Feature Management平台,助力企业实现一个可以加速产品迭代的持续交付平台。


最后更新于 2022/06/20
未能解决您的问题?请联系
评价此篇文档
有帮助
没帮助

请留下具体问题或建议

能够解决我的问题
我还有其他想说的
本篇目录