“质量门禁”是指在软件开发和测试过程中设立的一系列标准和流程,以确保产品的质量和稳定性。『高途发布编排质量门禁』经过一年多的建设已经覆盖了技术部90%以上的业务线,已经成为开发、测试日常工作中不可缺少的测试系统。
背景
研发现场还原:
下图为常规的产品研发工作流,上面的「需求流」描述了一个产品从需求规划到完成的生命周期,我们称之为“上流水线”,主要负责产品的需求的整个生命周期的流转;下面的「研发流」描述了一个功能模块从本地创建feature分支开发到线上发布的的开发测试过程,我们称之为“下流水线”,主要负责产品在开发侧的整个生命周期的流转。
产研工作流(旧)
长期以来,公司内各业务线这两条工作流都是相互独立的:产品在项目管理平台(Jira、tapd、禅道……)上进行需求的流转;研发在技术评审通过之后,进行代码开发、自测;测试在需求评审后进行测试方案的设计,并在研发提测后进行测试、发布上线;三个角色的工作都是相互独立的,数据并不互通,更多的时候是通过手动的方式进行关联,带来了一系列的问题:
上流水线关键信息依赖大量人工维护,效率低,并且无法产出统一的数据口径
上、下流水线“不可编排”,流程无卡点能力
下流水线无统一执行标准,各业务线能力参差不齐,无法做横向对比
上下流水线无法关联,导致测试过程数据不透明,一次发布动作无法从前置流水做“规约”
设计目标
从发布视角出发,倒推上线准出->提测准入->项目规划排期,做到整个生命周期的一致性和延续性,并对发布过程动作做编排,建立并完善准入准出“质量门禁”。
系统介绍
双减之后,公司从原来的“小步快跑”的急速扩张模式中迅速踩下刹车,开始“修养生息”、“修炼内功”。特别是在降本增效的大背景下,公司对各业务团队进行了较大规模的缩减和整合,总体思想是:「One Data,One Platform」。在这种前提下,质量团队也进行了很大的调整,各个业务线的测试平台经过一系列的PK和整合,形成了现在所有测试日常的工作平台:QEM奇点工作台:qa.baijia.com。
如下图所示,是发布编排门禁系统的整体架构,从下到上,最底下是能力提供层,主要包括了各种测试能力;再往上是调度层,我们把各个测试平台的能力以门禁job的方式统一注册到系统中,供系统进行调度和编排;再往上就是系统的应用层,包括了发布单管理、结果管理、job管理、策略管理、审核管理;最上面就是项目的一个工作流管理,我们将工作流管理与门禁系统整合到一起,门禁系统负责job的编排、调度、审核、数据展示,从而实现了job的在线调度编排和数据展示。
其中,最核心的部分包括两块,一块是「job的调度能力」,一个是「工作流的审核能力」。
job调度,通过实际使用过程中的不断更新迭代,我们将job抽象出来了四大属性:
1)语言框架:根据job支持的语言框架,可以在编排时根据服务语言类型筛选出对应的job;
2)是否需要部署服务:如果需要部署,在执行job时会校验测试环境部署的镜像是否与选择的分支一致;
3)卡点类型:根据使用场景,当前存在强卡点、弱卡点、不卡点三种类型的job,会根据卡点类型来决策job执行结果的后续流程;
4)调度类型:支持同步下发、异步下发两种场景;
下图是job调度执行时的具体流程。
审核调度,针对提测申请和上线申请的审批流统一接入了公司的百川审批流体系,根据job执行结果及job卡点属性的不同,制定了不同的审核策略,整体思路是:
强卡点job未通过不允许发起提测/上线申请;
弱卡点job未通过,在审批流中增加“直属上级”审核节点;
增加“紧急上线”类型,可跳过质量门禁的卡点,直接进入直属上级审核,支持紧急热修类上线;
门禁结果数据会分别展示准入、准出对应的结果:
推广
质量门禁系统在建设初期,在推广落地上曾遇到了许多问题,经过不断的尝试,我们总结出了一套推广落地的方法论。
「最佳实践」推广之初,我们先利用地域优势,率先在武汉团队进行了接入试点,并产出最佳实践;经过和QA共同努力,历史第一次将各测试能力与需要实时绑定并将结果数据展现给开发,并得到不错的反响,最后往北京推广也顺利成章的得到大家的认可。
「制定规则」制定准入准出策略,圈选不同的job、job的执行范围、通过阈值,并在产研团队达成一致。
「数据大盘」定义好执行的标准、策略之后,还需要有相应的数据度量,观测各个job的执行情况,并提供团队排名方便进行横向比对,推进质量门禁系统的接入使用。
「横向扩展」平台提供了系统默认job:接口自动化、功能用例、代码覆盖率、告警分发,基本上能满足80%的使用场景。除此之外提供了自定义job的接入能力,用户只需根据接入协议,自行将job注册到系统中,就可以在策略中配置自定义job了。具体的调度方式是,平台按如下的接口协议发起任务,然后任务结果可以以同步或者异步回调的方式返回给平台进行聚合展示。
{
"uniqueKey": "qualityAc:strategyId:2:releasePlanId:1048:resultId:8679", // 同一个发布计划、策略、job使用同一条数据 的标识
"customParam": "P0,P1",
"acType": "stepOut", // 门禁类型stepIn、stepOut
"serviceList": [{
"nid": "", // 服务唯一标识
"serviceCode": "", // 服务唯一标识
"serviceSubmitBranch": "", // 服务提测分支
"serviceBranch": "", // 服务分支
"env":"", // 服务部署环境
}]
}
结语
质量门禁的作用,就在于提前发现和预防风险,提高交付质量,保障最终交付的产品,控制风险的「爆炸半径」
经过一年多的推广应用和系统不断的优化,使用发布编排进行提测上线已经成为技术部的规约,通过准入准出门禁也拦截了许多质量问题,其中通过自动化job拦截了202例问题,通过监控告警job拦截了278例问题,通过覆盖率job拦截了26例问题,有效的保障了产品交付质量。
END