王鹏飞,唐灏
(国网江苏省电力有限公司信息通信分公司,南京 210024)
随着能源互联网建设战略目标的提出,电网公司开展数字新基建工作,着力打造以云平台为基础的电网数字化平台,以数字化、智能化推动电网向智慧化方向发展,推动企业数字化转型、智能升级、融合创新,实现效率效益提升,支撑“具有中国特色国际领先的能源互联网企业”战略目标落地实施[1-2]。
当前电网企业技术架构逐步从传统架构转变为互联网新架构与传统架构并存,主要表现为:①信息基础资源由传统的物理资源向全面云化、全局调度方式转变[3];②业务系统由传统单体架构逐步向轻量化、容器化、微服务化的模式转变[4];③分层IT 架构运维模式逐步向一体化、自动化、智能化转变[5]。传统研发模式已经无法满足当前业务发展需求,亟需加强敏态下的研发管理能力,电网企业基于新的形势与变化开展研发仿真环境建设工作,提升一站式项目交付管理能力,有效屏蔽差异化基础设施带来的各类研发、协作、运维效能挑战,实现对用户可见的持续、顺畅、高质量、有效价值的交付[6-7]。
电网企业拥抱未来新的研发模式,统筹规划,开展仿真网络建设,按照共享云底座方式做好验证培训环境、公共服务环境建设,除此之外,根据需要部署个性化公共服务系统,供本单位验证培训环境使用。做好本单位代码库、依赖库、镜像库、仿真镜像库、生产镜像库、编译机等部署实施工作[8]。
Devops 分为规划设计、持续集成、持续交付、持续部署和运维监控五个环节,五个环节相互衔接、持续反馈,安全点控制集成进各环节[9-10]。根据电网企业研发、运维单位分离的情况,传统Devops 测试拆分至持续集成和交付环节分别开展,持续集成测试在研发单位研发测试环境中开展,持续交付的测试则在运维单位的准生产环境中开展,三方测试和安全测试按照稳态和敏态区分的策略开展:稳态维持现状,敏态情况下在技术督查抽检、项目总体上线等业务中开展,如图1所示。
图1 Devops流程
规划设计环节包含了从需求发起、审核、到形成设计的过程。通过采用统一的应用构建平台、基础平台标准化工艺、平台组件及中台集成标准,将安全控制和合规要求、建转运红蓝线要求纳入每个需求设计,提升基础平台、业务应用的标准化程度,降低研发测试环境、准生产环境和生产环境的差异度,提高研发质量。
持续集成环节包含了编译构建、代码检查、单元测试、集成测试等过程,安全贯穿整个持续集成环节。通过统一的持续集成平台,利用自动化的流水线支持研发过程中的不同阶段的任务,从而尽快地发现集成过程中的错误和安全问题,提高研发管控质量,缩短研发周期,降低研发成本,提高交付频率。
持续交付在持续集成的基础上,持续将集成后的最新版本部署准生产环境中,通过不断的自动化测试,确保业务应用和服务符合功能、性能、安全要求,具备快速、安全部署到生产环境中的条件。包含了配置管理、测试管理、发布与部署管理几个方面内容。
持续部署将持续交付阶段通过后的最新版本部署至生产环境中,并开展测试验证,确保生产业务安全稳定,并具备回退能力。与持续交付阶段相似,包含了配置管理、自动化部署、自动化验证几个方面内容。
运营监控环节包含Devops 全链路业务、安全、质量运行情况监控和信息系统运行维护,实现整个Devops 过程运转质量的监控优化以及信息系统运行维护工作。
为支撑研发仿真环境中六大环境建设,规划出三库,即代码库、依赖库、镜像库。通过三库建设解决研发与三方测试系统版本不一致、三方测试与生产系统版本不一致的问题。总体上,三库采用两级部署模式。研发仿真环境部署架构如图2所示。
图2 研发仿真环境部署架构
代码库是存放系统研发代码的仓库,一级代码库集中存放统推项目的研发代码,二级代码库存放的是本单位自建项目的研发代码,研发单位二级代码库存放项目开发过程的代码。其中,一级代码库的代码是研发单位从二级代码库在线提交上来的,研发单位项目研发完成后,在线提交代码至一级代码库,在此基础上开展编译打包以及后续三方测试。二级单位建立一个云上VPC 使用ECS 构建二级环境。技术路线选用“Gitlib”依赖库主要存放系统开发和编译过程中依赖的组件包,一级单位对这个依赖库进行统一运营管理,在一级依赖库中及时新增组件包、更新有缺陷隐患的的组件包,并及时发布至二级依赖库,确保全网依赖组件包版本一致。二级单位建立一个云上VPC 使用ECS 构建二级环境,技术路线选用开源Nexus。
镜像库主要存放编译后的研发系统的程序包或镜像包,这个镜像包是用来发布到研发测试环境、验证培训环境进行测试用的,是用来一键发布到生产环境的。一级镜像库集中存放的是统推项目程序包或镜像包。二级镜像库存放统建两级系统或自建项目的程序包或镜像包,这个统建两级系统的镜像包,是由一级镜像库同步过来的。研发单位二级镜像库存放开发过程中内部测试版本的程序包或镜像包,研发单位镜像库仅支撑研发单位内部测试和出厂测试,不对外发布。另外,这个镜像库还存放公共服务系统的镜像包,这些镜像包总部生成,并由一级镜像库发布至二级镜像库,二级单位及研发单位侧公共服务环境加载使用,确保全网公共服务系统版本一致。
研发仿真环境的总体架构如图3 所示,主要是研发仿真环境6 个环境和3 个库的逻辑架构图,同时,结合统建系统和自建系统,说明利用研发测试环境、公共服务环境、测试服务环境、验证培训环境、生产环境这5 个环境,以及3 个库如何支撑项目研发测试部署全流程工作。
图3 研发仿真环境架构
整体架构图中,总部侧会构建公司公共服务环境、验证培训环境、测试服务环境,同时,会部署一级代码库、一级依赖库和一级镜像库。
研发单位侧部署研发测试环境、公共服务环境,同时,会部署二级代码库、二级依赖库和二级镜像库。
省级公司部署公共服务环境、验证培训环境,同时会部署二级代码库、二级依赖库和二级镜像库。
统建系统共分为3个阶段,研发阶段流程1—4,三方测试与验证阶段流程5—9,发布生产阶段流程10—13。
研发阶段流程1—4,在左下角研发单位侧。
流程1,研发人员在研发测试环境中开展系统研发,研发过程中,研发人员可实时调用测试服务环境中的在线三方测试服务对代码进行在线扫描,根据扫描结果对代码进行修改完善后,将代码在线提交到本单位的二级代码库。
流程2,编译工具从二级代码库拉取刚才提交编写好的代码,并从二级依赖库拉取所需的依赖包组件,对代码进行编译打包,并将程序包(或镜像包)推送至本单位的二级镜像库。
流程3,将刚才推送至二级镜像库的程序包或镜像包发布至研发测试环境中。
流程4,研发单位测试人员在研发测试环境中,调用公共服务环境公共系统,利用测试服务环境,开展系统功能测试、性能测试、安全测试、集成测试,以及集团测试等。调用公共服务环境公共系统,确保使用与生产环境版本一致的公共服务系统进行测试;使用测试服务环境,就是利用服务化的三方测试工具,按照公开化、透明化的三方测试标准和测试规则,在线开展内部测试和集团出场测试,进一步缩短后期三方测试周期和项目建设周期。
三方测试、仿真阶段,流程5—9,在上方总部侧。
流程5,研发测试通过后,研发单位将测试通过的代码在线提交到一级代码库,同时通过在线提交第三方测试申请材料,进行三方测试申请。
流程6,编译工具拉取研发单位刚在线提交到一级代码库的代码,并从一级依赖库拉取所需的依赖包组件,对代码进行编译打包,并将程序包或镜像包推送到总部的一级镜像库。
流程7,将刚才推送至一级镜像库的程序包或镜像包发布至验证培训环境中。
流程8,在验证培训环境中,调用公共服务环境公共系统,利用测试服务环境中服务化的三方测试工具,在线开展系统第三方测试工作。
流程9,在验证培训环境中,通过调用公共服务环境公共服务系统,业务部门可以开展在线业务验证,运行人员可以在线演练,关键用户可以在线培训,让业务用户深入参与到研发过程之中,敏捷响应用户需求。
如果三方测试未通过,返回研发单位修改完善,确认没问题再发布到验证培训环境继续开展三方测试。
发布生产阶段流程,流程10—13,分别在总部和省级公司生产环境侧。
流程10,第三方测试或用户验证测试通过后,如果是统建一级系统,测试通过的程序包或镜像包从一级镜像库一键发布至总部生产镜像库,并完成总部生产环境的自动部署。
如果是统建二级系统,走流程11,测试通过的程序包或镜像包从一级镜像库推送至省级公司二级镜像库。
流程12,将省级公司二级镜像库中刚收到的统建二级系统程序包或镜像包发布至验证培训环境,并调用公共服务环境公共系统,开展省公司侧系统验证工作。
最后一步,流程13,省侧验证培训环境验证通过后,将省级公司二级镜像库中的统建二级系统程序包或镜像包一键发布至省级公司生产镜像库,并完成生产环境自动部署工作。
自建系统,流程包括流程1—4、流程15—19,其中流程1—4 主要是研发单位研发测试内容,与统建系统流程1—4内容、流程一致,不再赘述。主要说明流程15—19,从流程15开始,即研发队伍完成自建系统研发测试后,在线提交代码开始汇报。
流程15,研发单位完成省公司自建系统研发测试后,将代码提交到省公司二级代码库中。
流程16,编译工具从省级公司二级代码库拉取刚提交编写好的自建系统代码,并从二级依赖库拉取所需的依赖包组件,对代码进行编译打包,并将程序包(或镜像包)推送至省级公司二级镜像库。
流程17,将刚推送至二级镜像库的自建系统程序包或镜像包发布至省级公司验证培训环境中。
流程18,在验证培训环境中,调用公共服务环境公共系统,第三方测试团队利用测试服务环境,开展三方测试;同时,业务部门可以在线业务验证,运行人员可以在线演练,以及关键用户的在线培训。
最后一步,流程19,三方测试通过后,将二级镜像库中的自建系统程序包或镜像包一键发布至生产镜像库,并完成生产环境的自动部署工作。
选用本单位某系统开展Devops 全流程验证,研发单位通过手工命令方式,将内部测试通过版本代码上传至二级代码库、提交项目编译依赖包到总部一级依赖库,通过云效平台调用电力二级代码库,开展代码编译,生成程序包推送到PackageSwitch 二级镜像库中,通过部署在本地ECS 虚拟机上的Agent 完成程序包部署,省侧测试验证,通过测试后,利用云效将测试通过的程序包部署到生产环境中ECS,发布后,应用访问正常如图4所示。
图4 验证结果
本文针对目前研发与三方测试系统版本不一致、三方测试与生产系统版本不一致问题,结合电网企业数字化转型发展需求,基于Devops 流程提出研发仿真环境构建方案,实现应用在线研发、在线测试、在线发布等一体化、全流程、自动化,提升各类研发、协作、运维效能,实现对用户可见的持续、顺畅、高质量、有效价值的交付。本文的工作可以进一步推进电力行业信息基础设施数字化升级。