耿泉峰 李曦 葛维
摘 要: 文章简述了DevOps概念、基于DevOps的软件开发流程,并以D平台为例对开发流程的每一步给出了示例。DevOps本质上是将IT开发与运维合并,借助强大的管理工具,引入容器化技术使当前系统环境部署过程由IAAS转向PAAS,用以规范系统间调用关系,并基于PAAS基础之上整改配置项及数据,使其与系统服务分离,实现灵活配置,快速实施。DevOps是软件开发管理未来的发展趋势。
关键词: DevOps开发与运维;DevOps软件开发流程
中图分类号: TP391. 41 文献标识码: B DOI:10.3969/j.issn.1003-6970.2019.01.020
【Abstract】: This paper briefly introduces the concept of DevOps and the software development process based on DevOps, and gives an example of each step of the development process with the D platform as an example. DevOps is essentially a combination of IT development and maintenance. With the help of powerful management tools and container technology, the current system environment deployment process is changed from IAAS to PAAS to standardize inter-system call relations. Based on PAAS, the configuration items and data are adjusted to separate them from system services, achieve flexible configuration and fast implementation. Shi. DevOps is the future trend of software development management.
【Key words】: DevOps development; Operation and maintenance DevOps software development process
0 引言
DevOps(Development和Operations的组合词)是一套完整的面向IT运维的工作流,[1]以IT自动化以及持续集成(CI)、持续部署(CD)为基础,来优化程式开发、测试、系统运维等所有环节。
它重视“软件开发人员”和“IT运维人员”间的协作。基于自动的持续的软件交付流程,使编译,打包,发布,测试等行为能够更高效,更稳定。
敏捷迭代的概念愈发明显,为支持敏捷二字,传统的软件发布模式已经感到乏力,因此DevOps的概念应运而生。图1为DevOps的概念图。
DevOps串联的是技术与人的问题。它包含许多技术方案,比如像持续集成这类概念已深入人心,持续集成要做好,不但需要持续集成服务器及配套的自动化集成和测试程序,还需要与版本控制紧密结合。除此之外,还需要注重各岗位之间协作的关系。把开发与运维相融合,这是很重要的思维转变。
DevOps最主要的优势是可以持续的高效的进行交付,这也正是这个概念兴起的原因。使用DevOps的高效IT公司平均每年可以完成1460次部署。与其他未使用DevOps的IT公司相比,前者的部署频率为后者的200倍,前者投产速度比后者快2555倍,前者故障恢复速度比后者快24倍。在開发及运维工作分配过程中,后者要多花22%的时间用在为规划好或者重复工作上,而前者却可以多花29%的时间用在其他类型工作上面。可以看出利用Devops不紧提高了产品产出效率,也提高了员工的工作质量。
DevOps还有一个优势就是可以使每一个员工都理解和参与整体的产品生产过程,提高了员工的满足和成就感,使员工产出更为高效。
可能你会认为快速部署和提高投产质量是自相矛盾的。其实不然,快速部署可以使投产过程中的问题今早暴露,产品可以更快交付,更快得到用户反馈,从而更快的进行响应优化。“小步快跑”是DevOps的形式,每次集成带来的变化是比较小的,出现问题偏差较小,修复优化也相对容易。
DevOps是开发人员,运维人员和质量人员之间沟通协作的“桥梁”。将传统产品发布模式及运维模式进行改变,提高效率,降低成本。
DevOps目前处于急速增长状态,在大型企业中尤为明显,经过调查,DevOps在企业中的接受度大幅提高。%74的受访者接受并认可了DevOps。目前,88%的大型企业开始接受并使用DevOps,中小型企业的使用占比也达到了75%。
目前采用DevOps的公司有很多,比如:Walmart、Sony、Adobe、Amazon、Apple、Facebook、LinkedIn、Airbnb、Ebay、Etsy、NASA、Starbucks、Netflix、Target,等。
大型企业正在自下而上接受DevOps,其中业务部门(35%)以及项目和团队(32%)已经实施DevOps。不过,只有22%的大企业在整个公司范围内使用了DevOps[2]。
实用工具方面,DevOps工具的用量大幅。Puppet和Chef是最常用的DevOps工具,使用率均为35%。Docker增长量也非常亏,使用率翻倍。Ansible的用量也显著增加,使用率从15%增长至31%。
1 DevOps流程
DevOps的流程主要划分为以下几个部分:持续的管理计划,持续的集成与测试,持续的交付于部署,持续的监控与运维,持续的分析与计划[3]。
DevOps流程中涉及的角色为:产品业务人员,开发人员,测试人员,运维人员,项目管理人员(Scrum Master)
1.1 持续的管理与计划
业务产品人员制定功能并于开发,测试与运维人员一起制定产品交付计划[4]。每一个角色根据自身工作内容做出建议。项目管理人员在这个阶段制定进度,并在流程每一个节点进行状态跟踪。整体计划及状态应该在项目管理平台(比如JIRA)中对所有人为可见并实时更新状态。
1.2 持续集成与测试
开发人员在开发业务功能同时需同时编写针对功能的单元测试代码,运维人员在编译功能代码的同时编译并运行单元测试模块,并针对结果进行判断是否需要修改或向测试人员流转。测试人员依据功能描述和接口文档编写接口测试用例,运维人员在编译部署通过后集成接口测试并反馈测试报告。整个过程的状态应该是对所有参与人员可见的。
1.3 持续交付与部署
针对代码开发实施每日构建和集成,可以使用集成工具如jenkins进行定时构建并将构建产物部署至仿真环境,将部署结果告知测试人员进行验证。图3为jenkins定时示例。
1.4 持续的分析与计划
针对项目管理平台(JIRA)的每项工作状态进行分析,发现突破及瓶颈,并针对性的对计划进行变更。加入每天站立会进行整体进度汇总报告并吸收参与人员的建议。
2 DevOps常用工具
以下是以某电子系统的D运维自动化管理平臺(以下简称”D平台”)为例的DevOps常用工具。D平台的DevOps工具中包含了项目管理平台JIRA、开发工具GIT、持续集成与测试、持续交付与部署、持续监控与运维这几个部分。
2.1 项目管理
JIRA[5]是基于JAVA开发的项目缺陷跟踪管理平台,由Atlassian公司开发,JIRA在项目管理系统中功能和稳定性一向比较出色,而且易用性也比较好。同时用户购买JIRA系统的同时,也获得了其源代码,可以做二次开发。JIRA功能强大,界面简洁,配置灵活,可扩展性强。
2.2 开发工具
GIT是一套分布式代码管理系统,可以高效的处理代码版本问题。主要特性表现为远程分支和本地分支的结合使用来解决多功能并行开发的需求。
2.3 持续集成与测试
Maven[6]是管理开发代码间依赖的利器。Maven对开发人员提供了一套完整的生命周期框架。Maven可以集成所有开发过程,包括编译、打包、测试、发布、归档等操作。Maven的原则是约定大于配置,可以让开发、测试、运维人员专注于岗位工作,而不用浪费时间在各节点衔接的约定配置上面。
CsperJS:CsperJS[7]是基于PhantomJS编写的脚本处理和测试工具,提供了完成常见场景的测试方法。D平台使用CasperJS编写平台测试案例,并与JENKINS集成形成自动化测试体系。
Jenkins: Jenkins[8]是基于JAVA开发的持续集成平台,并且已开源,用于解决重复的工作,比如编译、冒烟测试、发布等操作。Jenkins扩展性极强,可以与大部分框架集成,包括Maven, kubernetes, CsperJS等,在大多数企业中被广泛使用。
2.4 持续交付与部署
kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署,规划,更新,维护的一种机制。
传统的应用部署方式是通过插件或脚本来安装应用。这样做的缺点是应用的运行、配置、管理、所有生存周期将与当前操作系统绑定,这样做并不利于应用的升级更新/回滚等操作,当然也可以通过创建虚拟机的方式来实现某些功能,但是虚拟机非常重,并不利于可移植性。
新的方式是通过部署容器方式实现,每个容器之间互相隔离,每个容器有自己的文件系统,容器之间进程不会相互影响,能区分计算资源。相对于虚拟机,容器能快速部署,由于容器与底层设施、机器文件系统解耦的,所以它能在不同云、不同版本操作系统间进行迁移。
容器占用资源少、部署快,每个应用可以被打包成一个容器镜像,每个应用与容器间成一对一关系也使容器有更大优势,使用容器可以在build或release 的阶段,为应用创建容器镜像,因为每个应用不需要与其余的应用堆栈组合,也不依赖于生产环境基础结构,这使得从研发到测试、生产能提供一致环境[9]。类似地,容器比虚机轻量、更“透明”,这更便于监控和管理。图4为kubernetes架构。
2.5 持续监控与运维
Zabbix[10]:Zabbix是基于WEB界面提供分布式系统及网络监视功能的开源框架。
3 DevOps实例
D运维自动化管理平台DevOps开发实例。
3.1 制定计划
由业务产品人员制定D平台本年度的b需求点并添加至JIRA平台。项目管理人员在计划阶段确定大概的需求及完成时间,在JIRA平台中确定Sprint。每个项目团队的成员在Sprint下建立相应的工作任务,使JIRA平台sprint状态中任务情况一目了然。项目管理人员跟踪Sprint及Sprint下任务的分配情况。