掌桥专利:专业的专利平台
掌桥专利
首页

多模块多项目的持续集成方法、系统、装置和存储介质

文献发布时间:2023-06-19 19:33:46


多模块多项目的持续集成方法、系统、装置和存储介质

技术领域

本申请涉及程序控制技术领域,尤其涉及一种多模块多项目的持续集成方法、多模块多项目的持续集成系统、装置和存储介质。

背景技术

在手机软件研发领域,尤其是Android平台,代码量很大,一个项目将近900多个模块。而为了实现不同的定制,同一基线平台延伸出很多定制项目,每个模块根据不同的需求为不同的分支;为了确保代码质量,持续集成是必须的。

部分案例集中于小规模集成或独立应用集成,大规模持续集成特别是Android平台这种多模块编译时间长的情况,没有涉及到。有些技术某模块在其中一个项目上进行持续集成验证,当报错时通知到当事人,该轮持续集成停止,由于工作时间的限制,对于编译时间长的情况,其他模块无法得到充分验证。

发明内容

基于此,本申请实施例提供一种多模块多项目的持续集成方法、多模块多项目的持续集成系统、装置和存储介质,能够在进入正式节点之前进行独立并行的编译预验证,从而为避免在正式节点出错就停止持续集成提供技术支持。

第一方面,本申请提供一种多模块多项目的持续集成方法,所述方法包括:

将提交的模块的代码传入审核节点;

在所述审核节点提取所述模块的代码,利用多个项目对应的多个编译机对所述模块的代码进行独立并行的编译预验证;

当所述模块的代码在其需要验证的多个项目上的编译预验证通过后,将所述模块的代码提交到正式节点。

第二方面,本申请提供一种多模块多项目的持续集成系统,所述系统包括多个编译机、存储器以及处理器,所述多个编译机用于对模块的代码进行独立并行的编译预验证;所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序并在执行所述计算机程序时实现如上所述的多模块多项目的持续集成方法。

第三方面,本申请提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时使所述处理器实现如上所述的多模块多项目的持续集成方法。

第四方面,本申请提供一种多模块多项目的持续集成装置,所述装置包括:

管理代码的服务器,所述服务器设置有与正式节点对应的审核节点,提交的模块的代码能够传入审核节点;

多个编译机,所述多个编译机分别对应多个项目,用于在所述审核节点提取所述模块的代码,对所述模块的代码进行独立并行的编译预验证;

结果分析设备,用于分析编译预验证的结果,当所述模块的代码在其需要验证的多个项目上的编译预验证通过后,将所述模块的代码提交到所述正式节点。

本申请实施例提供了一种多模块多项目的持续集成方法、多模块多项目的持续集成系统、装置和存储介质,将提交的模块的代码传入审核节点;在所述审核节点提取所述模块的代码,利用多个项目对应的多个编译机对所述模块的代码进行独立并行的编译预验证;当所述模块的代码在其需要验证的多个项目上的编译预验证通过后,将所述模块的代码提交到正式节点。相比于相关技术中将提交的模块的代码直接提交至正式节点进行持续集成,本申请实施例中提交的代码在进入正式节点之前,先进入审核节点,在审核节点通过多个对应不同项目的编译机对模块的代码进行独立并行的编译预验证,只有当模块的代码在其需要验证的多个项目上的编译预验证通过后,才会将该模块的代码提交到正式节点,如此,能够保证代码提交质量,避免一个模块在一个项目中编译验证没问题而在另一个项目中编译报错的情况,在进入正式节点之前进行独立并行的编译预验证,从而为避免在正式节点出错就停止持续集成提供技术支持。

附图说明

图1是本申请多模块多项目的持续集成方法一实施例的流程示意图;

图2是本申请多模块多项目的持续集成方法另一实施例的流程示意图;

图3是本申请多模块多项目的持续集成系统一实施例的结构示意图;

图4是本申请多模块多项目的持续集成装置一实施例的结构示意图;

图5是本申请多模块多项目的持续集成装置另一实施例的结构示意图。

