写点什么

提升软件交付效能——初探“按需发布”

  • 2021-04-07
  • 本文字数:2828 字

    阅读完需:约 9 分钟

提升软件交付效能——初探“按需发布”

在精益思想的指导下,团队寻找开发流程中的阻碍点,并从各个层面做出调整策略。在业务侧,分析哪些需求可以做到按需发布,哪些需求无法做到,设定适合团队的按需发布标准,并调整迭代工作量。在开发侧,考虑数据的兼容性,部署方式,以及高频率部署所带来的环境准备问题。在测试侧,提高自动化测试的运行速度和主流程的覆盖范围,并利用平台自身的自动化测试覆盖率统计功能,查缺补漏。


按需发布可以有效缩短变更前置时间,提高部署频率,进而产生强有力的业务影响,同时也是《The 2019 Accelerate State of DevOps : Elite performance , productivity , and scaling》中推荐的提高软件交付效能的实践之一。精英效能组织已将按需发布作为一项基础能力,例如: CapitalOne 每天部署 50 次,或者例如 Amazon、Google 以及 Netflix 每天部署几千次。尽早的将业务推向市场,不仅可以抢占先机,也可以充分发挥调研的价值。


本文中的 DevOps 持续交付流水线平台项目,已经经过 3 年多的持续演进,功能逐步完善,当前平台为 1000 多个团队提供状态可视化和即时反馈。团队希望借助按需发布,尽早推出新功能,更快的为客户带来价值。


在之前 3 年多的演进过程中,平台以 2 周为一个迭代进行交付。在一个迭代中,大部分同学进行本迭代的功能开发,小部分同学梳理新需求,为下个迭代做准备。平台以蓝绿部署策略进行上线,在上线前准备预生产环境,为 QA 同学提供与生产环境相似的环境进行测试。在上线中,进行环境的切换,每次切换需要 10-30 分钟的维护时间。这段时间内,团队需要进行数据迁移、消息迁移、切换流量等动作。这样的交付节奏持续了两年的时间,有效的保证了平台的代码质量和迭代的平稳推进。

流水线平台蓝绿部署示意图

动力来源

  1. 随着平台功能的逐步趋于稳定、用户数量逐渐增加,项目的关注点也有所转移,团队希望缩短从需求确认到上线的时间,做到按需发布;

  2. 恰巧公司内部也在进行研发效能的治理;

  3. 团队也希望借此机会,提高平台自身的软件交付效能,随后将研发效能的度量集成在本平台,对外提供服务;

实践探索

借助精益思想,我们团队开始寻找从需求确认到上线过程中所有阻碍用户的环节。希望从各个层面上消除浪费,来提升整体的价值流动效率,助力需求的顺畅交付。


首先,我们使用“影响地图”对按需发布这个目标进行分析,发现问题,并找出对应的解决方案。然后,根据这个分析结果,制定了团队的 OKR(Objectives and Key Results)。



影响地图



团队 OKR

为了实现按需发布,团队分别从业务侧,开发侧和测试侧做了如下调整。


业务侧,BA 针对需求分析,做了如下调整:

1、识别可以独立交付的功能

  • 除日常两周一次上线外,分析需要按需交付的功能,和团队同学(TL/QA)一起确认这些功能是否能做到独立交付;


2、迭代计划中考虑按需发布的工作量

  • 将能独立交付的部分功能,拆分为单独的故事卡,打上标签,并放入迭代计划中一起考虑(主要考虑额外产生的工作量)。理想情况可以分别制定按需交付和按迭代交付两种计划,但由于目前能做到按需交付的功能有限,还不够成熟,暂时未分开;


技术侧,团队针对现有的开发和部署策略,做了如下调整:

  • Feature Branch 开发:对于需要按需发布的代码,单独一个 feature 分支进行开发,在上线前合并到 release 分支,在预生产环境进行测试。上线成功后,合并回 master 分支。后续 DevOps 流水线平台也会支持一条流水线多分支自动构建,自动 merge 分支等功能,保证 feature 分支的持续集成和持续交付。

  • 数据库兼容性:团队采用向后兼容的方式。对于新增表和字段等操作,可以直接增加。而对于修改,重命名等操作,团队内部也讨论一套数据库变更规则。规则如下表所示


数据库向后兼容方案

  • 预生产环境自动化准备:自动化部署脚本,一键准备预生产环境,准备时间从原来需要 2 位同学花费 1 天,缩短到 1 位同学 2 个小时。

  • 部署策略:团队利用 OpenShift 滚动部署功能,进行应用的部署。修改原有生产环境流水线,构建镜像。完善平台的部署脚本,实现一键部署到生产环境。

  • 流量异常处理:采用 OpenShift 的滚动部署方式,当部分旧实例关闭后,仍然在线的旧实例,将会需要承载更多的流量。设置合适 maxUnavailable 和 maxSurge 参数可以逐步的关停旧实例,以保证在线实例数量,避免部分应用瞬时流量过大。

  • 服务优雅停:团队采用了优雅停的方式,避免旧实例直接停止,所带来的数据不一致的问题。

  • 回滚策略:对于回滚,团队采用了与部署相似的方式,以滚动发布的方式一键回滚。


测试侧,测试同学对于需要按需发布的功能,有了以下实践

1、需求 review

  • 在需求进入开发前,对其进行 review 和补充。着重考量需求的独立性,以及其影响范围,以此判定回归测试的范围。如果需求独立且影响范围可控,那么进一步思考测试工作的难易程度,是否容易获取稳定的测试数据,功能是否有涉及第三方依赖等。


2、功能快速验证

  • 需求进入开发后,同步开发自动化测试,以便在结卡时,以部分自动化测试进行验收。测试过程中,除了进行常规测试和探索性测试,还需要上线前完成相关功能的自动化测试,用于回归。


