前 言
什么是沉浸式研发?可能很多人都没听说过这个名词,我们不妨从一次数据调研的结果开始讲起。在不久之前的一次一线开发人员每日编码时长的数据调研中,我们惊讶地发现,每个编码人员一天中使用 IDE 的平均时长只有不到两小时,与我们的预期有较大的差距。因此我们对这些开发人员的一天投入时间分布展开了深入调研,调研发现身为编码人员,除了在 IDE 中编码,其他需要投入时间的工作包括:找软需、查历史资产、查接口文档、查表结构、执行测试案例、模拟器调试接口… 这些工作似乎都是研发的必要环节,但零散的产品导致编码人员“来回奔波”于各个系统之间,减少了编码人员真正用于编写代码的时间。而沉浸式研发的目标就是让研发人员无需关注基础设施,而能够更专注于代码本身。
业界现状
随着云原生和 Kubernetes 的普及,应用架构在横向及纵向不断扩大和调整,微服务的数量变得越来越多,为保证研发质量,业界致力于提供微服务应用在开发、测试和生产阶段的一致性环境。现有 DevOps 流水线通过编译、打包、推送、部署等操作,降低了系统的运维成本,但是由于无法快速启动完整的开发环境、无法去除上下游的依赖、无法快速调试微服务等问题,导致开发阶段需要快速验证、快速反馈的诉求很难得到满足。2020 年腾讯 CODING 团队发布了自主研发的 Nocalhost,实现本地 IDE 和云端开发环境相互连接,无需运行 docker build 构建镜像和重新部署工作负载,开发者仅需在本地修改要开发的微服务代码并保存后,即可在云端开发环境中验证,可以实现本地开发代码实时生效和调试,有效缩短开发循环反馈。
为了降低开发人员的开发门槛,让开发人员更快、更准确地完成需求,业界以 IDE 为中心,通过集成 DevOps 研发辅助工具,打通需求、设计、研发、部署全流程,为开发人员提供一站式研发辅助生态。
工行金融科技研发体系痛点
业界不断探索如何提升“研发效能”的同时,工商银行金融科技也在积极尝试形成一套属于自己的高效研发体系,目前行内比较共性的研发痛点如下:
资产布局分散: 为了给开发人员赋能,行内积累了一系列标准资产、标准代码和标准工具,但是也引发了资产布局分散的问题,软需、应用信息、接口服务文档、表结构等资产均需要在不同系统获取,而应用资产则会出现在社区、共享盘、云文档甚至个人本地电脑、邮箱,各种资产无法形成合力给开发人员赋能,也导致开发人员在使用过程中需频繁切换和被打断,严重影响研发效能。
资产孤岛现象严重:各应用间的标准资产自建与隔离,造成标准资产重复建设、过时资产再次建设等资源浪费,且开发人员无统一、便利渠道检索和参考其他应用资源。打通应用、部门甚至基地间的资产孤岛,是推进资产标准化、提高资产复用率、推进低代码建设的必要一环。
研发自测困难:个人开发环境无专人维护,功能环境欠稳定且受部署时间限制,开发人员无法随时完成对代码的快速迭代,导致不少时间浪费在等待上,一套可定制的标准自测环境成为了开发人员可望不可及的梦想,也成为了提高研发质量的主要瓶颈之一。
研发断点严重:综合上述系统多、资产检索难、自测环境差等问题,研发人员需要在系统间来回切换与等待,基础设施的依赖度极高,导致投入实际编码的时间不足工作时长的 1/3。如何针对性降低日常研发断点、提高编码人员沉浸式研发时长,是提高产能的关键一环。
沉浸式研发构想与落地
对比业界实践,结合我行研发流程,我们从编码辅助、自测环境供给以及打通 DevOps 研发流程出发尝试建设一站式 IDE,避免开发人员不断被各种工具打断,实现“沉浸式”研发。
一、资产辅助一键触达
以开发人员研发 IDE 为触点,通过可扩展插件方式提供研发辅助资产快速检索、不同 IDE 间和系统间资产共享、资产一键引入、代码规范扫描等一系列能力,为研发人员提供统一、便利的交互入口,形成合力对开发人员赋能。
在资产检索功能上,为契合程序员操作习惯,以极简的界面为开发人员提供基于关键字、主题标签检索标准资产的功能;同时为提高检索效率,搜索引擎采用 Elasticsearch,IDE 内毫秒级获取相关资产,最大程度节约无效检索的时间。在标准资产共享上,为了做好资产管理,用中心级、基地级、部门级、应用级四个等级区分资产的适用范围,规范资产定级;用资产类型、资产所属大类、小类等标签区分资产适用场景,规范资产分类;由各级别资产审核人严格审核,确保资产质量。
二、研发流程一站贯通
打通研发工具和流水线,自测完成自动提交构建流水线进行质量守护,从而为开发人员提供详细设计、编码、单元测试、自测、部署五个研发阶段的沉浸式开发体验,无需频繁切换不同支撑系统,打断研发流程,有效提升 DevOps 研发运维一体化能力水平。
详细设计:通过打通与各个研发管理系统的壁垒,IDE 内一键查询开发设计阶段所需的服务 /API 接口文档,无需系统间来回切换。编码:通过代码补全、标准化代码模板等工具辅助,无需再去各个系统检索资产,提高研发效率。
单元测试:通过嵌入单元测试覆盖率检测、MOCK 等工具,IDE 内快速完成单元测试,提高代码质量守护能力。
自测:通过接口模拟测试、本地提交构建流水线预检、云测试环境创建工具嵌入,IDE 内完成自测,降低自测门槛,提高自测质量。
部署:通过 git 插件提交代码入库,入库后在通过 VCDS 接口触发流水线。提供代码的全流程视图,方便跟踪代码。
三、云端实时自测验证
1、环境搭建
实现为开发人员快速提供云原生自测子环境能力,以稳态环境为基础,提供环境快速复制能力,开发者可以低成本建立不同的子环境,编码完成后通过本地插件快速同步到云端开发环境,快速部署,快速验证,在子环境中开发、变更目标服务,子环境与基准环境的服务交互实现联调,从传统编译、打包、推送、部署、调用、修改的六步骤转为编译、调用、修改的三步骤秒级程序循环验证反馈模式,有效提高开发自测环境的稳定性和验证效率。
基于 PaaS 的 K8s 集群和云管平台,搭建开发自测环境的 K8s 集群和云管平台,通过 IDE 直连 K8s 集群,形成开发环境预分配、随用随申请、用完即销毁的机制。制作开发基础镜像,实现容器内编译打包部署,减少部署等待时长,提升自测验证速度。
K8s 集群:由 PaaS 云平台提供自测环境的 K8s 集群。
云管平台:基于 PaaS 云管平台,实现自测环境 Pod 的的集中管理,包括开发容器的创建、监控和销毁等功能。
IDE 插件:适配目前主流的 IDE,通过配置集群信息连接 K8s 集群,完成开发容器的配置、申请和销毁功能。
开发基础镜像:制作适配行内主流开发环境的基础镜像。
2、自测流程
基于全链路路由机制,实现请求自由发送到特色自测环境:
特色标签:根据开发人员个人属性,自动生成唯一标签。
流量路由:根据标签路由,基于我行已有 CTP 与 DSF 等框架提供的全链路路由能力转发流量。
默认服务:基准容器提供默认的服务,若未指明标签或者未找到指定的标签,则访问基准容器的服务。
联调测试:开发联调测试过程,启动带有标签 V1 的开发容器,并通知联调方同样使用带有标签 V1 的服务来请求。完成基于开发容器 A(V1)、基准容器 B、开发容器 C(V1)的开发环境联调测试。
结 尾
话题的最后,我们再次表达下我们沉浸式研发体系规划愿景:减少研发断点,提高研发产能?不不不,直白一点,我们最终的愿景是:带你走进沉浸式研发,除非你想,否则你再也不需要离开你的 IDE,即 ALL IN IDE!
评论 4 条评论