面向边缘云的轻量DevOps平台设计与实现

2023-06-22 11:50彭勇赖兰剑王琦郭煊烽
现代信息科技 2023年5期

彭勇 赖兰剑 王琦 郭煊烽

摘  要:针对某些行业边缘云环境存在的局限性与对新型开发技术和敏捷开发的迫切需求之间的矛盾,文章设计实现了一个软件全生命周期DevOps平台,并在某大型软件研发项目中得到成功应用。该平台将DevOps流程进行自动化流水线式集成,利用交叉编译技术,使其能够支撑Windows和Linux软件开发;再通过Agent在物理机、虚拟机以及容器等多环境中实现软件的自动部署和运维,实现从架构、开发平台、运行环境的全方位支持。最后,通过案例验证了平台各模块功能的可用性。

关键词:DevOps;边缘云;Docker;交叉编译

中图分类号:TP311.5  文献标识码:A  文章编号:2096-4706(2023)05-0085-05

Design and Implementation of Lightweight DevOps Platform for Edge Cloud

PENG Yong1,2, LAI Lanjian2, WANG Qi1,2, GUO Xuanfeng1,2

(1.Science and Technology on Communication Information Security Control Laboratory, Jiaxing  314033, China;

2.The 36th Research Institute of CETC, Jiaxing  314033, China)

Abstract: In view of the contradictions between the limitations of edge cloud environments in some industries and the urgent need for new development techniques and agile development, this paper designs and implements a full-lifecycle DevOps platform, and has been successfully applied in a software development of a large-scale project. The platform integrates the DevOps process in an automated pipeline, and uses cross compilation technology to enable it to support both Windows and Linux software development. And the automatic deployment and operation and maintenance of software are realized in multiple environments such as physical machines, virtual machines and containers through Agent, so as to realize all-round support from architecture, development platform and operating environment. Finally, the availability of the functions of each module of the platform is verified through a case.

Keywords: DevOps; edge cloud; Docker; cross compilation

0  引  言

許多应用软件的开发并不具备大型云平台的条件,也不能使用公有云环境,要求DevOps平台能够在开发场地快速部署,且平台本身占用的服务器资源必须尽量少[1-3];而待开发应用软件所采用的架构既可能是传统的单体应用软件,也可能是基于云原生的微服务架构,或者是两种架构的混合体[4,5]。在云计算技术已成熟且大量应用的今天,还有许多此类开发场景,而且在某些行业内,需求还比较普遍,如工业互联网软件开发、军用软件开发等[6]。这些行业软件对安全性、保密性要求高,不具备接入公用云的条件,但对采用新型软件开发技术和敏捷开发的需求很迫切,希望能够快速建立针对行业软件需求的轻量化边缘云环境,并采用DevOps平台支撑应用软件的全生命周期[7,8]。

本文设计的DevOps平台是一套“小快灵”的开发环境,自带一套容器云平台,且平台本身最低仅需一台服务器就能运行部署。该平台能够全方位协助小型开发团队快速上云,通过采用交叉编译技术,既能支持Linux软件开发,也能支撑传统的Windows软件开发。平台提供的Agent“小探针”软件,能够同时部署运行在物理机、虚机、容器三种环境内,全方位支撑各种应用软件的自动化部署和运维监控。该DevOps平台进行了自动化的流水线式集成,简化了开发人员的操作,减少了学习成本。

1  DevOps框架设计

1.1  DevOps框架

本文搭建的DevOps平台是一个在边缘云环境下能够提供从软件开发到运维监控的全生命周期管理的轻量级、高效率、可扩展性平台。

本平台在保证功能全面的前提下,以轻量级开源代码管理工具Gitea为基础,用支持全面容器化的Drone自动化CI工具[9]作支撑,将所有基础环境、公共服务软件均以Docker镜像的形式运行,充分压缩平台本身占用的资源空间,将机器资源空间留给用户;为避免使用Kubernetes、Rancher等重量级工具,本平台提供了小巧的运维监控软件Agent,协助完成多种环境下的软件自动化部署和运维监控工作。