3、依托自动化方式的回归测试

平台功能不断增加,团队就更加依赖于反馈迅速和覆盖全面的自动化测试,以快速验证按需发布的功能,并且验证原有功能不受影响。

  • 反馈迅速:在自动化测试用例相互独立的前提下,利用自动化测试框架特性和流水线的并行功能,并行运行测试用例,加快自动化测试的速度,迅速获取反馈。

  • 覆盖全面:在快速反馈的前提下,尽可能的提高自动化测试覆盖率。依托平台自动化测试覆盖率统计功能,根据覆盖率补充、完善自动化测试。随着业务的扩展和测试用例的增加,后续可考虑部分精准测试以提高反馈速度。


当前,流水线项目只对部分可独立交付的业务需求,做到了按需发布。平台从一个迭代发布一次,演变为一个迭代发布 N 次。其中 N-1 次是按需发布,剩余的 1 次为按迭代交付。对于涉及开发人数较多的,模块较大的需求,团队仍以迭代进行交付。逐步扩大按需交付的范围,也是团队今后努力的方向。

经验总结

在精益思想的指导下,团队寻找开发流程中的阻碍点,并从各个层面做出调整策略。在业务侧,分析哪些需求可以做到按需发布,哪些需求无法做到,设定适合团队的按需发布标准,并调整迭代工作量。在开发侧,考虑数据的兼容性,部署方式,以及高频率部署所带来的环境准备问题。在测试侧,提高自动化测试的运行速度和主流程的覆盖范围,并利用平台自身的自动化测试覆盖率统计功能,查缺补漏。

对于初创团队,可以将按需发布作为目标,但建议还是以正常迭代节奏进行交付,待团队成熟后再进行按需发布。


为此,可以在以下几点做准备:

  • 发布流程自动化:使用 Jenkins 或者其他 CI/CD 平台搭建流水线,做到持续集成和持续交付。

  • 保证无状态服务:避免实例在本地存储持久化的数据。

  • 准备不停机部署策略:调研所使用发布平台的发布策略,是否支持不停机发布和回滚。

  • 测试快速验证反馈:建立回归测试,项目初期搭建自动化的回归测试,优先覆盖主流程,逐渐增加测试覆盖率。


本文转载自:ThoughtWorks 洞见(ID:TW-Insights)

原文链接:提升软件交付效能——初探“按需发布”

2021-04-07 13:002143

评论

发布
暂无评论
发现更多内容

低代码开发是传统开发的替代,还是补充?

秃头小帅oi

数字先锋 | 车企,出海!天翼云AOne擦亮车企“智慧服务”新名片!

天翼云开发者社区

云计算 公有云 边缘安全 安全防护

ixBrowser指纹浏览器配置教程

kookeey代理严选

代理IP 跨境电商 亚马逊运营 Tiktok shop 指纹浏览器

疯狂SQL转换系列- SQL for Milvs2.4

数由科技

sql 数据科学 huggingfists graphRAG Milvus 2.5

AI口语练习APP的技术难点

北京木奇移动技术有限公司

软件外包公司 AI口语练习 AI英语练习

Omnissa Horizon Windows OS Optimization Tool 2412 - Windows 系统映像优化工具

sysin

Gitea Enterprise 23.0.0 (Linux, macOS, Windows) - 本地部署的企业级 Git 服务

sysin

git Gitea

企业在财务规划过程中,如何避免零基预算的常见陷阱

智达方通

全面预算管理 财务规划和分析 财务规划

火语言RPA--图鉴打码

火语言RPA

面向 Workload 级别的灵活可配置 Serverless 弹性解决方案

阿里巴巴云原生

阿里云 Serverless 云原生

利用ima.copilot,打造你的AI知识库

老张

人工智能 知识库 DeepSeek ima.copilot

Aiseesoft AnyCoord for Mac(GPS虚拟定位软件) v1.0.36激活版

Rose

唤醒 AI 算力,专有云 ABC Stack 面向企业级智算平台的 GPU 提效实践

百度Geek说

培训中心教务系统(源码+文档+部署+讲解)

深圳亥时科技

a16z 最新语音 AI 报告:语音将成为关键切入点,但非最终产品本身(含最新图谱)

声网

2025大厂年终奖揭秘:有人拿50个月工资,有人直接撒钱?

王中阳Go

程序员

"扒光"淘宝商品详情价格主图详情图数据的秘密武器!不用爬虫,API让你躺着赚信息差

代码忍者

淘宝API接口

“全球金牌敏捷课程” · 2 月 22-23 日 CSM 认证课程 · Jim 老师

ShineScrum

Scrum 敏捷 Scrum Master 敏捷教练认证 敏捷认证

VMware Tanzu Kubernetes Grid Integrated Edition (TKGI) 1.21 - 运营商 Kubernetes 解决方案

sysin

Kubernetes Tanzu

我们究竟畏惧AI什么?

这不科技

AI

1688APP 原数据 API 接口的开发、应用与收益

科普小能手

数据挖掘 阿里巴巴 1688 电信运营商 API 接口

数字先锋 | 竞技科研蓝海,中南大学先“算”一步!

天翼云开发者社区

云计算 智算平台 算力建设

2025多端社交圈子论坛兴趣社区圈子论坛小程序 圈子社区论坛系统源码

DUOKE七七

php MySQL uniapp

Nexpose 7.5.0 for Linux & Windows - 漏洞扫描

sysin

Nexpose

Firefox 135, Chrome 135, Chromium 135 官网离线下载 (macOS, Linux, Windows)

sysin

firefox

AI招聘助手的主要功能

北京木奇移动技术有限公司

AI技术 AI招聘 软件外包公司

提升软件交付效能——初探“按需发布”_架构_张凯峰_InfoQ精选文章