系统研发的持续集成与持续交付技术的研究与实现
2021-04-28李正阳
李正阳
【摘 要】系统研发,是IT公司根据自身的业务情况以及用户的相关需求,对业务不断实现和迭代的过程。在这个过程中,代码集成与交付方式影响了整个团队的工作进度和效率,优秀的持续集成与持续交付的相关技术可以使开发人员实现自动化管理,将精力集中到功能实现上,更快响应市场变化。论文通过调研持续集成与持续交付的相关技术,结合时下流行的DevOps概念及容器技术,提出一种典型的实现方案,为系统研发效率的提升提供借鉴和参考。
【Abstract】System research and development is a process in which IT companies constantly realize and iterate the business according to their own business situation and the relevant needs of users. In this process, the way of code integration and delivery affects the work schedule and efficiency of the entire team. Excellent technologies related to continuous integration and continuous delivery enable developers to automate management, focus on functional realization, and respond to market changes more quickly. By investigating the technology related to continuous integration and continuous delivery, combining the current popular DevOps concept and container technology, the paper proposes a typical realization scheme to provide a reference for the improvement of system research and development efficiency.
【關键词】系统研发;持续集成;持续交付;DevOps;容器
【Keywords】system research and development; continuous integration; continuous delivery; DevOps; container
【中图分类号】TP311.5 【文献标志码】A 【文章编号】1673-1069(2021)03-0177-04
1 引言
近年来,互联网、IT行业蓬勃发展,极大地改变了中国人民的生活方式。中国的互联网,经历了三个时代,包括门户时代、搜索社交时代,以及目前的大互联网时代,可以说,每一个时代的产生或发展都对中国互联网的历史留下了深深的足迹,推动了中国互联网不断实现创新与发展。
在目前的大互联网时代,IT公司如雨后春笋般不断涌入各行各业,对人们衣、食、住、行的传统模式不断进行创新和发展,而细分到每一个领域、每一个产品、每一个软件、每一个功能,背后都是一个个IT团队进行的系统研发、功能研发,为用户造就的基于互联网模式的技术革新和功能革新。对于IT团队来说,一个产品从无到有的过程中,在各个方面、各个环节都需要不断精进,从而不断发展,不断增加效益。
对于系统研发来说,项目集成和部署作为系统研发周期中重要的组成部分,得到了业界的广泛关注。业界领导者认为,持续集成与持续交付对于提升系统研发的效率尤为重要,因为企业渴望缩短产品上市时间。持续集成和持续交付对于产品的质量有着改善和提升的作用,同时,也可以在一定程度上降低项目的时间成本以及空间成本,对于企业来讲,可以使得企业在日益激烈的市场竞争中得到优势,在为用户不断提供优质服务的同时得到快速发展。
因此,本文基于系统研发环节中的痛点之一,即项目集成、部署与交付,对持续集成与持续交付相关内容进行介绍,并结合时下流行的DevOps概念及容器技术,探索目前行业内相关的技术,并给出一种典型的实现方案,为系统研发效率的提升提供借鉴和参考。
2 DevOps与持续集成持续交付
2.1 DevOps
在介绍系统研发的持续集成与持续交付之前,需要先引入DevOps的概念,以便理解持续集成与持续交付在系统研发中所处的位置。DevOps,即开发(Development)和运维(Operations)的组合,指两个工种之间的协同工作(见图1)。在传统的系统研发流程中,开发人员进行软件开发、功能构建、项目迭代,而运维人员负责硬件搭建、软件环境部署以及服务发布。原本流程各自独立,但由于缺乏沟通导致产品和服务交付效率较低,于是DevOps应运而生,其旨在促进软件开发工程师和基础设施运维工程师之间加强合作与沟通,共同组建基于自动化工具的持续集成、持续交付流程,最终达到项目构建、代码测试、软件发布的全流程的自动化,从而使整个系统研发流程能够更加及时、可靠以及稳定。
通过对DevOps概念的解读不难发现,系统从实现功能到上线交付,需要团队中开发人员与运维人员的紧密配合,通过不断的沟通合作,让软件发布更加高效,而系统研发的持续集成与持续交付,需要引入DevOps,通过开发与运维的协同合作,促进提升系统研发整体流程的可靠性与稳定性。
DevOps的实施,可以使开发工程师和运维工程师加强交流与沟通,互相熟悉对方的工作流程、工作模式,进而反思自己工作中的问题和可以改进的内容,反馈到工作中,改善系统研发流程中存在的各种问题,并通过自动化思维的引入、自动化工具的实现,提高系统研发全流程的工作效率。近年来的研究数据表明,已经率先引进并发展DevOps概念的企业,开发工程师与运维工程师在提升协作效能、实现自动化流程后,可以将产品开发的效率提升20%。
要想实现DevOps的核心理念,就需要实现系统研发的持续集成和持续交付。有别于传统的开发模式,DevOps将开发、测试、部署作为一个单元的持续性的集成和交付,可以说持续集成和持续交付,就是DevOps的核心理念。DevOps与传统开发模式的对比如图2所示。
2.2 持续集成与持续交付
首先,对于持续集成与持续交付这两个内容的相关概念进行介绍。
持续集成,英文缩写为CI(Continuous Integration),在系统研发中,集成可以理解为对代码进行阶段性的提交,进行功能的整合和实现,这个过程会伴随着一些未知的问题和错误。而持续集成是一种系统研发的迭代,团队中的开发人员通过一次又一次地将代码上传到代码仓库,进行集成测试和功能验证,从而实现项目与产品的迭代,实现代码零库存积压,不断地改善和解决问题,且每次提交都能通过自动化测试进行验证,从而使问题尽早暴露和解决。
持续交付,英文缩写为CD(Continuous Delivery),持续交付对于持续集成的概念来说是一种补充以及扩展,主要思想就是在自动化测试通过后,将软件及服务部署更新到产品环境,即持续交付的本质,就是为用户及时地提供每个构建成功的软件、应用及服务。
其次,综合上述内容可以看出,DevOps与CI/CD紧密相关,我们可以认为DevOps是理论,CI/CD是实践,对于DevOps的概念来讲,要实现开发与运维全流程的一体化,是需要实现CI/CD,通过自动化工具来驱动整个流程,最终实现流程自动化(见图3)。
通过持续集成和持续交付技术的实现,可以真正实现代码的零库存管理,代码越早推到线上,用户就能越早用到,就可以提供更大的商业价值。反之,如果代码不断积压,那么,项目及服务就会更少地得到市场的检验,同时,代码积压会导致一个很严重的问题,即代码间交叉感染,随之而来的是管理成本会越来越高。可以说持续集成和持续交付技术对于如今竞争压力越来越大的IT企业至关重要。
3 开源容器引擎Docker
在介绍CI/CD的具体实现流程之前,需要介绍虚拟化家族的一个重要工具——Docker,其作为实现DevOps最合适的工具之一,也是近年来非常流行的技术概念
3.1 Docker技术概念
Docker作为一个近年来大家早已耳熟能详的技术概念,因此,无须过多解释其技术内容,对于DevOps以及系统研发的持续集成与持续交付来说,Docker可以作为所有服务的载体,在资源利用、服务隔离、启动效率等方面提供强有力的技术支撑。
Docker作为一个虚拟环境的容器,可以将开发人员的代码、运行环境、配置文件共同打包并发布,无缝衔接持续集成持续交付的思路,其多平台可移植性、沙箱机制对于开发工程师及运维人员来讲可以说非常友好。
3.2 Docker主要優势
通过相关技术概念,可以总结出Docker具有以下几个方面的优势:
资源利用:Docker与VMware等传统虚拟化软件不同,其运行于操作系统层之上,对资源的弹性利用,内存使用及存储使用的优化,使得其在资源利用方面具有得天独厚的优势。
启动快速:Docker容器,其优点之一,即直接在宿主内核层运行,所以不需要启动整个操作系统,所以可以达到秒级,甚至毫秒级的容器启动能力,可以很好地减少开发、测试、部署的时间,提高团队的工作效率。
持续集成:上文提到其沙箱机制、容器打包机制与持续集成持续交付非常契合。
3.3 Docker与持续集成持续交付
上文介绍了Docker的一些基础概念和优势,下文对Docker在系统研发的持续集成与持续交付中的作用和地位进行介绍。
如图4所示,除去下文介绍的Git、Jenkins等内容,Docker在整个持续集成与持续交付中处于OS层和应用层之间,向下兼容操作系统获取系统资源,向上为系统研发的前中后台提供各项服务,其中,Docker Engine负责服务的承载和发布,Docker Registry负责本地镜像的管理与复用。整个Docker位于系统研发的持续集成与持续交付的底层,提供灵活快速、伸缩性强、可移植性强的服务支撑。
4 基于容器的持续集成与持续交付技术的实现
下文主要介绍系统研发的持续集成与持续交付中一种基于Docker+GitLab+Jenkins全流程的实现路径,体现CI/CD的实现思路。
4.1 CI/CD全流程模型
结合具体的工作实践,下文介绍了一个典型的基于Docker等开源工具实现的系统研发的持续集成与持续交付的流程模型。
如图5所示,流程从左上开始,开发人员每次在本地对项目进行优化更新后,将代码传至远程的代码仓库,通过事先部署完成的监控系统监听代码仓库的变化,得到变化通知后,首先通知源码获取系统获取最新的程序源码,然后程序打包系统对最新的源码进行打包形成可执行文件,最后通过部署系统部署到远程服务器上进行实现。
部署成功后,通过微信接口实现的小程序,用微信推送给开发人员,流程返回左上,实现业务闭环。全程从开发人员一键提交代码开始到业务部署完成并收到通知,实现脱离人工的完全的自动化。
4.2 CI/CD工具
4.2.1 GitLab
上文介绍的代码仓库,可以通过基于Git实现的用于仓库管理系统的开源项目GitLab实现。GitLab是一种代码管理的服务,使用Git作为其核心技术,具有Web服务的前端界面,并通过管理界面为程序员及管理者提供代码仓库的创建、访问、上传、更新服务。与GitHub相比,GitLab是本地的私有代码仓库,比起GitHub在CI/CD的网络流程中更加快速,同时,同样具有浏览代码、注释等功能,所以在CI/CD中更受欢迎。
4.2.2 Jenkins
上文介绍的集监控系统、源码获取系统、程序打包系统、部署系统,通过Jenkins这个系统研发的持续集成与持续交付的核心组件可以集成实现。Jenkins是一个非常流行的且功能异常强大的用于持续集成持续交付的可视化Web工具,可以说是构建CI/CD思路的最核心功能的工具,其开发语言兼容性、代码管理工具的兼容性都非常好,具有丰富的插件和开放的接口开发机制。
总体来说,Jenkins就是CI/CD流程中的“心脏”,可以接收开发者提供的任何输入,并为运维人员提供方便可用的输出,从而支撑项目组及开发团队在系统研发中的持续部署、持续交付流程。
4.3 CI/CD实际工作流程
CI/CD的实际工作流程如下:
IT程序员进行代码的版本更新,通过绑定Git的开发工具,将代码更新提交到远程GitLab仓库中。通过Git的账号与密码的認证,以及对应的代码仓库权限的判断,同时,满足条件之后可以将更新后的代码上传到指定项目的指定分支。
代码仓库接收到代码的更新,会出现update时间的变化,以及在history中对应小版本tag标签,在GitLab中也可以进行分支的控制,如合并、回滚等操作。代码更新后,等待Jenkins的SCM,即Source Code Management轮询到代码变化并拉取代码。
通过Source Code Management设定轮询时间,包括定时轮询和循环轮询。Jenkins的SCM轮询到代码仓库的变化,开始拉取远程代码,并进行构建。
Jenkins也是系统研发的持续集成与持续交付流程的绝对核心,负责兼顾代码变更的监控、代码的打包、代码的传输等功能。
代码构建结束后,由Jenkins推送至服务器进行上线,服务可以通过Docker进行构建,从而使得各个服务彼此独立、互不影响。此外,还可以在Jenkins上通过绑定微信、邮件等手段对构建结果进行实时推送。
全流程从程序员提交代码更新开始,历经GitLab、Jenkins、Docker三大开源工具,最终成功部署,代码更新迭代,并将通知推送到微信或邮箱,完成系统研发的持续集成与持续交付,实现了DevOps的基本思想。
5 结语
本文通过介绍DevOps、持续集成与持续交付、容器等概念与技术,阐明了系统研发中持续集成与持续交付的重要意义,并在文中介绍了一种典型的基于容器的系统研发的持续集成与持续交付的实现方法。
【参考文献】
【1】王玉梅.持续集成理论在软件开发中的应用[J].数字通信世界,2020,1(1):222.
【2】王冶青.DevOps在企业信息化战略中的应用分析[J].信息系统工程,2020,10(1):113-114.
【3】刘晶晶,朱寅非.基于Docker引擎虚拟化技术的应用研究[J].软件,2020,10(1):1-4.