本平台的部署、启动均通过Docker容器高效实现。一般将平台软件预先部署在服务器中,结合容器的开机自启功能在边缘环境中可实现开机即用。即使需要边缘现场部署,只需将容器镜像上传至机器中,能够快速启动本平台。另外,该DevOps平台对配置项管理、代码提交及质量管理,到软件编译、构建和部署,再到运维管理进行集成,形成了闭环全流程的自动化流水线,降低开发人员的学习成本,提高软件的交付效率。

由于本平台实现了全面容器化,能够根据功能需求进行灵活选择,亦能使用自构建的容器镜像进行功能自定义扩展;同时,通过交叉编译技术能够支持Windows和Linux软件开发,Agent能够支撑软件在物理机、虚拟机、容器中运行,增加了开发的多样性,能够支撑多类开发人员之间的共同协作。

如图1所示,根据上述DevOps平台的特点,将其划分为以下几个主要部分:配置项管理、代码质量监控、自动编译与持续集成、自动化持续部署以及运维监控。平台各模块均需用户通过DevOps门户的统一身份认证,该门户是整个平台的统一入口。

配置项管理主要包含了对微服务进行划分、建立代码仓库、注册用户等,使得服务、仓库、用户三者关联匹配。代码管理及质量监控主要包括代码上传至代码仓库、版本标签、版本回退以及代码仓库中的代码质量检测。自动编译与持续集成主要包含了仓库中代码的自动编译、交叉编译、多服务之间的集成以及服务接口自动化测试。自动化持续部署主要是包含了服务的部署镜像制作以批量自动部署。运维监控是对部署应用以及目标机器的状态检测。

1.2  常用工具

下面是本文构建的DevOps平台过程中用到的常见开源软件工具,包括容器化工具Docker,持续集成工具Drone,代码静态扫描工具SonarQube,实现接口自动化测试的Postman和Newman。

1.2.1  Docker

通过将每个微服务的运行环境和开发环境进行容器化,通过对空间进行隔离,能够杜绝因环境问题对开发进程产生影响,同时也便于实现集中式管理和迁移。Docker是基于Go语言开发的轻量级开源容器平台,通过容器引擎将应用和环境打包,能够发布到主流Linux机器上[10]。其构建镜像的重要手段是将操作流程全部写入DockerFile中,再基于该文件执行Docker Build等相关命令创建镜像,包括对编译环境和服务运行容器镜像的构建。

1.2.2  Drone

Drone是一款全面支持容器化的自动化持续集成工具。通过使用YAML文件(.drone.yml)的形式进行流程配置,能够监听Git事件以自动触发构建流程,使得构建流程配置方便且容易理解。每个构建步骤都是执行在一个临时的Docker容器中,可使得不同的构建任务并行执行,不会相互影响,提高了构建效率。

1.2.3  SonarQube

SonarQube是一款开源的代码质量检测工具,通过扫描器对指定目录下的代码进行扫描,将相关信息传递给分析服务端,再通过Web端将分析结果展示。SonarQube通过多维度分析代码质量,提供直观可视化的质量报告,并且提供相关接口供二次开发使用。

1.2.4  Postman与Newman

Postman是一款常见的接口测试软件,能够测试绝大多数Http协议的接口。可利用JavaScript编写测试脚本,并通过Json/csv外部数据文件编写测试用例,配合请求集合实现多用例一键执行测试。Newman是配合其使用的命令行操作的运行器,通过命令行运行Postman导出的测试文件,可实现接口测试的持续集成。

2  DevOps平台实现

2.1  配置管理

配置项管理是保证项目按时保质完成的重要手段,同时考虑平台资源的局限性,本平台不再使用额外软件进行配置项管理,仍使用Gitea支撑项目配置管理工作。为做到权限分配合理、责任细化到人,本文根据软件服务业务划分规划出三类代码仓库和四类人员。三类代码仓库分别是:开发库、集成测试库、发布库;四类人员分别是:项目配置管理员(Configuration Management,CM)、计算机软件配置项(Computer Software Configuration Item,CSCI)负责人、CSCI测试人员、计算机软件单元(Compute Software Unit, CSU)负责人。

