嘉宾 | 粟俊娥 整理 | 孙正印
出品 | CSDN云原生
2022年5月17日,在CSDN云原生系列在线峰会第5期“DevOps峰会”上,OPPO研发云产品负责人粟俊娥分享了OPPO研发云持续交付实践之路。
在OPPO,研发流程的大概路线是:需求澄清-需求排期-需求开发-产品测试&验收-灰度发布-正式发布。
在这个流程中,每一个阶段都需要完成一些基本的事项,比如需求澄清时完成产品方案的设计,开发过程研发的自测、代码质量检查,测试阶段的功能测试、兼容性测试等。
由于整个研发流程链路长,涉及到的相关人员众多,加上工具平台自身的能力建设不足,整个产品最终交付质量并不理想。
一般来说,研发流程主要存在这些问题:
云产品能力缺少微服务框架联动,缺少运维监控关联,且平台产品之间联动弱。使用云产品相关能力需要非常专业的技术人员搭建框架,对团队人员进行培训,起步门槛太高。
安全测试覆盖度不足,安全能力脱离研发流程,业务方自动化接入率低,加上业务方对安全隐私的观念不强,因此上线的版本存在诸多安全隐私的风险。
项目研发流程不够连贯,CI/CD工具分散,通常完成一次版本上线需要经过好几个系统和平台,开发人员经常在多个平台之间来回切换,极度影响效率。
测试系统本身的建设不足,缺少标准化的规范。目前业务方单侧覆盖率低,自动化覆盖率低,很多测试能力都依赖人工,测试的质量报告也完全依赖人工统计。
发布流程冗长,需要填写的字段规范非常多,只有很了解这个平台的人才能够知道发布的细节,新手使用难度大,发布门槛高。
这些问题在研发过程的每一个阶段都会对产品的交付时间与交付质量造成影响,导致最后版本上线的周期长,质量令人担忧,甚至线上遇到问题时,回溯也变得极为困难。
DevOps平台希望达成的目标是什么?
从业务的规划到需求分析,再到产品设计及研发交付,以及最后的发布上线,都是闭环的状态。产品设计到产品交付的阶段,能达到效能的及时反馈。通过持续集成来验证发布,通过持续发布来提升整个产品的交付周期。发布上线之后,根据一些质量的反馈结果,去衡量现在发布的产品的质量情况。总之,希望通过DevOps平台建设为业务整个研发流程带来它的价值。
基于上述分析的研发流程中的一些痛点问题,以及基于痛点希望达成的目标,OPPO DevOps平台——研发云平台诞生。
广义来说,DevOps是敏捷软件开发的产物,是实现端到端的交付,是开发运维一体化的组合词;狭义来说,DevOps是一种方式方法,它能实现研发效能的提升,提高交付的产品质量。
OPPO研发云是一套完整的DevOps实践平台,根本目标是让业务更快、更高质量地交付,灵活地应对变化,让需求的每个活动都可以可视化、可追踪、可卡点、可度量,最终真正实现顺畅的高质量交互。它主要包含几个产品板块:项目管理、制品管理、代码管理、应用流水线、文档管理、测试管理以及发布管理。
业界的Devops平台基本都是按照这样的模块去划分,但其实根据不同的公司,它在各个模块上的产品建设能力,侧重点还是会不太一样。
OPPO研发云整个的产品架构,是基于之前功能模块做架构的规划,如下图所示:
需求管理:以版本计划或迭代计划进行项目管理。研发团队可以通过自定义需求属性和需求工作流配置项目内需求、任务和缺陷的属性和工作流,满足不同团队的定制化属性和工作流需求。
代码审核:重点强调代码评审与代码扫描能力。代码评审是研发流程中的必要环节,代码评审有助于提早发现Bu,促进跨代码库和整个团队的规范,进行知识共享。而代码扫描能力可以通过分析代码仓库中的源代码,及时发现其中潜藏的代码缺陷、安全漏洞以及不规范代码。
CI/CD:持续集成与持续交付主要包含了流水线、制品管理和发布管理,是整个研发效能流程的最关键的部分。通过流水线打通研发流程各个平台的能力,完成一站式端到端的DevOps开发。
度量:通过度量指标的采集、分析和监控,反向推动软件研发过程的改进,帮助提升研发的效能质量,提升人员能力,最终提升业务端的客户满意度,帮助业务去扩展服务范围、提升影响力。
OPPO研发云不仅仅期望做到研发流程DevOps化,而且实现在此基础上的DevSecOps化。因此OPPO研发云在整个研发交付流程中集成了安全能力,使得交付上线的产品不仅是高效的,而且是有质量保证的、符合安全的产品。
OPPO产品架构中展示了很多相关产品能力,这些产品能力将体现在研发流程工具中。OPPO研发云平台基本流程工具链体现如下:
需求阶段,我们将使用项目管理进行需求记录,一个版本的产品需求规划、需求的评审以及拆分协作等。当进入研发阶段后,研发可以直接在需求管理中联动创建对应的开发分支。需求的开发过程会频繁地进行代码提交、代码检测扫描、代码评审等,这些都是可以在代码管理平台完成,同时我们也提供了完善的IDEA插件,能让开发在一个平台完成所有这些日常工作项,提升研发效率。
持续集成流水线是整个DevOps持续交付的载体。研发测试阶段,可以根据业务的研发模式,在流水线中加入不同的任务验证版本的质量,如代码扫描、单元测试、自动化测试等。OPPO研发云一站式DevOps工具链,让流水线配置使用简单、高效。
测试通过到发布上线阶段,制品库作为唯一可信数据源发挥着重要的作用,持续测试将测试的质量属性上报到制品库,当达到预设的发布标准时,制品库中的版本将自动扭转成可发布状态,保证测试到发布的可信、可靠。
整个流程设计的工具链,除了持续管理、持续集成、持续测试、持续交付,还包括持续度量。度量主要是通过一系列指标采集和数据分析,发现研发过程中每个阶段存在的问题,帮助提升研发效能和产品质量。
OPPO研发云度量指标的建设,是以价值交付为核心流程的度量建设。通过度量看板,分析整个研发价值流,让研发效能最终为组织效能服务,形成正向拉动和反馈。
OPPO研发云的产品价值是建立覆盖“需求-研发-测试-发布-监控”的端到端一体化研发流程,实现持续交付。一个项目开始,从分析需求到需求规划,从规划版本再到研发测试,最后到发布上线以及监控反馈,形成研发交付质量与效能闭环。
持续集成与持续交付是DevOps的核心,研发模式决定了我们的持续集成和持续交付方案的实施不同。在OPPO内部,主要使用的几种业界开发模式:主干开发(TBD)、GitHub-Flow、分支集成(AoneFlow)。
主干开发
主干开发模式是指所有开发人员仅在一个主干分支(master)上进行协作开发,一般不允许新建其他长期存在的开发分支,所有的代码提交均需要在主干分支上完成。通常这种开发模式下,开发者需要有较高频率的代码推送行为,一般一天至少提交一次,当主干分支达到发布条件后,就从主干分支上拉出发布分支(release)进行版本发布。
GitHub-Flow
GitHub-Flow相对主干开发模式,它不直接在主干上开发,而是拉出特性分支(feature)先进行研发完成后,再合入主干。这样研发和测试可以先在特性分支上进行单个需求的验证,最终将一次版本发布的需求再合入主干后,进行集成验证发布。
是选择主干开发还是GitHub-Flow,OPPO侧根据业务方的实际情况而定。例如需求粒度很细,开发周期很短(一天以内),建议直接使用主干开发,减少分支的管理和维护;当开发周期较长(几天甚至几周),建议拉取特性分支来单独维护。
在OPPO业务中,大部分的客户端开发产品会选择主干开发或者Github-Flow,因为客户端发布周期相对较长,并且基本都是按照版本串行发布。部分服务端业务,开发团队人数少,发布周期不频繁,也会选择主干开发或者GitHub-Flow模式。
分支集成
分支集成是沿用了阿里的AoneFlow模式,这个模式下主要维护三种分支:master分支、feature分支、release分支。master作为稳定的主干分支,每次开发需求时从master拉出feature分支,当分支开发完成后,将一次版本的涉及的所有feature分支与最新的master分支合入到集成分支release,测试release通过并发布。
分支集成模式下,业务方可以选择将几个分支作为一次版本的集成,能够灵活应对服务端需求变更快、发布频率高、并行版本同时开发的诉求,因此在OPPO内部,分支集成模式被广泛应用于服务端业务的研发模式。
说到这里,似乎和网上介绍的主干开发适用DevOps持续交付是背离的,因为我们将主干开发应用到了发布周期较长的客户端产品研发流程中,而将需要复杂管理分支的分支集成模式用于交付周期短的服务端业务中。
实际并非如此,OPPO研发云针对不同研发模式做了对应的产品能力建设,使其在相应的研发模式下能完成DevOps持续交付闭环。
针对客户端业务主干开发和GitHub-Flow模式,我们在分支/代码合入主干前,增加了PreMerge能力。这个PreMerge卡点主要完成代码预合入的校验和代码评审。
PreMerge卡点利用流水线能力,在研发提交或合入代码到主干前,先将研发本次的开发代码与主干的代码进行预合入流水线任务验证,保障主干上代码的质量,避免因为研发人员的疏漏、研发人员能力的参差不齐导致主干代码被污染等问题。
同时建设每日构建流水线,将每日制品推送到众包体验平台去测试验证每日制品版本质量。每日构建流水线在这种发布周期长的客户端业务中,是极其必要的,它能尽早发现问题,保障在一个较长的研发版本周期内,最终上线的版本依旧稳定可靠。
由于PreMerge卡点的引入,使得每次分支合并或者代码提交都要先验证后合入,打破了主干开发和GitHub-Flow能快速合入代码持续集成的特点,因此适用于发布周期长、发布版本串行的OPPO客户端研发业务中。
对于并行版本发布的服务端业务,我们通过流水线中增加类似阿里AoneFlow的分支集成管理器能力来管理杂乱的分支和多个版本。分支管理器可自动将feature特性分支合入到集成分支release中,发布完成后通过合入主干任务,自动将集成分支的代码合入主干。
与此同时,我们提供了流水线自动基准落后检测能力,当基准分支被其他版本合入后,能够正确拦截那些正在测试中的版本,保证多个版本并行研发和发布的正确性。
分支集成的引入打破了原来代码评审的环节,而代码评审作为研发流程的关键环节,我们给融入到了整个流水线执行的流程中,能让研发集成和评审并行进行,缩短了整个研发流程的生命周期。
OPPO做研发云这个DevOps平台,是基于质量安全的研发效能提升。我们内部讨论了很多,也借鉴了很多业界成功案例,比如阿里、腾讯、字节,但发现其实由于业务本身的不同,公司企业文化和流程差异,照搬经验未必合适,还是需要根据自己的实际情况去做出相应的调整。DevOps平台在各大公司内部或多或少都有对应的产品,这些产品的模块看似几乎无差别,但作为B端的产品,拥有什么样的产品能力,其实并不能体现它的价值,最终这个产品能帮助用户解决什么问题才能体现价值,所以产品能力建设的同时,产品解决方案的落地是极其重要的。
聚焦云原生新技术、新实践,帮助开发者群体赢在开发范式转移的新时代。欢迎关注CSDN云原生微信公众号~
扫这里↓↓↓加入CSDN云原生交流群