大家下午好,我是来自国网信产研究院的刘迪,下面和大家分享的主题是“让软件开发在云端化纷为简”。
国网信产集团是国家电网公司的一家全资子公司,员工人数大概是8000人,去年营业收入是250亿元,下属10家二级单位和15家三级单位,业务涵盖咨询、信息、通信、芯片、数据、集成、运维、安全和北斗位置,我们的目标是助力国家电网公司建成全球规模最大的电力专用中心网,助力国家电网公司建成央企领先的一体化集团信息系统,助力国家电网公司建成国家先进的网络安全防护体系。
国家电网公司十分注重企业的信息化建设,过去的十年当中业务系统大概从30套左右增长到240套,大量的系统研发从传统的单极架构演变成现在的微服务架构,开发人员大概有2万余名,业务系统240多套,整个内外部厂商加起来150余家。
国网公司从2014年开始推进IaaS建设,2016年开始推进混合云建设,但是研发方面仍然存在研发质量、研发进度和研发成本的诸多问题。2017年开始我们研究院作为牵头部门开始梳理整个国网公司的研发能力提升的专项工作,整理出了四个存在的主要问题,这些问题可能也是存在于相对特殊的企业内部,不一定所有单位都适用。
协同研发的支撑不足,整个研发模式下各个单位都依赖于制度管控,缺乏统一的管理方式。针对越来越多的敏捷开发场景缺乏有效的迭代升级机制,离岸开发沟通成本偏大。
研发环境日益复杂,底层研发环境越来越多地依赖于容器、微服务等相对复杂的技术,之前极端的情况下给大家台式机和刀片服务器,几个同事就可以开始研发,现在部署环境相对依赖云,所以整个研发支撑环境变得特别复杂。
微服务门槛持续提升,因为供应商相对比较多,所以技术门槛也不太一致。
研发安全缺乏有效保证,国网公司对信息安全非常重视,目前研发环境非常分散,没有统一的保证机制。项目过程当中采用大量第三方开源组件,哪怕使用同样的开源组件,获取的渠道也不是十分一致,或者整个版本也不一致,这样对整个安全漏洞修复相关工作会有比较大的影响。
核心代码缺乏统一管控和防护,就是代码在转到运维之前都是掌握在各自的开发厂商手里。
持续交付能力不足,云原生应用缺乏一体化持续交付的手段,线下交付方式导致研发和交付的版本不一致,特别是针对迭代开发的场景,不仅仅是开发和运行的不一致,因为国网公司的要求是必须经过独立机构的第三方测试,甚至是整个研发、测试和运行的所有版本都不一致,确实没有有效的手段去控制。
我们的工作也和互联网厂商、企业应用IT厂商进行交流,总结研发平台的发展趋势,包括研发工具和过程管理相结合。之前很多做研发工具的就是做研发工具,做过程管理的就是做过程管理,我们这样的企业非常多地出现研发和管理的两层皮,更多的厂商也开始做基于浏览器的外部开发工具,更多的企业进行研发资源的集中管控,更加强调分布式的协作,不管是互联网公司还是企业更加强调建设自己的生态圈。
基于我们以上的调研和分析,基于过去十年国网公司研发工具,我们提出了一体化开发云,希望实现云端项目的协同管理和线上开发、线上测试、线上整改和线上发布。这里包含几个部分:访问端、工作台、研发路线组件、研发管理组件、配置管理组件和云基础设施,机器保障和队伍建设。访问端不是我们做的,我们是支持多种访问方式,包括传统的PC机,也包括新的终端机。云基础设施也不是我们的项目范围,依赖于国网公司自己的私有云,体系保障和队伍保障是我们认为国家电网公司推行产品的时候必然会对过去的传统研发模式造成比较大的冲击,保证项目和新的研发方式能够顺利推进。
我们的工作集中在这样几个部分:工作台是开发云提供的统一窗口,保障研发环境的封闭,所有的研发人员和管理人员都要通过工作台统一登录。项目核心就是研发流水线的支撑组件,也是基于之前的SKP进行一系列的改造,研发管理组件就是为统一的研发过程提供管理和同步支撑,配置管理组件就是负责统一的代码仓库构建,为代码安全和版本配置提供支撑。
这些就是经过试点我们总结的一体化开发云核心能力新的体验:敏捷化项目管理、云端代码检测、原生云应用开发、流水线持续交付。我们的目标是让软件开发更加智能、更加协同、更加便捷,使得软件开发向制造迈进,更多的是解决我们企业内部的研发过程当中存在的问题。
企业级应用开发的厂商采用敏捷的方式相对来说还是比较少的,更多的还是传统的分布式模型开发,但是我们为了适用发展提供的是四个方面的解决方式:
提供多模式的项目管控,就是项目管控的模板工具,定制不同的项目模板,适应瀑布或者敏捷开发场景,我们也可以提供针对公司现行的管理体系,包括ISO9000的管理方式尽量做到管理和研发不脱节。
提供多维度的研发看板,长期以来我们对研发人员的评估,包括外包单位研发人员的评估缺乏有效手段,我们实时提供研发进度和代码贡献度,实现对项目的精细化管控,试点项目的实际数据是每个研发人员每天贡献有效代码行数是370行,不过我们也在探讨什么是有效代码,每周可以完成3个任务,也和任务的体系化有关。
提供分布式的协同研发,项目经理将项目进行任务化的分解,研发人员通过云端环境,基于任务化的协同研发减少相应的沟通成本。
提供全过程的项目管控,需求、设计、研发、测试全过程,基于任务模式驱动,并且自动生成需求跟踪,通过开发人员任务代码相关联缩短缺陷的修复时间将近一半,实现每个任务向上向下追溯。
我们通过一体化开发云的建设提供全容器化的研发环境,根据项目的动态周期动态回收资源,提高基础资源的利用率。我们的空间分配分成两种:一种是为每一个研发人员提供独立的动态空间,登录PC机或者终端,也会为每个项目提供一个独立空间。国家电网公司作为一个独立企业,要求使用一系列自己特有的平台类的东西,包括有自己的流程工具和权限管理工具,外部厂商很难能够搭建一套完整的研发环境或者测试环境,通过这种配置给所有研发厂商动态生成符合研发测试要求的封闭环境。另一种就是项目进入测试期以后我们自动回收开发资源,缺陷修复的时候动态启动开发环境。
一体化开发云基于配置构建两极代码仓库形成分区体系,实现代码云端统一、分级管控。我们最开始的时候是想让所有的研发人员直接连到中央代码库,但是实践的过程当中我们发现这种体验并不太好。我们的研发人员相对比较集中,就是集中在福州、成都、北京和合肥这样几个城市,通过建设不同的开发基地,每个开发基地都有一个本地的缓存库。相当于在本地必须通过这样的检测才能进入本地缓存库,然后在本地缓存库当中执行自动化测试,版本再存入中央代码库。我们通过这种方式实现既不影响本地开发,又不实现异地协同研发的模式。
我们的开发云提供可拖拽式快速构建业务系统,并且支持自动化转维传统单极应用和微服务的代码,过去的十年当中国网公司的开发工具是我们做的,通过和不同项目组的长期合作,通过各个领域包括人财物、基建和招投标形成3000多个典型业务模板,才做到了这样的模板生成各类应用的快速迭代方式。构造阶段我们提供高保真的原型,而且和其它原型工具最大的区别是原型可以转换成后面项目直接应用代码,确保这种原型保真程度和不被曲解的程度,实现这种可视化的构造、快速开发和高质量的交付。
我们提供离线和在线两种研发模式,通过浏览器进行在线开发,离线方式之所以存在就是因为有些项目需要现场测试,因为只有生产环境或者准生产环境才能进行测试,我们支持这种代码的导出,包括代码设备需要进行生成认证,保证人员导出,整个代码的流失或者走向可追溯,外面实现远程开发或者本地环境调试之后可以同步回到本地。
这是一体化开发云提供的可定制化流水线的持续集成,我们提供企业级的研发流水线引擎,在线可视化流程定制,执行在线开发、在线检测、持续集成、业务部署,实现流水线自动化执行、快速迭代和持续交付。封装、打包、编译脚本、提供可视化向导,每天可以完成3000次左右的持续集成,运行效果非常稳定。全过程任务推动,各个阶段执行过程实现可视化,并且提供一站式部署在KPS上面的技术路线上云,屏蔽底层的技术细节,无论什么都是需要经过中国电科院第三方的安全检测上线,所以我们并没有实现真正从开发到测试到运行,只是在开发和自身的测试阶段实现这样的流水线。
我们项目去年开始试用,截止目前一体化开发云支撑30多个项目的建设,参与研发人员1000名左右,通过这种业务平台进行集成管理,初步统计整个硬件使用率提高130%,节约研发成本700余万元,但是实践过程当中还存在着大量的问题,每天仍然在修复缺陷。大概每天收集到的问题有几十个,而且由于网络限制,目前针对互联网开发或者移动应用开发支撑也有限,就是我们在大型企业研发上云的尝试或者应用的效果,可能和其它行业不完全相同,大家感兴趣的话会后我们可以进一步交流。