开发库中存放的是软件服务开发的代码,规定其命名规则是项目-分系统-dev-CSU名称,集成测试库和发布库命名规则也是类似。一般地,一个开发库中只存放单个CSU的代码,开发库的管理权限分配给CSU负责人,由其进行代码上传、自测、发版等操作;集成测试库中的代码由一个或多个开发库按照CSCI划分规则集成而来,由CSCI测试人员进行功能测试,CSCI负责人确认无误后进行发版;发布库则是准备发布的版本,由项目CM打上版本标签,准备部署,如图2所示。

2.2  代码质量监控

為防止软件开发过程中版本错乱、源代码意外丢失,须将其上传至远程仓库进行版本管理。本平台支持Git的工作流程和基本操作,能够通过Git客户端和Visual Studio、VS Code等多种主流开发环境将代码上传至开发库,输入提交的版本信息给予说明,做好版本管理。为保证代码质量、提高开发人员素质,同时也便于代码维护,需要对提交到开发库的代码进行静态扫描,并对代码扫描的结果进行判断,构建代码质量门禁,如图3所示。

本平台通过Docker镜像文件来部署SonarQube的服务端,在Drone中使用的扫描器是drone-sonar-plugin。在代码库的根目录中根据不同的语言写好配置文件,同时在.drone.yml中填写SonarQube服务端的地址以及用户密钥等信息,即可在启动编译的时候触发代码扫描,SonarQube会根据由多个指标构成的质量阈对扫描结果进行判断。

2.3  自动编译与持续集成

当开发库的代码通过质量检测后,就需要通过编译来将代码转换成二进制语言,本平台通过Drone来实现自动触发编译流程,通过配置YAML文件来定义构建流程。可同步监听Git事件,设置根据不同的Git事件来触发自动编译流程。

在实现自动编译的过程中,编译环境是至关重要的一部分。因此,本平台配置了C++、Java、JavaScript等多种语言的Docker镜像作为基础编译镜像,以支持多人、多开发库的自动编译任务的并行执行,杜绝了代码编译环境之间的相互影响,提高了编译效率。另外,针对某些行业内不能接入公有云环境的问题,本平台在Linux环境下搭建了Maven、npm等依赖库,通过编写Shell脚本实现了依赖包的批量上传,CSU负责人只需以编译环境的Docker镜像为基础,拉取必需的依赖包,即可解决编译过程中缺少依赖的问题。

在软件开发过程中难免会有Windows程序的场景需求,为了在一台服务器上实现一体化的编译环境支持,本平台采用MXE交叉编译在Linux系统生成Windows二进制文件,实现了在Linux系统上编译Windows程序的功能,同时也能够编译纯Linux程序,满足各类开发人员对编译环境的多样需求。

在完成编译后,CSU负责人将其推送至配置好的目标集成测试库,根据业务需要与其他应用代码通过.drone.yml脚本进行集成。CSCI测试人员对应用提供的接口进行测试,针对接口测试,本平台结合Postman和Newman实现了接口自动化测试,如图4所示。利用Postman填写好请求内容、测试脚本等信息,导出测试文件和包含测试数据的csv/Json文件一并上传至集成测试库,再利用Newman通过Linux命令行进行测试,在.drone.yml中添加Newman流程,可根据Git事件自动触发,CSCI测试人员只需在csv/Json文件中填写测试用例即可。

2.4  自动化持续部署

对于大规模集群部署,通常借助Kubernetes和Rancher实现自动化部署和运维监控,首先需要部署的是Rancher,通过Rancher来安装K8S集群,再可以通过镜像仓库拉取镜像并根据该镜像在K8S集群中运行Pod,以Pod为最小单位运行,再配合Drone的流水线能够实现大集群的自动化部署。

而考虑到边缘环境受网络带宽等因素的影响,并且DevOps平台也需要在非容器环境下独立进行部署任务、兼容Windows和Linux等主要操作系统。因此,本平台开发了Agent“小探针”软件,通过此Agent能够将服务部署镜像、可执行文件以及相关配置文件通过内部网络传输至目标机器,结合流水线实现自动化持续部署。

2.5  运维监控

Agent部署在边缘环境的主机中,支持Windows和Linux版本,并且能够安装在容器中。Agent作为运维监控软件,不仅能够支撑自动化部署,还能够将部署主机的IP、内存、CPU等信息以及应用的节点、PID、状态、版本号等状态回传至DevOps平台中发布库的监控页面,如图5所示。结合本平台的交叉编译功能,可以实现Windows和Linux应用的开发、编译、部署和监控,从而既能应对B-S架构软件开发,又能支撑C-S架构的软件开发。