具体实施方式

下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性的劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

附图中所示的流程图仅是示例说明,不是必须包括所有的内容和操作/步骤,也不是必须按所描述的顺序执行。例如,有的操作/步骤还可以分解、组合或部分合并,因此实际执行的顺序有可能根据实际情况改变。

在后续的描述中,使用用于表示元件的诸如“模块”、“部件”或“单元”的后缀仅为了有利于本申请的说明,其本身没有特有的意义。因此,“模块”、“部件”或“单元”可以混合地使用。

参见图1,图1是本申请多模块多项目的持续集成方法一实施例的流程示意图,所述方法包括:步骤S101、步骤S102以及步骤S103。

步骤S101:将提交的模块的代码传入审核节点。

步骤S102:在所述审核节点提取所述模块的代码,利用多个项目对应的多个编译机对所述模块的代码进行独立并行的编译预验证。

步骤S103:当所述模块的代码在其需要验证的多个项目上的编译预验证通过后,将所述模块的代码提交到正式节点。

本实施例中,审核节点可以是指一个与正式节点对应的流程节点,提交的代码暂时存储在审核节点中,后续编译机进行编译预验证时,在审核节点中提取代码进行预验证。当模块的代码在其需要验证的多个项目上编译预验证通过后,提交的代码存储在正式节点中。

本实施例中,项目可以是指软件项目,模块可以是指软件模块。

本实施例中,开发人员提交的模块的代码在进入正式节点之前,需要先进入审核节点;该系统部署有多个编译机,多个编译机分别对应多个不同的项目,即一个编译机对应一个项目,多个编译机能够进行独立并行的编译;在审核节点提取所述模块的代码,对模块的代码在多个不同的项目对应的多个编译机上分别进行独立并行的编译预验证,只有当该模块的代码在其需要验证的多个项目上的编译预验证全部成功、全部通过后,才将该模块的代码提交至正式节点,在正式节点进行后续的持续集成。其中,其他开发人员包括后续的构建都是从正式节点提取代码的。

如此,一方面相比于相关技术中将开发人员提交的模块的代码直接提交至正式节点进行持续集成,本申请实施例中提交的代码在进入正式节点之前,先进入审核节点,在审核节点提取所述模块的代码,通过多个对应不同项目的编译机对模块的代码进行独立并行的编译预验证,只有当模块的代码在其需要验证的多个项目上的编译预验证通过后,才会将该模块的代码提交到正式节点,如此,能够保证代码提交质量,避免模块在一个项目中编译验证没问题而在另一个项目中编译报错的情况,在进入正式节点之前进行独立并行的编译预验证,从而为避免在正式节点出错就停止持续集成提供技术支持,由于模块的代码在进入正式节点之前,已经在所有需要验证的项目上的编译预验证全部通过,该模块的代码就不会在后续的构建中出现编译错误,从而能够尽量避免持续集成的停止;另一方面,多模块编译时间长,多个编译机独立并行进行编译预验证,能够提高编译效率,节省编译时间,提高持续集成的效率;而且,本申请实施例的方法不限平台,适合所有的多模块多项目定制的软件开发领域。

一个模块为了满足不同的功能或软件开发时期需要,可以包括多个不同的分支,在软件中,分支可以是基于模块的某一个版本再复制一份代码并建立的分支,在该分支上可以独立开发。此时,步骤S101,将提交的模块的代码传入审核节点,可以是:将提交的模块的代码传入多个审核节点。一个模块有n个分支,提交的模块的代码传入n个审核节点,一个模块的每个分支对应一个审核节点。

需要说明的是,本申请实施例不限定实施和部署本实施例的方法的具体方式,能够满足本申请实施例的方法即可。例如审核节点和正式节点具体如何部署,模块的代码进入审核节点如何实施,多个编译机如何对模块的代码进行独立并行的编译预验证,验证通过后如何提交至正式节点,等等,在具体实施和部署的时候可以根据实际应用情况灵活实施和部署。

