唐松强 蔡永健 唐海涛 朱夏良 何栓康
摘 要: 随着信息技术的飞速发展和软件研发框架的不断升级,传统研发中开发、运维、QA之间的沟通协作愈加困难。DevOps作为新软件研发管理理念,其通过促进开发、运维、QA协同工作的模式,得到了越来越多IT企业的关注和使用。文章基于DevOps理念,对其在需求管理、研发过程、运维管理三个阶段的技术路线进行研究,并通过JIRA、Jenkins、Zabbix等工具将DevOps系统落地。在具体项目实践中,保障了项目研发进度,提升了系统健壮性,实现公司产品研发的提质增效。
关键词: DevOps; 持续交付; 持续监控; 自动化部署; 研发管理
中图分类号:TP399 文献标识码:A 文章编号:1006-8228(2021)04-13-05
Abstract: With the rapid development of information technology and the continuous upgrading of software R&D frameworks, the communication and cooperation between development, operation and maintenance and QA in traditional R&D becomes more and more difficult. DevOps, as a new concept for software R&D management, its mode of promoting development, operation and QA collaborative work has been paid attention to and been used by more and more IT companies. Based on the concept of DevOps, this paper studies the technical route of DevOps in the three stages of demand management, R&D process and operation and maintenance management, and put it into effect by using JIRA, Jenkins, ZABBIX and other tools, which ensures the progress of project research and development, improves the robustness of the system, and improves the R&D quality and efficiency of company's product in the specific project practice.
Key words: DevOps; continuous delivery; continuous monitoring; automated deployment; research and development management
0 引言
为提高企业产品快速交付能力,软件行业提出DevOps的理念。DevOps[1]通过促进开发、运维和QA之间的沟通、协作和整合,实现软件产品持续部署和交付,帮助企业提质增效。中国电建集团华东勘测设计研究院有限公司近几年不断地对DevOps进行探索优化,目前已有大量项目使用DevOps进行软件研发,为公司的持续发展提供了强有力的支撑。
1 DevOps簡介
1.1 DevOps概念
DevOps是一个体系,是一组过程、方法与系统的统称,用于促进开发、技术运营和质量保障部门之间的沟通、协作与整合,其示意图如图1所示。
1.2 DevOps优势
⑴ 加强部门合作
DevOps强调开发、运维的沟通合作,通过自动化的流程来使得构建、测试、发布软件能够更加地快捷、频繁和可靠。
⑵ 缩短产品上市时间
DevOps可以在产品规划到实现的整个过程中具有更好的质量保障,确保产品和公司业务目标的一致性,从而缩短产品上市周期。
⑶ 产品迭代时间更短
DevOps使用持续部署和交付[2]的方式进行软件交付,可尽早地识别并消除瓶颈,从而保障企业实现每天多次交付而不是每年多次发布软件版本。
⑷ 提升自动化能力
DevOps具有明确定义的工作流,将大量重复性任务通过自动化的方式实现,减少了人为错误的几率,这使得产品的安全性和合规性要求更加容易得到保障。
⑸ 减少资源浪费
DevOps持续集成和交付的方式,让企业可以更有效地利用资源,并削减企业成本。
2 DevOps技术路线
2.1 研发流程技术路线
研发流程技术路线,主要通过JIRA[3]实现对需求和研发任务的可视化管理。例如对于同一个需求而言,其研发测试任务之间普遍存在相互依赖关系,采用父子任务以及任务状态的强校验形式对此类任务进行管理,在前期需求分析时创建任务,若子任务没有完成,作为父任务的需求工单将无法提交发布,从而避免因模块间依赖关系而导致的发布质量问题。
对于不同项目的不同情况,JIRA的工作流和界面制定都是灵活的。项目经理可以在JIRA中定制出适合本公司或者本项目的流程,各实施人也可以在切身使用过程中提出优化建议,实现流程的不断改进。
2.2 自动化部署技术路线
基于Jenkins+GitLab+Docker+Harbor+SonarQube+Kubernetes[4]實现软件自动化集成和部署,如图2所示。
在该技术路线下,Java开发工程师在完成某个功能编码后,将代码推送到源代码仓库GitLab,通过Webhook触发Jenkins自动化地拉取最新代码,然后触发SonarQube静态代码扫描[5],扫描通过后执行相应的编译命令,比如java的maven命令或者是python的pip命令下载依赖后编译打包,通过Dockerfile封装成Docker镜像并上传到Harbor镜像仓库,最后执行脚本自动更新到开发环境的Kubernetes集群。
2.3 自动化运维技术路线
基于Zabbix[6]+Prometheus[7]+Email的方式实现服务的监控和反馈,如图3所示。基于Zabbix集群实现服务器集群的CPU负载、内存占用、磁盘I/O、网络状态、端口、日志等监控,并预设好阈值,当资源使用达到了临界值时会通过Email发送告警邮件,通知相关责任人及时处理问题。基于Prometheus实现对服务的监控,当系统服务出现或者即将出现故障时,通过Email将告警信息反馈给管理员,实现对问题的快速处理,避免对业务造成影响。当问题发生后需要对问题进行调查和处理时,通过对监控历史数据进行分析,可以找到并解决问题的根源。结合Grafana可直观地显示系统运行状态、资源使用情况,以及服务运行状态等信息。
3 DevOps实践
3.1 项目描述
工程数据中心软件开发项目的目标是围绕工程数据管理标准体系,实现工程数据全生命周期的信息化管理,并能基于系统中保存的海量数据开展工程数据的挖掘分析工作,提炼数据价值,用数据驱动项目建设和公司业务发展,从一个全新维度为工程企业决策提供支撑。
该项目使用SpringCloud微服务框架[6]编写,技术架构分为5层,如图4所示,分别是:
⑴ 基础设施层,该层以虚拟化、云计算、容器平台等技术提供按需获取、按需调度的计算、存储及网络资源;
⑵ 数据层,该层主要包括Redis分布式缓存、Minio等对象存储、Mysql关系型数据库、ArangoDB图数据库以及PostgreSQL+PostGIS空间数据库;
⑶ 服务层,该层基于微服务架构,根据功能需要设计分为多个微服务并应用不同类型的数据库,利用Nacos进行统一的服务注册和发现;
⑷ 网关层,用APIGateway进行通信的管理,将内部或外部请求分发至对应服务;
⑸ 应用层,提供标准的RESTful API,支持桌面应用、浏览器等多终端。
3.2 研发流程管理实践
工程数据中心项目创新性高,理论体系未完善,导致局部需求定义欠佳,在执行过程中,需求不断变化,有时还会添加额外的需求。项目组借助于JIRA实现了需求和研发任务的可视化管理,如图5所示。得益于Sprint,使得项目团队可以在短周期内将离散和潜在可交付的应用程序进行冲刺上线,可及时解决项目临时的或紧急的需求。
3.3 自动化部署实践
借助于Jenkins+GitLab+Docker+Harbor+SonarQube[7]+Kubernetes的技术路线,工程数据中心项目组实现了自动化部署。开发人员在编码结束后将最新代码推送到部署的分支,通过Gitlab中的webhook触发任务,将最新commit的代码推送到Jenkins中。Jenkins首先会对最近commit的源代码进行静态扫描,扫描结果如图6所示。扫描没有问题之后调用预先设置好的脚本编译打包,根据Dockerfile封装生成Docker镜像。最后调用远程脚本部署到Kubernetes平台。
3.4 自动化运维实践
工程数据中心上线运行后,由于用户数量增涨、文件数据量增加、代码迭代频率增快等原因,系统时常出现各种报错。项目组借助Zabbix集群的Agent完美地解决了多服务器集群底层运维监控的问题,实现磁盘、CPU、内存的实时使用监控,当到达预设的临界值之后会触发告警,其在Web页面的监视图如图7所示。
另外,工程数据中心采用微服务架构编写,各微服务的健康检查以及网络连通性都需要监控,借助于Prometheus和Grafana可以实现对服务、数据库的监控和告警,其可视化页面如图8所示,Email告警通知如图9所示。
4 结束语
本文重点介绍了DevOps概念、优势以及实现的技术路线,最后结合工程数据中心项目描述DevOps落地应用情况。可以看到,DevOps不仅极大的提高了需求管理的准确性,减少了开发和运维的沟通成本,提升了软件系统的健壮性,实现了研发过程管理提质增效,最终从多个方面完善了公司的研发体系。
参考文献(References):
[1] 荣国平,白晓颖,岳涛.面向DevOps的软件工程新技术专题前言[J].软件学报,2019.10.
[2] 张文林.持续交付及其在大型项目中的应用[J].软件导刊,2017.10.
[3] 王敏,贾百强,李翔,李小军.基于JIRA的全生命周期软件开发管理平台[J].上海船舶运输科学研究所学报,2017.2.
[4] 蔡永健,路云菲,邬远祥,唐海涛.基于Jenkins和Docker容器技术在数字化电站项目自动化部署的研究和应用[J].计算机时代,2020.2.
[5] 付金莹,蒋云,王金伦,申宗杰.基于静态分析的应用代码质量管理体系研究及应用[J].中国新通信,2013.21.
[6] 石宇婷.基于Zabbix平台的私有云监控系统设计与实现[D].东华大学,2017.
[7] 马永,吴跃,何李囡,程航.基于Prometheus的基础软硬件全链路监控设计和实现[J].电子技术与软件工程,2020.1.