Agent选用跨平台库Gopsutil作为系统监控、信息收集的基础包,将数据存储在MySQL数据库中。DevOps平台提供监控页面,通过Http接口收集Agent发来的监控数据,采用Vue2与ElementUI开发前端可视化,并将其集成至DevOps发布库页面中。

3  平台验证

基于本DevOps平台已开发了某软件系统,该系统分为7个子系统,以整个软件系统为一个项目,每个分系统为一个CSCI,每个CSCI中有一个或以上的开发库、一个集成测试库和发布库,一个开发库中存放一个微服务的代码,如图6所示。

本文将基于其中一个QT程序案例对DevOps平台的各环节进行验证。在开发库中,开发人员将代码更新到开发库中,在程序编译之前需要进行代码扫描,对扫描结果进行质量判断,通过质量门禁后,该程序通过qmake指令生成适当的Makefile,再使用make指令开始编译,生成可执行文件,如图7所示。

在集成测试库中,通过集成脚本.drone.yml进行集成并使用Postman和Newman进行自动接口测试,通过测试将推送至发布库。本实验中通过在csv中填写五次测试用例进行测试,如图8所示。

在发布库中,通过DockerFile构建新的Docker镜像,通过部署脚本指定部署目标机器,同时将启动Docker镜像的docker-compose.yml文件上传。Agent会通过docker-compose来自动启动Docker容器,并将生命状态回传至开发库中监控页面,如图9所示。

4  结  论

本文面向边缘云环境设计了一套轻量级、高效率、开放性的DevOps平台,该平台具有极低的软硬件部署环境要求,能够协助小型开发团队快速上云。能够同时支撑B-S架构和C-S架构的软件开发,且能实现Linux、Windows系统的交叉编译;配合Agent能够实现软件在物理机、虚拟机及容器中的自动部署和运维监控,从而形成了能够支撑单体应用软件和微服务架构软件的全生命周期管理平台。同时,本平台的所有技术框架和标准均采用主流开放性组件,可推广与其他框架和平台迁移使用。

参考文献:

[1] 陈文驰.Docker下的持续集成系统的开发应用 [J].现代信息科技,2019,3(13):108-109+113.

[2] 张冬松,胡秀云,邬长安,等.面向DevOps的政务大数据分析可视化系统 [J].计算机技术与发展,2020,30(8):1-7.

[3] BALALAIE A,HEYDARNOORI A,JAMSHIDI P. Microservices Architecture Enables DevOps:Migration to a Cloud-Native Architecture [J].IEEE Software,2016,33(3):42-52.

[4] 辛园园,钮俊,谢志军,等.微服务体系结构实现框架综述 [J].计算机工程与应用,2018,54(19):10-17.

[5] 梁惠惠.对软件开发模式变迁的研究 [J].现代信息科技,2019,3(22):1-4+8.

[6] 姚锡凡,景轩,张剑铭,等.走向新工业革命的智能制造 [J].计算机集成制造系统,2020,26(9):2299-2320.

[7] 荣国平,张贺,邵栋,等.软件过程与管理方法综述 [J].軟件学报,2019,30(1):62-79.

[8] 姜文,刘立康.应用软件项目的迭代开发与测试 [J].计算机技术与发展,2019,29(4):7-12.

[9] MAHBOOB J,COFFMAN J. A Kubernetes CI/CD Pipeline with Asylo as a Trusted Execution Environment Abstraction Framework [C]//2021 IEEE 11th Annual Computing and Communication Workshop and Conference(CCWC).NV:IEEE,2021:529-535.

[10] 丁海斌,崔隽,陆凯.基于Docker的DevOps系统设计与实现 [J].指挥信息系统与技术,2017,8(3):87-92.

作者简介:彭勇(1994—),男,汉族,安徽池州人,助理工程师,硕士,研究方向:云原生技术和平台软件相关;通讯作者:赖兰剑(1972—),男,汉族,江西赣州人,研究员,硕士,研究方向:系统总体与软件体系结构。

收稿日期:2022-09-29