在一实施例中,步骤S102中,在所述审核节点提取所述模块的代码之后,还可以包括:步骤S104。

步骤S104:将所述模块的代码提交至代码审核以进行审核。

其中,代码审核可以是通过人工审核来实现的。有些代码错误,例如:代码结构逻辑问题,编译预验证也无法审核出错误,为了更进一步提高代码提交质量,本申请实施例可以采用人工审核的方式对代码进行审核。可以将代码提交至专家组成员,专家组成员对代码进行审核,当专家组成员对代码审核通过后,可以给该模块的代码添加一个标签,表示该模块的代码在代码审核中通过。

需要说明的是,步骤S102中利用多个项目对应的多个编译机对所述模块的代码进行独立并行的编译预验证和步骤S104的执行顺序不受限定,步骤S102中利用多个项目对应的多个编译机对所述模块的代码进行独立并行的编译预验证和步骤S104可以并行执行。

此时,步骤S103,所述当所述模块的代码在其需要验证的多个项目上的编译预验证通过后,将所述模块的代码提交到正式节点,还可以包括:当所述模块的代码在其需要验证的多个项目上的编译预验证和所述代码审核均通过后,将所述模块的代码提交到正式节点。

本实施例中,当模块的代码在代码审核中通过,在需要验证的多个项目上的编译预验证也通过时,模块的代码的质量可以得到很大的提高,此时才将该模块的代码提交到正式节点,能够减少代码错误,提高持续集成的效率。

而且,相关技术是开发人员的代码提交后(提交的是正式节点),代码错误,告警通知到开发人员;如果开发人员没有将该告警作为最高优先级处理,该存在错误的代码一直存在正式节点中,这会影响第二天的构建。本申请实施例主要是把代码提交分为:先提交至审核节点,在审核节点提取模块的代码,利用多个项目对应的多个编译机对所述模块的代码进行独立并行的编译预验证通过后,再将模块的代码提交到正式节点。如果模块的代码在任一个需要验证的项目上编译预验证失败,则该模块的代码不会提交至正式节点,因此该存在问题的代码不会出现在正式节点,不会影响后续的构建。直到该存在问题的代码的问题被解决,在所有需要验证的项目上编译预验证全部通过,该模块的代码才会提交至正式节点。

在一实施例中,在管理代码的服务器中增加与所述正式节点对应的审核节点,如此能够减少设备的投入。即步骤S101,所述将提交的模块的代码传入审核节点,可以包括:将提交的模块的代码通过管理代码的服务器上增加的与所述正式节点对应的审核节点传入。

服务器将代码提交至正式节点,本申请实施例在服务器中增加与所述正式节点对应的审核节点,通过审核节点将提交的模块的代码传入。如此能够减少设备的投入,节约成本。

在一实施例中,为了使模块的代码高效有序、且尽可能降低设备投入成本的基础上在多个项目对应的编译机上进行编译预验证,可以预先根据项目模块清单生成预设规则文件,确保一个项目的验证集中到一个编译机上。其中,所述预设规则文件能够自动更新。

即步骤S102,在所述审核节点提取所述模块的代码,利用多个项目对应的多个编译机对所述模块的代码进行独立并行的编译预验证,可以包括:子步骤S1021和子步骤S1022,如图2所示。

子步骤S1021:在所述审核节点提取所述模块的代码,根据预设规则文件,确定所述模块需要进行验证的多个项目,所述预设规则文件包含每个项目的所有模块,还可以包括每个模块对应的分支。

子步骤S1022:将所述模块自动匹配到需要验证的多个项目分别对应的多个编译机上,利用所述多个编译机对所述模块的代码进行编译预验证,若一个项目上有多个模块的代码需要验证,则利用所述项目对应的同一个编译机对所述多个模块的代码批量进行编译预验证。

一个软件项目是由多个软件模块构成的,而同一个软件模块为了不同的功能会有不同的分支,每个分支会在多个不同的项目上进行验证,一个模块需要验证的项目即为该模块每个分支需要验证的项目的集合。预设规则文件包含每个项目的所有模块及每个模块对应的分支。不同的项目对应有自己项目名的预设规则文件。该项目的预设规则文件的每一项对应一个模块和该模块对应的分支,并且该预设规则文件能够自动更新,例如该预设规则文件能够随着repo管理的manifest文件的更新而自动更新。

根据预设规则文件确定模块需要进行验证的多个项目后,可以将模块自动匹配到需要验证的多个项目对应的多个编译机上,使所述多个编译机对所述模块的代码进行编译预验证,若一个项目上有多个模块的代码需要验证,则使所述项目对应的同一个编译机对所述多个模块的代码批量进行编译预验证。

例如:开发人员提交模块1,模块1有3个分支,分别是分支1、分支2和分支3,用户可以提交至三个审核节点:审核节点1、审核节点2和审核节点3,根据预设规则文件,可知:模块1的分支1需要验证项目1、项目2、项目3;模块1的分支2需要验证项目4、项目5;模块1的分支3需要验证项目6、项目7。如果模块1提交三个分支的修改,则模块1需要验证的项目是项目1、项目2、项目3、项目4、项目5、项目6、项目7。

如果开发人员还提交其他模块,或者其他开发人员提交其他模块,其他模块包括模块2、模块3、模块4,同理根据预设规则文件可知:模块2需要验证的项目是项目1、项目2、项目3、项目4、项目5、项目7;模块3需要验证的项目是项目1、项目2、项目3、项目4、项目6;模块4需要验证的项目是项目1、项目2、项目3、项目4、项目5、项目6。

那么,项目1对应的编译机1可以对模块1、模块2、模块3、模块4的代码批量进行编译预验证,项目2对应的编译机2可以对模块1、模块2、模块3、模块4的代码批量进行编译预验证,项目3对应的编译机3可以对模块1、模块2、模块3、模块4的代码批量进行编译预验证,项目4对应的编译机可以对模块1、模块2、模块3、模块4的代码批量进行编译预验证,项目5对应的编译机可以对模块1、模块2、模块4的代码批量进行编译预验证,项目6对应的编译机可以对模块1、模块3、模块4的代码批量进行编译预验证,项目7对应的编译机可以对模块1、模块2的代码批量进行编译预验证。

本实施例中预设规则文件能够使模块的代码自动匹配到项目,一个项目对应一个编译机,同一个编译机对多个模块的代码批量进行编译预验证,能够尽量减少编译机的投入,尽可能降低设备投入成本。

例如:项目1至项目6对应的预设规则文件分别为预设规则文件1至预设规则文件6,现有3个模块分别为模块1至模块3,项目1至项目6对应的编译机分别为编译机1至编译机6,编译机1至编译机6能够独立并行的进行演绎预验证。根据预设规则文件1至预设规则文件6,确定模块1需要在项目1、项目2、项目4上进行编译预验证,模块2需要在项目2、项目3、项目4、项目5、项目6上进行编译预验证,模块3需要在项目1、项目2、项目3、项目4、项目5上进行编译预验证。

因此,可以将模块1、模块3自动匹配到项目1对应的编译机1进行编译预验证,将模块1、模块2、模块3自动匹配到项目2对应的编译机2进行编译预验证,将模块2、模块3自动匹配到项目3对应的编译机3进行编译预验证,将模块1、模块2、模块3自动匹配到项目4对应的编译机4进行编译预验证,将模块2、模块3自动匹配到项目5对应的编译机5进行编译预验证,将模块2自动匹配到项目6对应的编译机6中进行编译预验证。

在一实施例中,如果某一个模块的代码验证报错,可以回退该模块的代码,并进行其他模块的代码的编译验证,并不会停止下来,如此能够提高编译的效率。即所述方法还可以包括:步骤S105。

步骤S105:在所述同一个编译机对多个模块的代码批量进行编译预验证的过程中,如果一个模块的代码在进行编译预验证时报错,则利用所述同一个编译机回退报错的模块的代码,并继续对其他模块的代码进行编译预验证,直到所述多个模块的代码在所述同一个编译机上验证完毕。

