[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

CN113434194B - 持续集成与交付系统、方法、电子设备及存储介质 - Google Patents

持续集成与交付系统、方法、电子设备及存储介质 Download PDF

Info

Publication number
CN113434194B
CN113434194B CN202110529679.3A CN202110529679A CN113434194B CN 113434194 B CN113434194 B CN 113434194B CN 202110529679 A CN202110529679 A CN 202110529679A CN 113434194 B CN113434194 B CN 113434194B
Authority
CN
China
Prior art keywords
module
sub
project
git
mirror image
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202110529679.3A
Other languages
English (en)
Other versions
CN113434194A (zh
Inventor
任红强
唐阳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Wuhan Kuangshi Jinzhi Technology Co ltd
Beijing Megvii Technology Co Ltd
Original Assignee
Wuhan Kuangshi Jinzhi Technology Co ltd
Beijing Megvii Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Wuhan Kuangshi Jinzhi Technology Co ltd, Beijing Megvii Technology Co Ltd filed Critical Wuhan Kuangshi Jinzhi Technology Co ltd
Priority to CN202110529679.3A priority Critical patent/CN113434194B/zh
Publication of CN113434194A publication Critical patent/CN113434194A/zh
Application granted granted Critical
Publication of CN113434194B publication Critical patent/CN113434194B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/73Program documentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • G06F8/751Code clone detection

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Library & Information Science (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开一种持续集成与交付系统、方法、电子设备及存储介质,包括:管理后台服务模块和执行器服务模块,管理后台服务模块包括工程管理和工程发布子模块,执行器服务模块包括代码克隆、编译、镜像构建和聚合打包子模块;工程管理子模块接收用户输入的项目管理操作;代码克隆子模块在项目管理操作用于新增或编辑git项目时克隆git项目的代码;编译子模块对该代码进行编译得到编译文件;镜像构建子模块对编译文件进行镜像构建得到镜像文件;工程发布子模块接收用户输入的发布操作;聚合打包子模块响应于发布操作,将目标工程的所有git项目对应的镜像文件聚合打包为tar包,基于tar包生成交付压缩包并发送至远程平台供其他用户下载。

Description

持续集成与交付系统、方法、电子设备及存储介质
技术领域
本发明涉及软件开发技术领域,特别涉及一种持续集成与交付系统、方法、电子设备及存储介质。
背景技术
随着微服务架构与容器虚拟化技术的发展,越来越多的公司开始使用持续集成与开发系统解决软件频繁发布带来的质量问题。目前,现有的持续集成与交付系统包括:基于gitlab的CI(Continuous Integration,持续集成)/CD(Continuous Delivery,持续支付)系统、开源的提供友好操作界面的jenkins平台、基于jenkins内核做拓展的可持续集成与交付平台,以及企业自身定制的可持续集成与交付平台等等。
然而,现有的这些可持续集成与交付系统,在应用到特殊的场景时,例如基于多git项目管理多种不同语言类型git项目编译、镜像构建,离线混合部署tar包发布等场景时,开发效率较低。以基于gitlab的CI/CD系统为例,gitlab上集成的CI系统,每接入一个git项目,需要各个接入方,编写自定义的.gitlab-ci.yml,实现复杂的子模块构建时,需要在yml里写复杂的脚本,导致开发效率较低。
发明内容
本发明实施例提供一种持续集成与交付系统、方法、电子设备及存储介质,以解决现有技术中可持续集成与交付系统存在的开发效率较低的技术问题。
根据本发明的第一方面,公开了一种持续集成与交付系统,所述系统包括:管理后台服务模块和执行器服务模块,其中,所述管理后台服务模块包括:工程管理子模块和工程发布子模块,所述执行器服务模块包括:代码克隆子模块、编译子模块、镜像构建子模块和聚合打包子模块;
所述工程管理子模块,用于接收用户输入的项目管理操作,其中,所述项目管理操作用于新增、删除、编辑或查找目标工程的git项目,所述目标工程对应多个git项目;
所述代码克隆子模块,用于在所述项目管理操作用于新增或编辑git项目的情况下,从代码托管平台克隆所述git项目的代码,并提供给所述编译子模块;
所述编译子模块,用于对所述git项目的代码进行编译得到编译文件,并提供给所述镜像构建子模块;
所述镜像构建子模块,用于对所述编译文件进行镜像构建得到镜像文件,并提供给聚合打包子模块;
所述工程发布子模块,用于接收用户输入的发布操作,其中,所述发布操作用于指示聚合打包子模块基于所述镜像文件生成所述目标工程对应的交付压缩包,并将所述交付压缩包发送至远程平台以供其他用户下载;
所述聚合打包子模块,用于响应于所述发布操作,将所述目标工程的所有git项目对应的镜像文件聚合打包为tar包,基于所述tar包生成所述交付压缩包,将所述交付压缩包发送至所述远程平台。
可选地,作为一个实施例,所述系统运行于宿主机的docker环境中;
所述镜像构建子模块,具体用于从预设数据库中获取所述git项目对应的dockerfile文件,基于所述dockerfile文件构建所述编译文件对应的镜像文件。
可选地,作为一个实施例,所述git项目包括多个项目子模块,每个项目子模块分别对应一个dockerfile文件,每个dockerfile文件中记录有label属性的name值,所述label属性用于控制生成的镜像名,不同dockerfile文件中记录的label属性的name值不同;
所述编译子模块,具体用于对每个项目子模块的代码进行编译,得到各项目子模块对应的编译文件,并提供给所述镜像构建子模块;
所述镜像构建子模块,具体用于将各项目子模块对应的编译文件递归查找出,转移至根目录,从预设数据库中获取所述各项目子模块对应的dockerfile文件,基于所述各项目子模块对应的dockerfile文件,对各项目子模块对应的编译文件进行镜像构建,得到所述各项目子模块对应的镜像文件;
其中,每个项目子模块对应的镜像文件的名称为项目子模块对应的dockerfile文件中label属性的name值。
可选地,作为一个实施例,所述执行器服务模块的至少一个子模块中部署有多个实例,每个实例中包括多个线程。
可选地,作为一个实施例,所述工程管理子模块,还用于:
在接收到所述项目管理操作之后,接收用户输入的git项目配置信息,并将所述git项目配置信息发送至预设数据库进行存储;
其中,所述git项目配置信息包括:git项目名称、git项目源码地址、git项目所属的编译语言、git项目分支和dockerfile文件的访问路径。
可选地,作为一个实施例,所述管理后台服务模块还包括:构建信息展示子模块;其中,
所述构建信息展示子模块,用于展示所述目标工程中git项目的构建记录和构建状态信息。
根据本发明的第二方面,公开了一种持续集成与交付方法,所述方法基于第一方面中的持续集成与交付系统,所述方法包括:
工程管理子模块接收用户输入的项目管理操作,其中,所述项目管理操作用于新增、删除、编辑或查找目标工程的git项目,所述目标工程对应多个git项目;
代码克隆子模块在所述项目管理操作用于新增或编辑git项目的情况下,从代码托管平台克隆所述git项目的代码,并提供给编译子模块;
所述编译子模块对所述git项目的代码进行编译得到编译文件,并提供给镜像构建子模块;
所述镜像构建子模块对所述编译文件进行镜像构建得到镜像文件,并提供给聚合打包子模块;
工程发布子模块接收用户输入的发布操作,其中,所述发布操作用于指示聚合打包子模块基于所述镜像文件生成所述目标工程对应的交付压缩包,并将所述交付压缩包发送至远程平台以供其他用户下载;
所述聚合打包子模块响应于所述发布操作,将所述目标工程的所有git项目对应的镜像文件聚合打包为tar包,基于所述tar包生成所述交付压缩包,将所述交付压缩包发送至所述远程平台。
可选地,作为一个实施例,所述系统运行于宿主机的docker环境中;
所述镜像构建子模块从预设数据库中获取所述git项目对应的dockerfile文件,基于所述dockerfile文件构建所述编译文件对应的镜像文件。
可选地,作为一个实施例,所述git项目包括多个项目子模块,每个项目子模块分别对应一个dockerfile文件,每个dockerfile文件中记录有label属性的name值,所述label属性用于控制生成的镜像名,不同dockerfile文件中记录的label属性的name值不同;
所述编译子模块对每个项目子模块的代码进行编译,得到各项目子模块对应的编译文件,并提供给所述镜像构建子模块;
所述镜像构建子模块将各项目子模块对应的编译文件递归查找出,转移至根目录,从预设数据库中获取所述各项目子模块对应的dockerfile文件,基于所述各项目子模块对应的dockerfile文件,对各项目子模块对应的编译文件进行镜像构建,得到所述各项目子模块对应的镜像文件;
其中,每个项目子模块对应的镜像文件的名称为项目子模块对应的dockerfile文件中label属性的name值。
可选地,作为一个实施例,所述执行器服务模块的至少一个子模块中部署有多个实例,每个实例中包括多个线程。
可选地,作为一个实施例,所述工程管理子模块在接收到所述项目管理操作之后,接收用户输入的git项目配置信息,并将所述git项目配置信息发送至预设数据库进行存储;
其中,所述git项目配置信息包括:git项目名称、git项目源码地址、git项目所属的编译语言、git项目分支和dockerfile文件的访问路径。
可选地,作为一个实施例,所述管理后台服务模块还包括:构建信息展示子模块;所述方法还包括:
所述构建信息展示子模块展示所述目标工程中git项目的构建记录和构建状态信息。
根据本发明的第三方面,公开了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的程序,所述程序被所述处理器执行时实现如第一方面中持续集成与交付方法的步骤。
根据本发明的第四方面,公开了一种计算机可读存储介质,所述计算机可读存储介质上存储有程序,所述程序被所述处理器执行时实现如第一方面中持续集成与交付方法的步骤。
本发明实施例中,持续集成与交付系统中的管理后台服务模块可以提供面向用户侧使用的git项目增删、更新和查看服务,执行器服务模块可以提供代码克隆、编译、构建镜像和混合tar包交付的服务,通过管理后台服务模块和执行器服务模块的相互配合,可以实现对工程的多个git项目进行联合管理。与现有技术相比,本发明实施例中,可以充分抽象业务场景,遵循简单高效的原则,将代码集成、构建、交付的核心逻辑依托给系统,无需编写任何复杂脚本文件,操作简单,开发效率较高。此外,还可以支持多种不同编程语言git项目的构建,满足不同编程语言类型开发人员的需求。
附图说明
图1是本发明的一个实施例的持续集成与交付系统的结构框图;
图2是本发明的一个实施例的持续集成与交付系统的面向用户的前端操作界面的示例图;
图3是本发明的另一个实施例的持续集成与交付系统的结构框图;
图4是本发明的一个实施例的挂载式实现docker in docker的示例图;
图5是本发明的一个实施例的多项目子模块镜像构建流程的示例图;
图6是本发明的一个实施例的持续集成与交付场景的示例图;
图7是本发明的一个实施例的持续集成与交付方法的流程图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
目前,现有的可持续集成与交付系统包括基于gitlab的CI/CD系统、开源的提供友好操作界面的jenkins平台,各类基于jenkins内核做拓展的可持续集成交付平台,企业自身定制的可持续集成交付平台等等,以上所列的这些可持续集成交付系统,在应用到特殊的场景时,如基于多git项目管理,多种不同语言类型git项目编译、镜像构建,离线混合部署tar包发布等场景,开发效率较低,无法切实满足实际的开发需要。
为解决上述技术问题,本发明实施例提供了一种持续集成与交付系统、方法、电子设备及存储介质。
为了便于理解,下面首先对本发明实施例中涉及到的一些概念进行介绍。
编译指的是将源代码处理为机器可识别运行的机器码的过程。
镜像构建指的是将源程序包装和设置运行环境处理为镜像的过程,镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件的所有内容,包括:代码、运行时、库、环境变量和配置文件。
离线混合部署tar包发布指的是可不依赖于环境的服务镜像包及相关业务文件的综合进行压缩、发送到指定平台的过程。
docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windows机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。
dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
接下来对本发明实施例提供的一种持续集成与交付系统进行介绍。
需要说明的是,本发明实施例提供的持续集成与交付系统适应于电子设备,在实际应用中,该电子设备可以服务器,或者也可以为其他类型的设备,本发明实施例对此不作限定。
图1是本发明的一个实施例的持续集成与交付系统的结构框图,如图1所示,持续集成与交付系统100,可以包括:管理后台服务模块110和执行器服务模块120,其中,管理后台服务模块110,可以包括:工程管理子模块111和工程发布子模块112,执行器服务模块120,可以包括:代码克隆子模块121、编译子模块122、镜像构建子模块123和聚合打包子模块124;
工程管理子模块111,用于接收用户输入的项目管理操作,其中,该项目管理操作用于新增、删除、编辑或查找目标工程的git项目,该目标工程对应多个git项目;
代码克隆子模块121,用于在项目管理操作用于新增或编辑git项目的情况下,从代码托管平台克隆git项目的代码,并提供给编译子模块122;
编译子模块122,用于对git项目的代码进行编译得到编译文件,并提供给镜像构建子模块123;
镜像构建子模块123,用于对编译文件进行镜像构建得到镜像文件,并提供给聚合打包子模块124;
工程发布子模块112,用于接收用户输入的发布操作,其中,发布操作用于指示聚合打包子模块124基于镜像文件生成目标工程对应的交付压缩包,并将交付压缩包发送至远程平台以供其他用户下载;
聚合打包子模块124,用于响应于发布操作,将目标工程的所有git项目对应的镜像文件聚合打包为tar包,基于该tar包生成交付压缩包,将交付压缩包发送至远程平台。
本发明实施例中,管理后台服务模块是面向用户侧使用的平台,用户通过该平台完成工程各类操作及最终的整体交付。
本发明实施例中,执行器服务模块主要工作是在接收来自管理后台服务模块的流水线任务消息后,执行相应的代码克隆、编译、构建镜像和镜像发布等操作。
本发明实施例中,工程管理子模块主要负责git项目的联合管理,包括:新增、删除、编辑、查找对应git项目,其中,新增、编辑git项目主要体现为配置git项目的基础元数据信息(包括:git项目名称、git项目分支、所属编译语言如java、go、node等),后续执行器服务模块会根据元数据信息执行代码克隆、编译、构建镜像和镜像发布等操作。
本发明实施例中,工程管理子模块可以提供面向用户使用的操作界面,用户通过在该操作界面上进行输入工程相关git项目的配置信息,具体的,
工程管理子模块还用于:在接收到项目管理操作之后,接收用户输入的git项目配置信息,并将git项目配置信息发送至预设数据库进行存储;
其中,git项目配置信息包括:git项目名称、git项目源码地址、git项目所属的编译语言、git项目分支和dockerfile文件的访问路径。
本发明实施例中,用户在前端界面操作新增工程以及新增git项目后,将配置信息存入关系数据库,用户查询工程管理列表时,数据从数据库获取并转换展示给前端界面。
在一个例子中,如图2所示,图2示出了面向用户侧使用的前端操作界面的示例图,目标工程对应两个git项目,分别为A项目和B项目,以新增B项目为例,用户可以在“git项目名称”一栏中输入项目名称,在“git项目源码地址”一栏中输入项目的源码地址,在“编译语言”一栏中输入项目所属的编程语言,在“git项目分支”一栏中输入项目所属的分支,如果系统是基于docker服务实现的,则可以在“dockerfile”一栏中输入项目对应的dockerfile文件的访问路径。
本发明实施例中,工程发布子模块用于发布列表展示、发布配置和发布详情预览,发布是为了将执行器服务模块已制作好的镜像(已push到镜像仓库)聚合打成tar包,外加部署文件和说明文档等混合打成交付压缩包,发送到指定的远程平台,以便现场的项目支持从远程平台下载该交付压缩包,完成相应的部署维护工作。
本发明实施例中,为了便于开发人员及时了解项目的构建情况,如图3所示,管理后台服务模块110还可以包括:构建信息展示子模块113,构建信息展示子模块113,用于展示目标工程中git项目的构建记录和构建状态信息。其中,构建记录展示指的是每个git项目在用户提交相应分支的代码后,就会触发执行器服务模块对该git项目的对应分支执行一次构建操作,所有的构建记录将形成构建列表加以展示,构建状态展示指的是展示git项目的构建状态,例如成功或者失败,同时实时展示该项目构建的日志。
为了解决平台可能面临的性能问题,提升了整个系统接入git项目的能力,且可根据性能需要作横向扩展,本发明实施例中,可以采取分布式部署方案,在执行器服务模块中分布式部署多实例,具体的,执行器服务模块的至少一个子模块中可以部署有多个实例,每个实例中包括多个线程。
在这种情况下,执行器服务模块在接收到来自管理后台服务模块的任务消息时,可以将任务分发给多个实例,每个实例可开启多线程流水线执行代码检测、代码编译、镜像构建、镜像发布等操作。
为了使得应用服务便于管理,典型的如服务部署、维护和扩容等,在本发明提供的一个实施例中,本发明实施例中的持续集成与交付系统可以运行于宿主机的docker环境中;具体的,可以将服务docker化,也就是将服务制作成镜像,然后依托docker服务指令或者相关的docker服务管理平台(例如Docker Swam)来进行对服务的启动、部署、删除、扩容等操作。
相应的,镜像构建子模块,具体用于从预设数据库中获取git项目对应的dockerfile文件,基于dockerfile文件构建编译文件对应的镜像文件。
本发明实施例中,考虑到持续集成与交付系统面临的情况较为特殊,首先其自身将作为docker容器服务运行,与此同时,需要在docker容器服务里使用docker服务指令来运行构建镜像的相关操作(例如,指定语言的项目需要使用docker run指令来运行指定的编译镜像服务来进行代码编译,使用docker build指令打包镜像,使用docker push指令推送至镜像仓库等),这就意味着,需要在docker服务里运行docker服务。
为了实现在docker服务里运行docker服务,首先需要编写用于制作镜像的dockerfile文件,之后需要在宿主机上部署docker服务(也就是安装docker程序),再之后需要在宿主机上部署基础依赖服务,最后将宿主机中的/var/run/docker.sock和/usr/bin/docker文件挂载到持续集成与交付系统,如图4所示,挂载后可共享宿主机的docker服务,执行相应的docker指令。
部署docker服务:在宿主机上部署docker服务之前,需要先确保当前环境是否有docker服务,是否有dockerfile中的基础镜像。如果没有docker服务,执行docker指令时会出错。如果本地镜像仓库没有,则会从中央仓库拉取。同时,构建前需要先编译服务代码,得到xxxx.jar,并与dockerfile文件同级目录,执行docker build-t获取服务镜像。
部署基础依赖服务:不论是管理后台服务模块,还是执行器服务模块,都依赖于mysql服务、hdfs服务、ftp服务,因此需要先启动相关服务,对于mysql服务,需要在启动后初始化相应的表数据。
文件挂载:在启动命令中挂载出docker.sock、docker文件,同时设置好相关的运行时环境变量,挂载使用-v参数,设置环境变量使用-e。
在一个例子中,用于挂载的执行指令为docker run-it-v/var/run/docker.sock:/var/run/docker.sock-v/usr/bin/docker:/usr/bin/docker;
用于设置环境变量的执行指令为:-e MYSQL_ADDRESS=xxx-ex1=x2ampregistry:5000/xxxx:1.0。
可见,本发明实施例中,持续集成与交付系统实现了在容器中运行容器的简易云部署方案(docker in docker),一个编排,依托于docker服务,便可轻松快捷启动整个服务。
目前,在日常开发过程中,尤其是对于大型的Java项目,通常一个git项目会包含多个项目子模块,每个项目子模块编译后均可产生可执行的jar包,这些项目子模块也需要部署成服务,因此各项目子模块自身需要单独打镜像。与此同时,这类大的git项目除了这些与代码相关的业务子模块需要打成镜像外,有时也需要将文档、初始化脚本之类的文件也做成镜像,这就意味着,一个git项目往往可能需要打多个镜像,且各自的镜像名需要有意义,不能重复。
针对一个git项目包括多个项目子模块情况,在本发明提供的一个实施例中,每个项目子模块可以分别对应一个dockerfile文件,每个dockerfile文件中记录有label属性的name值,该label属性用于控制生成的镜像名,不同dockerfile文件中记录的label属性的name值不同;相应的,
编译子模块,具体用于对每个项目子模块的代码进行编译,得到各项目子模块对应的编译文件,并提供给镜像构建子模块;
镜像构建子模块,具体用于将各项目子模块对应的编译文件递归查找出,转移至根目录,从预设数据库中获取各项目子模块对应的dockerfile文件,基于各项目子模块对应的dockerfile文件,对各项目子模块对应的编译文件进行镜像构建,得到各项目子模块对应的镜像文件;其中,每个项目子模块对应的镜像文件的名称为项目子模块对应的dockerfile文件中label属性的name值。
本发明实施例中,根目录为docker的根目录。
在一个例子中,以git项目为java语言编写的项目为例,git项目中包括三个项目子模块,分别为子项目模块1、子项目模块2和子项目模块3,编写子项目模块1对应的dockerfile文件,在该dockerfile文件增加LABEL属性“LABEL name=xxx-module-1”,dockerfile文件的内容示例如下:
FROM alpine:2.1.0
ENV TZ Asia/Shanghai
LABEL name=xxx-module-1
WORKDIR$PRO_PATH
ADD xxx-module-1.jar$PRO_PATH
同理,编写子项目模块2对应的dockerfile文件,在该dockerfile文件增加LABEL属性“LABEL name=xxx-module-2”;编写子项目模块3对应的dockerfile文件,在该dockerfile文件增加LABEL属性“LABEL name=xxx-module-3”。
之后在管理后台服务器的工程管理子模块上添加需要打镜像的dockerfile列表。执行器服务模块拉取git项目的代码,执行编译,得到各项目子模块对应的jar包,如图5所示,将各项目子模块产生的jar包递归查找出,转移至docker的根目录。
执行器服务模块从mysql中读取工程管理子模块中配置的dockerfile列表,解析每个dockerfile文件,获取label属性的name值,在根目录下执行docker build-tamqregistry:5000/xxx-module-1:1.0(获取到的name值)-fxxx/Dockerfile-1(使用的当前dockerfile文件路径)指令,每个dockerfile可添加根目录下自定义想要的jar包,如此便完成了复杂多子模块项目的镜像构建。
为了便于理解,最后结合图6所示的场景图对工程交付包的交付过程进行描述。以一个包含3个git项目的工程为例,为方便描述,简称该3个git项目为A、B、C,核心目标就是获取到这个工程完整的安装部署文件,即工程的交付压缩包,安装部署文件里包含有3个git项目编译、打完镜像后的联合压缩在一起的tar包,另外包含的相关部署文稿。
用户在持续集成与交付系统的管理后台服务模块上通过操作输入git项目A、B、C的配置信息,执行器服务器模块根据各项目的配置信息从外部代码托管平台中拉取各项目的代码,执行编译、镜像构建和镜像发布等操作。
用户在管理后台服务模块上通过操作触发执行器服务器模块将3个git项目编译、打完镜像后的联合压缩在一起的tar包,再加上相关部署文稿、说明文档等混合打成交付压缩包,将交付压缩包推送至外部文件存储平台,例如hdfs或者ftp。
由上述实施例可见,该实施例中,持续集成与交付系统中的管理后台服务模块可以提供面向用户侧使用的git项目增删、更新和查看服务,执行器服务模块可以提供代码克隆、编译、构建镜像和混合tar包交付的服务,通过管理后台服务模块和执行器服务模块的相互配合,可以实现对工程的多个git项目进行联合管理。与现有技术相比,本发明实施例中,可以充分抽象业务场景,遵循简单高效的原则,将代码集成、构建、交付的核心逻辑依托给系统,无需编写任何复杂脚本文件,操作简单,开发效率较高。此外,还可以支持多种不同编程语言git项目的构建,满足不同编程语言类型开发人员的需求。
图7是本发明的一个实施例的持续集成与交付方法的流程图,该方法基于上述持续集成与交付系统,该持续集成与交付系统包括:管理后台服务模块和执行器服务模块,其中,管理后台服务模块包括:工程管理子模块和工程发布子模块,执行器服务模块包括:代码克隆子模块、编译子模块、镜像构建子模块和聚合打包子模块;如图7所示,该方法可以包括以下步骤:步骤701、步骤702、步骤703、步骤704、步骤705和步骤706,其中,
在步骤701中,工程管理子模块接收用户输入的项目管理操作,其中,该项目管理操作用于新增、删除、编辑或查找目标工程的git项目,目标工程对应多个git项目。
在步骤702中,代码克隆子模块在项目管理操作用于新增或编辑git项目的情况下,从代码托管平台克隆git项目的代码,并提供给编译子模块。
在步骤703中,编译子模块对git项目的代码进行编译得到编译文件,并提供给镜像构建子模块。
在步骤704中,镜像构建子模块对编译文件进行镜像构建得到镜像文件,并提供给聚合打包子模块。
在步骤705中,工程发布子模块接收用户输入的发布操作,其中,该发布操作用于指示聚合打包子模块基于镜像文件生成目标工程对应的交付压缩包,并将交付压缩包发送至远程平台以供其他用户下载。
在步骤706中,聚合打包子模块响应于发布操作,将目标工程的所有git项目对应的镜像文件聚合打包为tar包,基于该tar包生成交付压缩包,将交付压缩包发送至远程平台。
由上述实施例可见,该实施例中,持续集成与交付系统中的管理后台服务模块可以提供面向用户侧使用的git项目增删、更新和查看服务,执行器服务模块可以提供代码克隆、编译、构建镜像和混合tar包交付的服务,通过管理后台服务模块和执行器服务模块的相互配合,可以实现对工程的多个git项目进行联合管理。与现有技术相比,本发明实施例中,可以充分抽象业务场景,遵循简单高效的原则,将代码集成、构建、交付的核心逻辑依托给系统,无需编写任何复杂脚本文件,操作简单,开发效率较高。此外,还可以支持多种不同编程语言git项目的构建,满足不同编程语言类型开发人员的需求。
可选地,作为一个实施例,所述系统运行于宿主机的docker环境中;
所述镜像构建子模块从预设数据库中获取所述git项目对应的dockerfile文件,基于所述dockerfile文件构建所述编译文件对应的镜像文件。
可选地,作为一个实施例,所述git项目包括多个项目子模块,每个项目子模块分别对应一个dockerfile文件,每个dockerfile文件中记录有label属性的name值,所述label属性用于控制生成的镜像名,不同dockerfile文件中记录的label属性的name值不同;
所述编译子模块对每个项目子模块的代码进行编译,得到各项目子模块对应的编译文件,并提供给所述镜像构建子模块;
所述镜像构建子模块将各项目子模块对应的编译文件递归查找出,转移至根目录,从预设数据库中获取所述各项目子模块对应的dockerfile文件,基于所述各项目子模块对应的dockerfile文件,对各项目子模块对应的编译文件进行镜像构建,得到所述各项目子模块对应的镜像文件;
其中,每个项目子模块对应的镜像文件的名称为项目子模块对应的dockerfile文件中label属性的name值。
可选地,作为一个实施例,所述执行器服务模块的至少一个子模块中部署有多个实例,每个实例中包括多个线程。
可选地,作为一个实施例,所述工程管理子模块在接收到所述项目管理操作之后,接收用户输入的git项目配置信息,并将所述git项目配置信息发送至预设数据库进行存储;
其中,所述git项目配置信息包括:git项目名称、git项目源码地址、git项目所属的编译语言、git项目分支和dockerfile文件的访问路径。
可选地,作为一个实施例,所述管理后台服务模块还包括:构建信息展示子模块;所述方法还包括:
所述构建信息展示子模块展示所述目标工程中git项目的构建记录和构建状态信息。
对于方法实施例而言,由于其与系统实施例基本相似,所以描述的比较简单,相关之处参见系统实施例的部分说明即可。
根据本发明的一个实施例,本发明还提供了一种电子设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的程序,所述程序被所述处理器执行时实现如上述任意一个实施例所述的持续集成与交付方法中的步骤。
根据本发明的一个实施例,本发明还提供了一种计算机可读存储介质,所述计算机可读存储介质上存储有程序,所述程序被处理器执行时实现如上述任意一个实施例所述的持续集成与交付方法中的步骤。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种持续集成与交付系统、方法、电子设备及存储介质,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。

Claims (12)

1.一种持续集成与交付系统,其特征在于,所述系统包括:管理后台服务模块和执行器服务模块,其中,所述管理后台服务模块包括:工程管理子模块和工程发布子模块,所述执行器服务模块包括:代码克隆子模块、编译子模块、镜像构建子模块和聚合打包子模块;
所述工程管理子模块,用于接收用户输入的项目管理操作,其中,所述项目管理操作用于新增、删除、编辑或查找目标工程的git项目,所述目标工程对应多个git项目;
所述代码克隆子模块,用于在所述项目管理操作用于新增或编辑git项目的情况下,从代码托管平台克隆所述git项目的代码,并提供给所述编译子模块;
所述编译子模块,用于对所述git项目的代码进行编译得到编译文件,并提供给所述镜像构建子模块;
所述镜像构建子模块,用于对所述编译文件进行镜像构建得到镜像文件,并提供给聚合打包子模块;
所述工程发布子模块,用于接收用户输入的发布操作,其中,所述发布操作用于指示聚合打包子模块基于所述镜像文件生成所述目标工程对应的交付压缩包,并将所述交付压缩包发送至远程平台以供其他用户下载,所述交付压缩包包括所述目标工程的所有 git 项目对应的镜像文件聚合打包的 tar 包、部署文件和说明文档;
所述聚合打包子模块,用于响应于所述发布操作,将所述目标工程的所有git项目对应的镜像文件聚合打包为tar包,基于所述tar包生成所述交付压缩包,将所述交付压缩包发送至所述远程平台;
所述系统运行于宿主机的docker环境中;
所述镜像构建子模块,具体用于从预设数据库中获取所述git项目对应的dockerfile文件,基于所述dockerfile文件构建所述编译文件对应的镜像文件;所述git项目包括多个项目子模块,每个项目子模块分别对应一个dockerfile文件。
2.根据权利要求1所述的系统,其特征在于,所述dockerfile文件中记录有label属性的name值,所述label属性用于控制生成的镜像名,不同dockerfile文件中记录的label属性的name值不同;
所述编译子模块,具体用于对每个项目子模块的代码进行编译,得到各项目子模块对应的编译文件,并提供给所述镜像构建子模块;
所述镜像构建子模块,具体用于将各项目子模块对应的编译文件递归查找出,转移至根目录,从预设数据库中获取所述各项目子模块对应的dockerfile文件,基于所述各项目子模块对应的dockerfile文件,对各项目子模块对应的编译文件进行镜像构建,得到所述各项目子模块对应的镜像文件;
其中,每个项目子模块对应的镜像文件的名称为项目子模块对应的dockerfile文件中label属性的name值。
3.根据权利要求1所述的系统,其特征在于,所述执行器服务模块的至少一个子模块中部署有多个实例,每个实例中包括多个线程。
4.根据权利要求1至3任一项所述的系统,其特征在于,所述工程管理子模块,还用于:
在接收到所述项目管理操作之后,接收用户输入的git项目配置信息,并将所述git项目配置信息发送至预设数据库进行存储;
其中,所述git项目配置信息包括:git项目名称、git项目源码地址、git项目所属的编译语言、git项目分支和dockerfile文件的访问路径。
5.根据权利要求1至4任一项所述的系统,其特征在于,所述管理后台服务模块还包括:构建信息展示子模块;其中,
所述构建信息展示子模块,用于展示所述目标工程中git项目的构建记录和构建状态信息。
6.一种持续集成与交付方法,其特征在于,所述方法基于权利要求1所述的持续集成与交付系统,所述方法包括:
工程管理子模块接收用户输入的项目管理操作,其中,所述项目管理操作用于新增、删除、编辑或查找目标工程的git项目,所述目标工程对应多个git项目;
代码克隆子模块在所述项目管理操作用于新增或编辑git项目的情况下,从代码托管平台克隆所述git项目的代码,并提供给编译子模块;
所述编译子模块对所述git项目的代码进行编译得到编译文件,并提供给镜像构建子模块;
所述镜像构建子模块对所述编译文件进行镜像构建得到镜像文件,并提供给聚合打包子模块;
工程发布子模块接收用户输入的发布操作,其中,所述发布操作用于指示聚合打包子模块基于所述镜像文件生成所述目标工程对应的交付压缩包,并将所述交付压缩包发送至远程平台以供其他用户下载,所述交付压缩包包括所述目标工程的所有 git 项目对应的镜像文件聚合打包的 tar 包、部署文件和说明文档;
所述聚合打包子模块响应于所述发布操作,将所述目标工程的所有git项目对应的镜像文件聚合打包为tar包,基于所述tar包生成所述交付压缩包,将所述交付压缩包发送至所述远程平台;
所述系统运行于宿主机的docker环境中;
所述镜像构建子模块从预设数据库中获取所述git项目对应的dockerfile文件,基于所述dockerfile文件构建所述编译文件对应的镜像文件;所述git项目包括多个项目子模块,每个项目子模块分别对应一个dockerfile文件。
7.根据权利要求6所述的方法,其特征在于,所述dockerfile文件中记录有label属性的name值,所述label属性用于控制生成的镜像名,不同dockerfile文件中记录的label属性的name值不同;
所述编译子模块对每个项目子模块的代码进行编译,得到各项目子模块对应的编译文件,并提供给所述镜像构建子模块;
所述镜像构建子模块将各项目子模块对应的编译文件递归查找出,转移至根目录,从预设数据库中获取所述各项目子模块对应的dockerfile文件,基于所述各项目子模块对应的dockerfile文件,对各项目子模块对应的编译文件进行镜像构建,得到所述各项目子模块对应的镜像文件;
其中,每个项目子模块对应的镜像文件的名称为项目子模块对应的dockerfile文件中label属性的name值。
8.根据权利要求6所述的方法,其特征在于,所述执行器服务模块的至少一个子模块中部署有多个实例,每个实例中包括多个线程。
9.根据权利要求6至8任一项所述的方法,其特征在于,所述工程管理子模块在接收到所述项目管理操作之后,接收用户输入的git项目配置信息,并将所述git项目配置信息发送至预设数据库进行存储;
其中,所述git项目配置信息包括:git项目名称、git项目源码地址、git项目所属的编译语言、git项目分支和dockerfile文件的访问路径。
10.根据权利要求6至9任一项所述的方法,其特征在于,所述管理后台服务模块还包括:构建信息展示子模块;所述方法还包括:
所述构建信息展示子模块展示所述目标工程中git项目的构建记录和构建状态信息。
11.一种电子设备,其特征在于,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的程序,所述程序被所述处理器执行时实现如权利要求6至10任一项所述的持续集成与交付方法的步骤。
12.一种计算机可读存储介质,所述计算机可读存储介质上存储有程序,所述程序被处理器执行时实现如权利要求6至10任一项所述的持续集成与交付方法的步骤。
CN202110529679.3A 2021-05-14 2021-05-14 持续集成与交付系统、方法、电子设备及存储介质 Active CN113434194B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202110529679.3A CN113434194B (zh) 2021-05-14 2021-05-14 持续集成与交付系统、方法、电子设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110529679.3A CN113434194B (zh) 2021-05-14 2021-05-14 持续集成与交付系统、方法、电子设备及存储介质

Publications (2)

Publication Number Publication Date
CN113434194A CN113434194A (zh) 2021-09-24
CN113434194B true CN113434194B (zh) 2024-08-27

Family

ID=77802461

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110529679.3A Active CN113434194B (zh) 2021-05-14 2021-05-14 持续集成与交付系统、方法、电子设备及存储介质

Country Status (1)

Country Link
CN (1) CN113434194B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114253531A (zh) * 2021-11-11 2022-03-29 广州云擎互动信息技术有限公司 一种微服务发布系统
CN114385212A (zh) * 2022-01-13 2022-04-22 中国电子科技集团公司第三十研究所 基于构建流水线的微服务软件发布、升级与横向扩展方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111443940A (zh) * 2020-05-08 2020-07-24 南京大学 一种基于DevOps的完整软件生命周期管理方法及平台
CN111930388A (zh) * 2020-07-13 2020-11-13 银盛支付服务股份有限公司 一种基于k8s、docker容器的持续化集成方法和系统

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190303187A1 (en) * 2018-03-29 2019-10-03 The United States Of America As Represented By The Secretary Of The Navy Methods, devices, and systems for distributing software to and deploying software in a target environment
CN109491662A (zh) * 2018-10-31 2019-03-19 珠海市筑巢科技有限公司 代码打包方法、计算机装置及计算机可读存储介质、代码打包系统
EP4006721A4 (en) * 2019-08-27 2023-04-12 Siemens Aktiengesellschaft METHOD AND APPARATUS FOR APPLICATION PROGRAM DEVELOPMENT AND DEPLOYMENT, AND COMPUTER READABLE MEDIUM
CA3096768A1 (en) * 2019-10-24 2021-04-24 Next Pathway Inc. System and method for automated microservice source code generation and deployment
CN111901294A (zh) * 2020-06-09 2020-11-06 北京迈格威科技有限公司 一种构建在线机器学习项目的方法及机器学习系统
CN112579101B (zh) * 2020-12-21 2023-07-18 广州博冠信息科技有限公司 任务脚本管控方法、装置、电子设备和存储介质

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111443940A (zh) * 2020-05-08 2020-07-24 南京大学 一种基于DevOps的完整软件生命周期管理方法及平台
CN111930388A (zh) * 2020-07-13 2020-11-13 银盛支付服务股份有限公司 一种基于k8s、docker容器的持续化集成方法和系统

Also Published As

Publication number Publication date
CN113434194A (zh) 2021-09-24

Similar Documents

Publication Publication Date Title
US9069800B2 (en) Parallel database backup and restore
CN112650475B (zh) 一种结合中台架构理论的软件低代码开发系统及开发方法
CN112965785B (zh) 基于容器的微服务应用开发方法及开发平台
WO2018036342A1 (zh) 基于csar的模型文件的可视化设计方法及装置
CN107885551A (zh) 一种服务部署方法、装置、可读介质及存储控制器
CN108897547B (zh) 一种软件自动化部署方法及装置
CN113434194B (zh) 持续集成与交付系统、方法、电子设备及存储介质
JP6673359B2 (ja) システム構築支援システム、方法およびプログラム
CN111949276B (zh) 一种基于容器方式自动部署应用程序的系统及方法
US20130275623A1 (en) Deployment of web application archives as a preprocessing step for provisioning
CN109344619A (zh) 应用程序的热修复方法和装置
CN104423961A (zh) 一种生成测试脚本的方法及系统
CN111651219A (zh) 一种多模块项目配置文件管理的方法及设备
CN116860746A (zh) 用于轻量大数据的处理系统
KR20220103490A (ko) 전력 시스템을 위한 마이크로 서비스 개발 플랫폼 및 마이크로 서비스 배포 실행 방법
CN111258567A (zh) 服务代码开发处理方法及装置
CN113094028A (zh) 一种Windows桌面程序开发框架、方法及相关组件
CN117112122A (zh) 一种集群部署方法和装置
US9092292B2 (en) Shared application binary storage
CN113835705A (zh) 大数据服务产品开发方法、装置及系统
CN114995834A (zh) 人工智能应用部署环境构建方法及装置
US10802810B2 (en) Consuming persistent library bundles
Bhattacharjee et al. Cloudcamp: A model-driven generative approach for automating cloud application deployment and management
CN105577707A (zh) 一种远程调用方法与设备
CN113835827A (zh) 基于容器Docker的应用部署方法、装置及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant