软件持续集成方法、装置、计算机设备和存储介质

文档序号:1936768 发布日期:2021-12-07 浏览:22次 >En<

阅读说明:本技术 软件持续集成方法、装置、计算机设备和存储介质 (Software continuous integration method and device, computer equipment and storage medium ) 是由 江行军 王莹珑 董烈锋 于 2021-09-13 设计创作,主要内容包括:本申请涉及软件持续集成方法、装置、计算机设备和存储介质。方法包括:响应于接收到待处理代码,确定待处理代码的层级;若待处理代码的层级为框架层,则根据待处理代码确定第一增量库文件,并基于第一增量库文件进行持续集成,其中,框架层的代码用于实现多个产品共用的框架层功能;若待处理代码的层级为应用层,则根据框架层的最新框架库文件和待处理代码确定第二增量库文件,并基于第二增量库文件进行持续集成,其中,应用层的代码用于实现多个产品的应用层功能,框架层的最新框架库文件是接收到待处理代码时,框架层中所有代码对应的库文件。采用本方法能够减少编译时长,提高产品开发效率。(The application relates to a software persistent integration method, a software persistent integration device, a computer device and a storage medium. The method comprises the following steps: in response to receiving the pending code, determining a hierarchy of the pending code; if the hierarchy of the code to be processed is a framework layer, determining a first incremental library file according to the code to be processed, and continuously integrating based on the first incremental library file, wherein the code of the framework layer is used for realizing a framework layer function shared by a plurality of products; and if the hierarchy of the code to be processed is an application layer, determining a second incremental library file according to the latest frame library file of the frame layer and the code to be processed, and continuously integrating based on the second incremental library file, wherein the code of the application layer is used for realizing the functions of the application layer of a plurality of products, and the latest frame library file of the frame layer is a library file corresponding to all codes in the frame layer when the code to be processed is received. By adopting the method, the compiling time can be shortened, and the product development efficiency can be improved.)

软件持续集成方法、装置、计算机设备和存储介质

技术领域

本申请涉及软件研发技术领域,特别是涉及软件持续集成方法、装置、计算机设备和存储介质。

背景技术

随着软件技术的发展,软件的规模越来越大,包含的模块越来越多,软件持续集成在软件开发过程中也越来越重要。软件持续集成是指频繁地将代码集成到主干,并通过自动化的编译、发布、测试等进行验证,以尽早发现集成错误,加速了软件技术的发展。

现有的软件持续集成方法,修改软件中某模块的代码,触发依赖该模块的其他模块共同参与编译,编译通过后,才能将代码提交入库,进行后续的软件持续集成环节。由于每次修改某模块的代码时,都需要获取依赖该模块的其他模块的所有代码共同编译,导致编译所需时长较长。并且,在软件开发过程中,需要经常对各模块的代码进行反复修改,由于每次修改时的编译所需时长较长,导致软件开发的效率较低。

发明内容

基于此,有必要针对上述技术问题,提供一种能够减少编译时长,提高软件开发效率的软件持续集成方法、装置、计算机设备和存储介质。

第一方面,本申请提供一种软件持续集成方法,所述方法包括:

响应于接收到待处理代码,确定所述待处理代码的层级;

若所述待处理代码的层级为框架层,则根据所述待处理代码确定第一增量库文件,并基于所述第一增量库文件进行持续集成,其中,所述框架层的代码用于实现多个产品共用的框架层功能;

若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,其中,所述应用层的代码用于实现所述多个产品的应用层功能,所述框架层的最新框架库文件是接收到所述待处理代码时,所述框架层中所有代码对应的库文件。

在其中一个实施例中,所述根据所述待处理代码确定第一增量库文件,并基于所述第一增量库文件进行持续集成,包括:

确定所述待处理代码所属的框架解决方案;

基于所述框架解决方案对所述待处理代码进行编译,并在编译通过时确定第一增量库文件;

将所述第一增量库文件同步部署至每个产品的持续集成系统,进行每个产品的持续集成。

在其中一个实施例中,所述将所述第一增量库文件同步部署至每个产品的持续集成系统,进行每个产品的持续集成,包括:

将所述第一增量库文件同步部署至每个产品的持续集成系统;

对每个产品的待处理代码进行代码扫描;

对每个产品的全量代码进行单元检测,其中,所述每个产品的全量代码包括所述第一增量库文件中的代码;

对每个产品的全量代码进行UI自动化测试。

在其中一个实施例中,所述根据所述最新框架库文件和所述待处理代码确定第二增量库文件,包括:

确定所述待处理代码所属的应用解决方案;

基于所述框架层的最新框架库文件和所述应用解决方案对所述待处理代码进行编译,并在编译通过时确定第二增量库文件。

在其中一个实施例中,所述若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,包括:

若所述待处理代码的层级为基础应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件;

将所述第二增量库文件同步部署至每个产品的持续集成系统,进行每个产品的持续集成。

在其中一个实施例中,所述将所述第二增量库文件同步部署至每个产品的持续集成系统,进行每个产品的持续集成,包括:

将所述第二增量库文件同步部署至每个产品的持续集成系统;

对每个产品的待处理代码进行代码扫描;

对每个产品的全量代码进行单元检测;

对每个产品的全量代码进行UI自动化测试。

在其中一个实施例中,所述若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,包括:

若所述待处理代码的层级为高级应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件;

若所述多个产品中存在与所述待处理代码对应的目标产品,则将所述第二增量库文件部署至所述目标产品的持续集成系统,进行所述目标产品的持续集成。

在其中一个实施例中,所述将所述第二增量库文件部署至所述目标产品的持续集成系统,进行所述目标产品的持续集成,包括:

将所述第二增量库文件部署至所述目标产品的持续集成系统;

对所述目标产品的待处理代码进行代码扫描;

对所述目标产品的全量代码进行单元检测;

对所述目标产品的全量代码进行UI自动化测试。

在其中一个实施例中,所述若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,还包括:

若所述待处理代码的层级为高级应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件;

若所述多个产品中不存在与所述待处理代码对应的目标产品,则建立新增产品的持续集成系统;

将所述第二增量库文件、所述框架层的最新框架库文件和所述基础应用层的最新基础应用库文件部署至所述新增产品的持续集成系统,进行所述新增产品的持续集成。

第二方面,本申请提供一种软件持续集成装置,所述装置包括:

层级确定模块,响应于接收到待处理代码,确定所述待处理代码的层级;

第一持续集成模块,用于若所述待处理代码的层级为框架层,则根据所述待处理代码确定第一增量库文件,并基于所述第一增量库文件进行持续集成,其中,所述框架层的代码用于实现多个产品共用的框架层功能;

第二持续集成模块,用于若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,其中,所述应用层的代码用于实现所述多个产品的应用层功能,所述框架层的最新框架库文件是接收到所述待处理代码时,所述框架层中所有代码对应的库文件。

第三方面,本申请提供一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:

响应于接收到待处理代码,确定所述待处理代码的层级;

若所述待处理代码的层级为框架层,则根据所述待处理代码确定第一增量库文件,并基于所述第一增量库文件进行持续集成,其中,所述框架层的代码用于实现多个产品共用的框架层功能;

若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,其中,所述应用层的代码用于实现所述多个产品的应用层功能,所述框架层的最新框架库文件是接收到所述待处理代码时,所述框架层中所有代码对应的库文件。

第四方面,本申请提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:

响应于接收到待处理代码,确定所述待处理代码的层级;

若所述待处理代码的层级为框架层,则根据所述待处理代码确定第一增量库文件,并基于所述第一增量库文件进行持续集成,其中,所述框架层的代码用于实现多个产品共用的框架层功能;

若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,其中,所述应用层的代码用于实现所述多个产品的应用层功能,所述框架层的最新框架库文件是接收到所述待处理代码时,所述框架层中所有代码对应的库文件。

本申请提供的软件持续集成方法、装置、计算机设备和存储介质,按照代码实现功能,在工程层面对开发的多个产品的代码进行架构划分为框架层的代码和应用层的代码,框架层的代码用于实现多个产品共用的框架层功能,应用层的代码用于实现多个产品的应用层功能;若待处理代码属于框架层,则对待处理代码进行增量编译,对待处理代码进行增量编译时,不需要拉取框架层和应用层的所有代码共同参与,若待处理代码属于应用层,则引用最新框架库文件,对待处理代码进行增量编译,同样不需要拉取框架层和应用层的所有代码共同参与,在待处理代码提交入库时,减少了编译时长,由于产品开发过程中,需要频繁对产品的代码进行修改,每次待处理代码提交所需的编译时长缩短,可以极大减少产品开发过程中,编译所需的时长,提高了产品开发的效率。

附图说明

图1为本申请一个实施例中软件持续集成方法的流程示意图;

图2为本申请一个具体实施例中待处理代码为框架层的代码时的流程示意图;

图3为本申请一个实施例中,框架层、基础应用层和高级应用层的示意图;

图4为本申请一个具体实施例中待处理代码为基础应用层的代码时的流程示意图;

图5为本申请一个具体实施例中待处理代码为高级应用层的代码,且用于实现一个目标产品的功能的代码时的流程示意图;

图6为本申请一个具体实施例中待处理代码为高级应用层的代码,且用于实现另一个目标产品的功能的代码时的流程示意图;

图7为本申请一个实施例中软件持续集成装置的结构框图;

图8为本申请一个实施例中计算机设备的内部结构图。

具体实施方式

为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。

在一个实施例中,如图1所示,提供了一种软件持续集成方法,本实施例以该方法应用于终端进行举例说明,可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:

步骤101,响应于接收到待处理代码,确定所述待处理代码的层级。

其中,所述待处理代码为开发软件产品的过程中,开发人员提交的代码,产品可以为机器人产品,若机器人产品的代码为C++代码,则所述待处理代码为C++代码。所述待处理代码可以为在保持原代码不变的基础上新增的代码,该新增的代码可以用于为产品新增功能,所述待处理代码还可以用于替换原代码,以实现原代码所实现的功能。在产品的开发过程中,开发人员会频繁地提交待处理代码。

具体地,终端接收到开发人员提交的待处理代码,则确定所述待处理代码的层级。所述层级是按照代码实现的功能,在工程层面对多个产品的代码进行架构划分得到的,在本申请实施例中,所述层级包括框架层和应用层。

所述框架层的代码,用于实现多个产品共用的框架层功能,例如,产品的存储功能、通信功能等;所述应用层的代码用于实现多个产品的应用层功能,例如,面向用户的功能、业务处理的功能等。

举例说明,多个产品包括:a1,a2,…,an,n是多个产品的数量,例如,n等于5,或者n等于10。其中,框架层的代码用于实现a1,a2,…,an共用的框架层功能,应用层的代码用于实现a1,a2,…,an的应用层功能。在一个具体实施例子中,a1为神经外科手术机器人(uBrain),a2为关节置换手术机器人(uTHA),a3为介入手术导航控制系统机器人(uIN),框架层的代码用于实现uBrain、uTHA和uIN共用的框架层功能,例如,uBrain、uTHA和uIN的存储功能、通信功能等,应用层的代码用于实现uBrain、uTHA和uIN的应用层功能,例如,机械臂移动功能、影像显示功能等。

步骤102,若所述待处理代码的层级为框架层,则根据所述待处理代码确定第一增量库文件,并基于所述第一增量库文件进行持续集成。

其中,所述第一增量库文件是属于框架层的待处理代码通过编译后得到的库文件,第一增量库文件可以直接部署至产品的持续集成系统,对产品进行持续集成。

具体地,当属于框架层的待处理代码提交入库时,不需要拉取框架层和应用层的所有代码共同参与编译,只需要对待处理代码进行增量编译,在编译通过后得到第一增量库文件,缩短了编译所需时长。基于第一增量库文件触发多个产品的持续集成。

在编译通过后,获取框架层的最新框架库文件,基于第一增量库文件更新最新框架库文件,并将更新后的最新框架库文件保存在指定路径。其中,获取的最新框架库文件,是接收到所述待处理代码时所述框架层的库文件,所述框架层的库文件包括所述框架层的所有代码。

步骤103,若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成。

其中,第二增量库文件是属于应用层的待处理代码通过编译后得到的库文件,第二增量库文件可以直接部署至产品的持续集成系统,对产品进行持续集成。若所述待处理代码的层级为应用层,获取最新框架库文件,所述最新框架库文件是接收到所述待处理代码时,所述框架层中所有代码对应的库文件。

具体地,当属于应用层的待处理代码提交入库时,不需要拉取框架层和应用层的所有代码共同参与编译,只需要引用框架层的最新框架库文件,对待处理代码进行增量编译,在编译通过后得到第二增量库文件,缩短了编译所需时长。基于第二增量库文件触发产品的持续集成。

上述软件持续集成方法中,按照代码实现功能,在工程层面对开发的多个产品的代码进行架构划分为框架层的代码和应用层的代码,框架层的代码用于实现多个产品共用的框架层功能,应用层的代码用于实现多个产品的应用层功能;若待处理代码属于框架层,则对待处理代码进行增量编译,对待处理代码进行增量编译时,不需要拉取框架层和应用层的所有代码共同参与,若待处理代码属于应用层,则引用最新框架库文件,对待处理代码进行增量编译,同样不需要拉取框架层和应用层的所有代码共同参与,在待处理代码提交入库时,减少了编译时长,由于产品开发过程中,需要频繁对产品的代码进行修改,每次待处理代码提交所需的编译时长缩短,可以极大减少产品开发过程中,编译所需的时长,提高了产品开发的效率。

在一个实施例中,步骤102中包括:

步骤201,确定所述待处理代码所属的框架解决方案。

具体地,将框架层代码划分为多个解决方案,通过多个解决方案管理框架层的代码,当待处理代码提交入库时,确定待处理代码在框架层所属的解决方案,将待处理代码所属的解决方案作为框架解决方案。

步骤202,基于所述框架解决方案对所述待处理代码进行编译,并在编译通过时确定第一增量库文件。

具体地,待处理代码为框架解决方案中新增的代码,或者,待处理代码用于替换框架解决方案中的原代码,根据待处理代码和框架解决方案确定修改后的框架解决方案,基于msbuild对修改后的框架解决方案进行增量编译,在编译通过后,基于python开发脚本自动提取第一增量库文件,所述第一增量库文件是修改后的框架解决方案对应的库文件,msbuild是具有强大扩展能力的自动化平台。

也就是说,所述待处理代码的层级为框架层时,不需要对框架层的所有代码进行编译,只需要确定待处理代码所属的框架解决方案,对修改后的框架解决方案进行增量编译即可。

在得到第一增量库文件后,根据当前的最新框架库文件和第一增量库文件,更新最新框架库文件,并将最新框架库文件保存在指定路径。根据当前的最新框架库文件和第一增量库文件,更新最新框架库文件的过程包括:在指定路径获取最新框架库文件,并在最新框架库文件中确定框架解决方案的库文件,将框架解决方案的库文件替换为编译通过时确定的第一增量库文件,以实现对最新框架库文件进行更新。

步骤203,将所述第一增量库文件同步部署至每个产品的持续集成系统,进行每个产品的持续集成。

具体地,由于框架层的代码用于实现多个产品共用的框架层功能,当框架层的代码被替换,或者存在新增时,相当于多个产品的代码均被修改,需要检测待处理代码提交入库后,多个产品是否可以正常使用,触发多个产品的持续集成。

在一个实施例中,步骤203包括:

步骤301,将所述第一增量库文件同步部署至每个产品的持续集成系统。

具体地,以一个产品为例进行说明,该产品的持续集成系统中已经部署了该产品的框架层和应用层的库文件,将所述第一增量库文件部署至该产品的持续集成系统,使得该产品的持续集成系统中包括第一增量库文件。将所述第一增量库文件部署至该产品的持续集成系统,是将框架层的库文件中,与第一增量库文件对应的框架库文件替换为所述第一增量库文件。

例如,多个产品包括:a1,a2,…,an,当待处理代码属于框架层时,将第一增量库文件同步部署至a1,a2,…,an的持续集成系统,进行检测。

步骤302,对每个产品的待处理代码进行代码扫描。

具体地,每个产品的持续集成系统中部署有每个产品的最新框架库文件和最新应用库文件,所述最新应用库文件是接收到所述待处理代码时,所述应用层中所有代码对应的库文件,每个产品的最新框架库文件中包括第一增量库文件,第一增量库文件包括待处理代码编译通过后得到的代码。每个产品的最新框架库文件和最新应用库文件中,只有待处理代码是新提交的代码,因此只需要对待处理代码进行代码扫描,代码扫描用于扫描代码是否存在质量问题。可以基于sonarqube和cppcheck对待处理代码进行静态扫描,sonarqube是开源的代码质量管理平台,cppcheck是静态代码检查工具。

步骤303,对每个产品的全量代码进行单元检测。

具体地,所述每个产品的全量代码包括所述第一增量库文件中的代码。每个产品的持续集成系统中部署有每个产品的最新框架库文件和最新应用库文件,所述全量代码即最新框架库文件和最新应用库文件的代码,由于最新框架库文件包括第一增量库文件,因此全量代码包括第一增量库文件的代码。单元检测是检测待处理代码入库后,产品的各项功能是否可以正常使用,基于Gtest和MStest完成代码单元检测。

步骤304,对每个产品的全量代码进行UI自动化测试。

具体地,UI自动化用例统一放置在版本库中,对每个产品的全量代码进行UI自动化测试时,根据每个产品的配置文件在版本库中拉取每个产品当前版本的测试用例脚本,利用测试用例脚本进行UI自动化测试。可以基于uiautomation、pywinauto实现UI自动化测试,uiautomation是Microsoft.NET 3.0框架下提供的用于自动化测试的工具,pywinauto是Python的自动化测试工具。

在一个实施例中,对每个产品的待处理代码进行代码扫描,得到代码扫描结果,对每个产品的全量代码进行单元检测,得到单元检测结果,对每个产品的全量代码进行UI自动化测试结果,代码扫描结果、单元检测结果和UI自动化测试结果可以通过图表进行可视化。

在一个具体实施例中,参见图2,例如,多个产品包括:神经外科手术机器人(uBrain),关节置换手术机器人(uTHA)和介入手术导航控制系统机器人(uIN)。若待处理代码属于框架层(framework),软件持续集成方法包括:

S21,接收到待处理代码,并确定待处理代码的层级为framework;

S22,基于待处理代码对应的框架解决方案编译待处理代码,在编译通过时得到第一增量库文件;

S23,将第一增量库文件部署至uBrain的持续集成系统、uTHA的持续集成系统和uIN的持续集成系统;

S24,对uBrain的待处理代码进行代码扫描,对uTHA的待处理代码进行代码扫描,对uIN的待处理代码进行代码扫描;

S25,对uBrain的全量代码进行单元检测和UI自动化测试,对uTHA的全量代码进行单元检测和UI自动化测试,对uIN的全量代码进行单元检测和UI自动化测试。

在一个实施例中,步骤103中,根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件的过程包括:

步骤401,确定所述待处理代码所属的应用解决方案。

具体地,将应用层代码划分为多个解决方案,通过多个解决方案管理应用层的代码,当待处理代码提交入库时,确定待处理代码在应用层所属的解决方案,将待处理代码所属的解决方案作为应用解决方案。

步骤402,基于所述框架层的最新框架库文件和所述应用解决方案对所述待处理代码进行编译,并在编译通过时确定第二增量库文件。

具体地,待处理代码为应用解决方案中新增的代码,或者,待处理代码用于替换应用解决方案中的原代码,根据待处理代码和应用解决方案确定修改后的应用解决方案;基于msbuild引用最新框架库文件,对应用解决方案进行增量变量,在编译通过后,基于python开发脚本自动提取第二增量库文件,所述第二增量库文件是修改后的应用解决方案对应的库文件。

在一个实施例中,所述应用层包括基础应用层和高级应用层,所述基础应用层的代码用于实现所述多个产品共用的基础应用功能,所述高级应用层的代码用于实现所述多个产品各自的高级应用功能。

如图3所示,在工程层面对多个产品的代码进行架构划分,得到框架层、基础应用层和高级应用层,图3中的实心箭头表示从文件服务器中获取库文件,图3中的空心箭头表示将编译通过得到的库文件保存到文件服务器中,根据图3可知,框架层将编译通过得到的框架层的库文件保存到文件服务器1中,基础应用层将编译通过得到的基础应用层的库文件保存到文件服务器2中,高级应用层将编译通过得到的高级应用层的库文件保存到文件服务器3中;编译基础应用层的代码时,从文件服务器1中获取框架层的库文件,编辑高级应用层的代码时,从文件服务器1中获取框架层的库文件。

例如,多个产品包括:a1,a2,a3,基础应用层的代码,用于实现a1,a2和a3共用的基础应用功能,高级应用层的代码,用于实现a1的高级应用功能,a2的高级应用功能,以及a3的高级应用功能。假设a1为神经外科手术机器人,a2为关节置换手术机器人,a3为介入手术导航控制系统机器人,基础应用功能是a1,a2和a3都会用到的功能,例如,机器人的机械臂移动功能,机械臂的夹持功能,高级应用功能,是每个手术机器人的特有功能,如神经外科手术机器人的手术切口规划功能,关节置换手术机器人的患处精确定位功能,介入手术导航控制系统机器人的介入导丝实时跟踪功能。

所述应用层包括基础应用层和高级应用层,步骤103包括:

步骤501,若所述待处理代码的层级为基础应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件;

步骤502,将所述第二增量库文件同步部署至每个产品的持续集成系统,进行每个产品的持续集成。

具体地,步骤501中确定第二增量库文件的具体过程可以参见步骤401和步骤402的说明。

由于基础应用层的代码用于实现多个产品共用的基础应用功能,当基础应用层的代码被替换,或者存在新增时,相当于多个产品的代码均被修改,需要检测待处理代码提交入库后,多个产品是否可以正常使用,触发多个产品的持续集成。

在一个实施例中,步骤502包括:

步骤601,将所述第二增量库文件同步部署至每个产品的持续集成系统。

具体地,以一个产品为参考进行说明,该产品的持续集成系统中已经部署了该产品的框架层和应用层的库文件,将所述第二增量库文件部署至该产品的持续集成系统,使得该产品的持续集成系统中包括第二增量库文件。将所述第二增量库文件部署至该产品的持续集成系统,是将基础应用层的库文件中,与第二增量库文件对应的应用库文件替换为所述第二增量库文件。

例如,产品包括a1,a2和a3,将第二增量库文件同步部署至a1,a2和a3的持续集成系统,进行检测。

步骤602,对每个产品的待处理代码进行代码扫描。

具体地,每个产品的持续集成系统中部署有每个产品的最新框架库文件和最新应用库文件,每个产品的最新应用库文件中包括第二增量库文件,第二增量库文件包括待处理代码。每个产品的最新框架库文件和最新应用库文件中,只有待处理代码是新提交的代码,因此只需要对待处理代码进行代码扫描,代码扫描用于扫描代码是否存在质量问题。可以基于sonarqube和cppcheck对待处理代码进行静态扫码。

步骤603,对每个产品的全量代码进行单元检测。

具体地,所述每个产品的代码包括所述第二增量库文件的代码。所述全量代码即最新框架库文件和最新应用库文件的代码,由于最新应用库文件包括第二增量库文件,因此,全量代码包括第二增量库文件的代码。单元检测是检测待处理代码入库后,产品的各项功能是否可以正常使用,基于Gtest和MStest完成代码单元检测,Gtest是谷歌的开源单元检测框架,MStest是Visual Studio的单元检测框架。

步骤604,对每个产品的全量代码进行UI自动化测试。

具体地,对每个产品的全量代码进行UI自动测试,和对每个产品的全量代码进行UI自动化测试的过程相同,因此,步骤604的具体过程可以参见步骤304的说明。

在一个具体实施例中,多个产品包括:神经外科手术机器人(uBrain),关节置换手术机器人(uTHA)和介入手术导航控制系统机器人(uIN)和医学影像机器人,若待处理代码属于基础应用层(basicapp),参见图4,软件持续集成方法包括:

S31,接收到待处理代码,并确定待处理代码的层级为basicapp;

S32,基于待处理代码对应的应用解决方案和最新框架库文件编译待处理代码,在编译成功时得到第二增量库文件;

S33,将第二增量库文件部署至uBrain的持续集成系统、uTHA的持续集成系统和uIN的持续集成系统;

S34,对uBrain的待处理代码进行代码扫描,对uTHA的待处理代码进行代码扫描,对uIN的待处理代码进行代码扫描;

S35,对uBrain的全量代码进行单元检测和UI自动化测试,对uTHA的全量代码进行单元检测和UI自动化测试,对uIN的全量代码进行单元检测和UI自动化测试。

在一个实施例中,所述高级应用层的代码用于实现所述多个产品各自的高级应用功能,步骤103包括:

步骤701,若所述待处理代码的层级为高级应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件;

步骤702,若所述多个产品中存在与所述待处理代码对应的目标产品,则将所述第二增量库文件部署至所述目标产品的持续集成系统,进行所述目标产品的持续集成。

具体地,步骤701中确定第二增量库文件的具体说明,可以参见步骤401和步骤402的说明。

由于高级应用层的代码用于实现每个产品各自的高级应用功能,当高级应用层的代码被替换,或者存在新增时,相当于只有一个产品的代码被修改,需要确定所述待处理代码对应的目标产品,触发目标产品的持续集成。

例如,产品包括a1,a2和a3,a1为神经外科手术机器人,a2为关节置换手术机器人,a3为介入手术导航控制系统机器人,若待处理代码对应的目标产品为a1,则触发对a1的持续集成,若待处理代码对应的目标产品为a2,则触发对a2的持续集成,若待处理代码对应的目标产品为a3,则触发对a3的持续集成。

具体地,需要检测目标产品的待处理代码提交入库后,目标产品是否可以正常使用,触发目标产品的持续集成,将第二增量库文件部署至目标产品的持续集成系统,以进行测试。

在一个实施例中,步骤703包括:

步骤801,将所述第二增量库文件部署至所述目标产品的持续集成系统。

具体地,目标产品的持续集成系统中已经部署了目标产品的框架层和应用层的库文件,将所述第二增量库文件部署至目标产品的持续集成系统,使得目标集成系统中包括第二增量库文件。将所述第二增量库文件部署至目标产品的持续集成系统,是将应用层的库文件中,与第二增量库文件对应的应用库文件替换为所述第二增量库文件。

步骤802,对所述目标产品的待处理代码进行代码扫描。

具体地,对目标产品的待处理代码进行代码扫描的过程,和对每个产品的待处理代码进行代码扫描的过程相同,因此,步骤802的具体过程可以参见步骤602的说明。

步骤803,对所述目标产品的全量代码进行单元检测。

具体地,所述目标产品的代码包括所述第二增量库文件的代码。对所述目标产品的全量代码进行单元检测的过程,和对每个产品的全量代码进行单元检测相同,因此,步骤803的具体过程可以参见步骤603的说明。

步骤804,对所述目标产品的全量代码进行UI自动化测试。

具体地,对所述目标产品的全量代码进行UI自动化测试的过程,和对每个产品的全量代码进行UI自动化测试的过程相同,因此,步骤804的具体过程可以参见步骤604的说明。

在一个具体实施例中,参见图5,例如,若待处理代码属于高级应用层(Seniorapp),待处理代码的目标产品为神经外科手术机器人(uBrain),软件持续集成方法包括:

S41,接收到待处理代码,并确定待处理代码的层级为Seniorapp;

S42,确定待处理代码对应的目标产品是uBrain;

S43,基于待处理代码对应的应用解决方案和最新框架库文件编译待处理代码,在编译通过时得到第二增量库文件;

S44,将第一增量库文件部署至uBrain的持续集成系统;

S45,对uBrain的待处理代码进行代码扫描;

S46,对uBrain的全量代码进行单元检测和UI自动化测试。

在一个具体实施例中,参见图6,例如,若待处理代码属于高级应用层(Seniorapp),待处理代码的目标产品为关节置换手术机器人(uTHA),软件持续集成方法包括:

S51,接收到待处理代码,并确定待处理代码的层级为Seniorapp;

S52,确定待处理代码对应的目标产品是uTHA;

S53,基于待处理代码对应的应用解决方案和最新框架库文件编译待处理代码,在编译成功时得到第二增量库文件;

S54,将第一增量库文件部署至uTHA的持续集成系统;

S55,对uTHA的待处理代码进行代码扫描;

S56,对uTHA的全量代码进行单元检测和UI自动化测试。

在一个实施例中,所述高级应用层的代码还用于实现新增产品的高级应用功能,所述新增产品与所述多个产品均不相同。当有新增产品的开发需求时,也就是说,当高级应用层的有新增产品的需求时,只需要建立新增产品的持续集成系统,可以对新增产品的代码质量进行有效验证。所述高级应用层的代码还用于实现新增产品的高级应用功能,所述新增产品与所述多个产品均不相同,相应的,

步骤103还包括:

步骤901,若所述待处理代码的层级为高级应用层,则根据所述最新框架库文件和所述待处理代码确定第二增量库文件。

具体地,步骤901中确定第二增量库文件的具体说明,可以参见步骤401和步骤402的说明。

步骤902,若所述多个产品中存在与所述待处理代码对应的目标产品,则建立所述新增产品的持续集成系统。

具体地,若所述待处理代码不属于所述多个产品中的任意一个产品,则可以确定所述待处理代码是用于实现新增产品的新增应用功能,也就是说,所述新增产品与所述待处理代码对应。在持续集成平台可以配置并建立所述新增产品的持续集成系统。

步骤903,将所述第二增量库文件、所述框架层的最新框架库文件和所述基础应用层的最新基础应用库文件部署至所述新增产品的持续集成系统,进行所述新增产品的持续集成。

具体地,所述基础应用层的最新基础应用库文件,是接收到所述待处理代码时,所述基础应用层中所有代码对应的库文件。将第二增量库文件、框架层的最新框架库文件和基础应用层的最新基础应用库文件部署至新增产品的持续集成系统,并对新增产品的待处理代码进行代码扫描,再对新增产品的全量代码进行单元检测,新增产品的全量代码包括:第二增量库文件、最新框架库文件和最新基础应用库文件的代码;对新增产品的全量代码进行UI自动化检测。

本实施例中,按照代码实现的功能,在工程层面对多个产品的代码进行架构划分,得到框架层、基础应用层和高级应用层,若待处理代码为框架层的代码,对待处理代码进行增量编译时,不需要拉取框架层和应用层的所有代码共同参与,若待处理代码为基础应用层或者高级应用层的代码,对待处理代码进行增量编译时,只需要引用最近框架库文件,不用拉取框架层和应用层的所有代码共同参与,在待处理代码提交入库中,减少了编译时长,由于每次产品开发过程中,需要频繁对产品的代码进行修改,每次待处理代码提交所需的编译时长缩短,可以极大减少产品开发过程中,编译所需的时长,提高了产品开发的效率。代码提交入库后,不需要构建产品的全量包,将增量编译得到的库文件部署至产品的持续集成系统,直接根据最新框架库文件、最新应用库文件和待处理代码即可进行产品的持续集成,也就是说,一次代码提交入库,会自动完成集成编译、持续集成,使得持续集成更加系统化,减少整个链路的时间,提高了持续集成验证效率。

应该理解的是,虽然图1的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。

在一个实施例中,如图7所示,提供了一种软件持续集成装置,包括:

层级确定模块,用于响应于接收到待处理代码,确定所述待处理代码的层级;

第一持续集成模块,用于若所述待处理代码的层级为框架层,则根据所述待处理代码确定第一增量库文件,并基于所述第一增量库文件进行持续集成,其中,所述框架层的代码用于实现多个产品共用的框架层功能;

第二持续集成模块,用于若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,其中,所述应用层的代码用于实现所述多个产品的应用层功能,所述框架层的最新框架库文件是接收到所述待处理代码时,所述框架层中所有代码对应的库文件。

关于软件持续集成装置的具体限定可以参见上文中对于软件持续集成方法的限定,在此不再赘述。上述软件持续集成装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器和网络接口。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种软件持续集成方法。

本领域技术人员可以理解,图8中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。

在一个实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现以下步骤:

响应于接收到待处理代码,确定所述待处理代码的层级;

若所述待处理代码的层级为框架层,则根据所述待处理代码确定第一增量库文件,并基于所述第一增量库文件进行持续集成,其中,所述框架层的代码用于实现多个产品共用的框架层功能;

若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,其中,所述应用层的代码用于实现所述多个产品的应用层功能,所述框架层的最新框架库文件是接收到所述待处理代码时,所述框架层中所有代码对应的库文件。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:

响应于接收到待处理代码,确定所述待处理代码的层级;

若所述待处理代码的层级为框架层,则根据所述待处理代码确定第一增量库文件,并基于所述第一增量库文件进行持续集成,其中,所述框架层的代码用于实现多个产品共用的框架层功能;

若所述待处理代码的层级为应用层,则根据所述框架层的最新框架库文件和所述待处理代码确定第二增量库文件,并基于所述第二增量库文件进行持续集成,其中,所述应用层的代码用于实现所述多个产品的应用层功能,所述框架层的最新框架库文件是接收到所述待处理代码时,所述框架层中所有代码对应的库文件。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read-Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。

以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

20页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种微服务应用部署方法、装置、设备及存储介质

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!