本实施例中,在编译预验证的过程中,并不会因为某一个模块的代码的编译预验证报错而停止,而是在回退该报错的模块的代码后,继续进行其他模块的代码的编译预验证,直到所述多个模块的代码在所述同一个编译机上验证完毕。如此,能够有效提高编译效率。在回退该报错的模块的代码时,还可以邮件通知相关负责人修改。

参见图3,图3是本申请多模块多项目的持续集成系统一实施例的结构示意图,需要说明的是,本实施例的系统能够实现上述多模块多项目的持续集成方法,相关内容的详细说明,请参见上述方法部分,在此不再赘叙。需要说明的是,本申请实施例的系统在实际应用中可能存在很多不同的具体结构,在此不做限定,只要能够实现本实施例系统的功能即可。

所述系统100包括多个编译机30、存储器1以及处理器2,所述多个编译机用于对模块的代码进行独立并行的编译预验证;所述存储器用于存储计算机程序;所述处理器用于执行所述计算机程序并在执行所述计算机程序时实现如上任一项所述的多模块多项目的持续集成方法。多个编译机30、存储器1分别与处理器2通信连接。

其中,处理器2可以是微控制单元、中央处理单元或数字信号处理器,等等。存储器1可以是Flash芯片、只读存储器、磁盘、光盘、U盘或者移动硬盘等等。

参见图4,图4是本申请多模块多项目的持续集成装置实施例的结构示意图,需要说明的是,本实施例的装置是上述系统在一实施例中一个具体装置结构。

所述装置100’包括:管理代码的服务器10、多个编译机30以及结果分析设备20。其中,服务器10能够与编译机30、结果分析设备20进行通信,编译机30能够与结果分析设备20进行通信。

所述服务器10设置有与正式节点12对应的审核节点11,提交的模块的代码能够传入审核节点11。其中,模块有多个不同的分支,审核节点11有多个,提交的模块的代码能够分别传入多个审核节点11。所述多个编译机30分别对应多个项目,用于对所述模块的代码进行独立并行的编译预验证。结果分析设备20用于分析编译预验证的结果,当所述模块的代码在其需要验证的多个项目上的编译预验证通过后,将所述模块的代码提交到正式节点12。

其中,编译机可以在不繁忙的时间(例如每天的上午8点之前)从服务器获取对应项目的基础环境,为模块的代码在该项目进行编译预验证提供基础环境。

在一实施例中,所述装置100’还包括:代码审核,用于在所述审核节点提取所述模块的代码以进行审核。

所述结果分析设备20还用于当所述模块的代码在其需要验证的多个项目上的编译预验证和代码审核均通过后,将所述模块的代码提交到正式节点。

在一实施例中,所述服务器10上还存储有预设规则文件,所述预设规则文件包含每个项目的所有模块及每个模块对应的分支,所述预设规则文件能够自动更新。

结合参见图5,所述装置100’还包括:主控设备40和数据库50。其中,主控设备40能够与服务器10、数据库50以及编译机30进行通信。数据库50能够与编译机30、结果分析设备20进行通信。

所述主控设备40从所述服务器10获取所述预设规则文件,从所述服务器10的审核节点11获取所述模块的代码对应的单据,所述单据包括所述模块的名称和所述模块的分支;根据所述预设规则文件和所述单据,确定每个单据需要进行验证的多个项目,将确定后的信息记录到所述数据库50中,当编译机30空闲时,通知编译机30需要验证的所述单据。

所述编译机30接收到通知后,从所述数据库50中获取需要验证的所述单据,并对所述单据的代码进行编译预验证;当一个项目上有多个单据需要验证时,所述编译机从所述数据库中获取需要验证的多个单据,并对多个单据的代码批量进行编译预验证。

其中,所述数据库50记录每个单据的编号、每个单据需要验证的项目的名称、每个单据的状态,所述主控设备40将所述单据记录到所述数据库50时,控制数据库50记录所述单据的状态为数据库初始状态(例如,可以记录为“open”),所述主控设备40通知编译机30时,控制数据库50记录所述单据的状态为项目开始编译(例如,可以记录为“ready”),当编译机30对一个单据的编译预验证通过时,控制数据库50记录所述单据的状态为项目验证通过(例如,可以记录为“incoming”),并将验证结果发送给结果分析设备20。

在一实施例中,同一个编译机30对多个单据的代码批量进行编译预验证的过程中,如果一个单据的代码在进行编译预验证时报错,则所述编译机30回退该报错的单据,将验证结果发送给结果分析设备20,并接着对其他单据的代码进行编译预验证,直到所述多个单据的代码在所述编译机30上验证完毕。

当单据的代码在进行编译预验证时报错,控制数据库50记录所述单据的状态为项目验证失败(例如,可以记录为“error”)。如果用户临时抛弃该单据,则控制数据库50记录所述单据的状态为抛弃该单据(例如,可以记录为“abandon”)。

所述结果分析设备20用于当所述单据对应的代码在需要验证的多个项目上的编译预验证通过后,通过所述数据库50确定所述单据在需要验证的多个项目上的状态均为项目验证通过时,将所述单据对应的代码提交到正式节点,从而保证代码的提交质量。

本申请还提供一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时使所述处理器实现如上任一项所述的多模块多项目的持续集成方法。相关内容的详细说明,请参见上述方法部分,在此不再赘叙。

其中,该计算机可读存储介质可以是上述系统的内部存储单元,例如硬盘或内存。该计算机可读存储介质也可以是上述系统的外部存储设备,例如配备的插接式硬盘、智能存储卡、安全数字卡、闪存卡,等等。

本领域普通技术人员可以理解,上文中所公开方法中的全部或某些步骤、系统、设备中的功能模块/单元可以被实施为软件、固件、硬件及其适当的组合。

在硬件实施方式中,在以上描述中提及的功能模块/单元之间的划分不一定对应于物理组件的划分;例如,一个物理组件可以具有多个功能,或者一个功能或步骤可以由若干物理组件合作执行。某些物理组件或所有物理组件可以被实施为由处理器,如中央处理器、数字信号处理器或微处理器执行的软件,或者被实施为硬件,或者被实施为集成电路,如专用集成电路。这样的软件可以分布在计算机可读介质上,计算机可读介质可以包括计算机存储介质(或非暂时性介质)和通信介质(或暂时性介质)。如本领域普通技术人员公知的,术语计算机存储介质包括在用于存储信息(诸如计算机可读指令、数据结构、程序模块或其他数据)的任何方法或技术中实施的易失性和非易失性、可移除和不可移除介质。计算机存储介质包括但不限于RAM、ROM、EEPROM、闪存或其他存储器技术、CD-ROM、数字多功能盘(DVD)或其他光盘存储、磁盒、磁带、磁盘存储或其他磁存储装置、或者可以用于存储期望的信息并且可以被计算机访问的任何其他的介质。此外,本领域普通技术人员公知的是,通信介质通常包含计算机可读指令、数据结构、程序模块或者诸如载波或其他传输机制之类的调制数据信号中的其他数据,并且可包括任何信息递送介质。

以上参照附图说明了本申请的优选实施例,并非因此局限本申请的权利范围。本领域技术人员不脱离本申请的范围和实质内所作的任何修改、等同替换和改进,均应在本申请的权利范围之内。

相关技术
  • 现场项目的进度管理方法、系统、装置及存储介质
  • 存储设备的系统重置方法、装置、系统及可读存储介质
  • 存储系统的数据处理方法、装置、系统及可读存储介质
  • 医疗检验项目的规则正确性验证方法及装置、计算机可读存储介质
  • 人口迁徙目的确定方法、装置、设备及存储介质
  • 多模块项目的快速持续集成方法和快速持续集成装置
  • 客户端组件化项目的持续集成方法、系统、设备及介质
技术分类

06120115952233