一种项目持续集成的方法和系统与流程

文档序号:12824640阅读:170来源:国知局
一种项目持续集成的方法和系统与流程

本发明涉项目集成技术领域,尤其涉及一种项目持续集成的方法和系统。



背景技术:

持续集成是一种软件开发实践。在持续集成过程中,团队成员频繁地集成工作成果,每次集成会经过自动构建的检验,以尽快发现集成错误。目前,产用的持续集成流程如图1所示,可以包括:开发者提交代码到代码评审服务器;接着,代码评审服务器通知相应的评审员进行评审;然后,代码评审服务器触发持续集成服务器进行集成构建工作,并有持续集成服务器向测试环境下达测试任务,并接收测试环境的测试反馈;最后,代码评审服务器接收由持续集成服务器所返回的评审和构建结果,并根据返回结果判断是否将代码合并至代码仓库。

在对图1所示的持续集成实践过程中,随着软件规模和复杂度越来越大,持续集成的代价也随之升高,所述代价是指持续集成任务数量和单个持续集成任务时间。在大规模软件协同开发情形下,一次代码提交往往需要等待较长的时间后才能得到持续集成服务器的反馈结果。例如,本次代码提交依赖于上次未测试结束的提交。假设每个集成任务需要1个小时,那么由于依赖导致顺序化的任务队列一天最多只能被处理24个集成任务,严重限制开发进度。

同时,随着项目复杂度的增加以及测试覆盖面的增大,测试任务数量也随之增加。因此,当持续集成的任务数量随着业务的增加而增加时,持续集成平台需要执行更多的任务,因此需要投入更多的计算资源(持续集成服务器和测试环境),以保证及时地从测试结果中得到反馈。但是传统的持续集成装置无法做到有效的自适应扩展;并且,随着项目逐渐完善,需要执行的任务也随之减 少,测试环境便又空余出来,又会导致测试资源利用率不高。



技术实现要素:

为解决上述技术问题,本发明实施例期望提供一种项目持续集成的方法和系统,能够加快项目持续集成进度,提高开发效率,并且在项目逐渐进行时,通过动态调整测试资源的规模,提升测试资源的利用率。

本发明的技术方案是这样实现的:

第一方面,本发明实施例提供了一种项目持续集成的方法,所述方法包括:

将提交事件流中的提交事件进行合并排列,生成待测试事件队列;

将所述待测试事件队列中的提交事件进行基于流水线的并行测试;

将测试成功的第一提交事件合并至代码仓库;

将测试失败的第二提交事件以及与所述第二提交事件相关联的第三提交事件从所述待测试任务队列删除。

在上述方案中,所述方法还包括:

收集负载状态,并根据负载的增加状态从云端申请新的持续集成组件;

将所述新的持续集成组件加入到项目持续集成环境中。

在上述方案中,所述根据负载从云端申请新的持续集成组件,以及将所述新的持续集成组件加入到项目持续集成环境中,具体包括:

从镜像服务器获取新版本的持续集成组件,并加入到所述项目持续集成环境;

检测所述新版本的持续集成组件在预设的时间段内是否正常工作:

当正常工作时,替换所述项目持续集成环境中旧版本的持续集成组件;

当非正常工作时,删除所述新版本的持续集成组件。

在上述方案中,所述方法还包括:

根据负载的降低状态删除所述项目持续集成环境中的持续集成组件。

在上述方案中,所述将所述待测试事件队列中的提交事件进行基于流水线的并行测试,具体包括:

按照预设的负载均衡策略将所述待测试事件队列中的提交事件传输至并行测试的流水线中。

第二方面,本发明实施例提供了一种项目持续集成的系统,所述系统包括:代码评审服务器、持续集成服务器和代码仓库;所述系统还包括:与所述代码评审服务器以及所述持续集成服务器相连接的任务调度服务器;

所述任务调度服务器用于:

将所述代码评审服务器传输的提交事件流中的提交事件进行合并排列,生成待测试事件队列;

以及,将所述待测试事件队列中的提交事件传输至多个持续集成服务器,以实现基于流水线的并行测试;

以及,从所述持续集成服务器接收所述待测试事件队列中的提交事件的测试结果;

以及,将测试成功的第一提交事件合并至代码仓库;

以及,将测试失败的第二提交事件以及与所述第二提交事件相关联的第三提交事件从所述待测试任务队列删除。

在上述方案中,所述系统还包括:与所述任务调度服务器、所述持续集成服务器以及测试环境相连接的节点控制器;

所述节点控制器用于:

收集所述任务调度服务器的负载状态,并根据负载的增加状态从云端申请新的持续集成组件;

以及,将所述新的持续集成组件加入到所述持续集成服务器和所述测试环境。

在上述方案中,所述系统还包括:与所述节点控制器相连接的镜像服务器;相应地,所述节点控制器具体用于:

从镜像服务器获取新版本的持续集成组件,并加入到所述持续集成服务器和所述测试环境;

以及,检测所述新版本的持续集成组件在预设的时间段内是否正常工作:

以及,当所述新版本的持续集成组件正常工作时,替换所述持续集成服务器和所述测试环境中旧版本的持续集成组件;

以及,当所述新版本的持续集成组件非正常工作时,删除所述新版本的持续集成组件。

在上述方案中,所述节点控制器还用于:

根据负载的降低状态删除所述持续集成服务器和所述测试环境中的持续集成组件。

在上述方案中,所述任务调度服务器,具体用于:按照预设的负载均衡策略将所述待测试事件队列中的提交事件传输至各个所述持续集成服务器。

本发明实施例提供了一种项目持续集成的方法和系统,通过对提交事件进行合并排列后以流水式并行测试方法进行测试,并将测试失败的提交事件与以及与测试失败提交事件相关联的提交事件从所述待测试任务队列删除;并且根据项目持续集成的负载状态对持续集成环境中的组件进行增减,能够加快项目持续集成进度,提高开发效率,并且在项目逐渐完善时,通过调整测试资源的规模,提升测试资源的利用率。

附图说明

图1为现有技术的一种持续集成系统结构示意图;

图2为本发明实施例提供的一种项目持续集成系统结构示意图;

图3为本发明实施例提供的一种具体实现流程图;

图4为本发明实施例提供的另一种项目持续集成系统结构示意图;

图5为本发明实施例提供的再一种项目持续集成系统结构示意图;

图6为本发明实施例提供的一种项目持续集成的方法流程示意图;

图7为本发明实施例提供的一种项目持续集成的方法具体实现流程示意图;

图8为本发明实施例提供的一种将持续集成组件加入到项目持续集成环境的流程示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。

实施例一

在图1所示的现有持续集成系统的基础上,参见图2,其示出了本发明实施例提供的一种项目持续集成系统20,该系统20除了包括图1中所示的代码评审服务器201、持续集成服务器202、测试环境203和代码仓库204以外,还包括:任务调度服务器210,需要说明的是,任务调度服务器210与所述代码评审服务器201以及所述持续集成服务器202相连接;该任务调度服务器210可以用于:

将代码评审服务器201传输的提交事件流中的提交事件进行合并排列,生成待测试事件队列;

以及,将所述待测试事件队列中的提交事件传输至多个持续集成服务器202;以使得通过各持续集成服务器202将提交事件下发至对应的测试环境203中实现基于流水线的并行测试;

以及,从持续集成服务器202接收所述待测试事件队列中的提交事件的测试结果;

以及,将测试成功的第一提交事件合并至代码仓库204;

以及,将测试失败的第二提交事件以及与所述第二提交事件相关联的第三提交事件从所述待测试任务队列删除。

需要说明的是,在具体实现过程中,参见图3,具体的实现流程包括:

s301:任务调度服务器210可以初始创建两个队列,分别是q1和q2;

s302:任务调度服务器210接收代码评审服务器201发送的提交事件流,其中,提交事件流中的提交事件为a、b、c、d,并按照提交事件的产生顺序入队q1,即q1=<a,b,c,d>;

s303:任务调度服务器210将q1中的提交事件进行排列合并,将合并后 的提交事件入队q2,即q2=<head+a,head+a+b,head+a+b+c,head+a+b+c+d>;

s304:任务调度服务器210生成队q2中的提交事件对应的测试任务,并将所有测试任务传输至多个持续集成服务器202;以使得通过各持续集成服务器202将提交事件下发至对应的测试环境203中实现基于流水线的并行测试;

s305:任务调度服务器210实时监控持续集成服务器202返回的测试结果:

s306:将测试成功的第一提交事件合并至代码仓库204,例如,队首head+a任务顺利结束,则出队q1和q2的队首任务,分别为a和head+a;

s307:将测试失败的第二提交事件以及与所述第二提交事件相关联的第三提交事件从所述待测试任务队列删除,比如,当有测试任务失败时,任务调度服务器210删除失败任务在q1和q2中对应的提交事件,并且在q1和q2中,删除与失败任务相关联的提交事件,例如,在head+a还未完成测试时,持续集成服务器202返回q2中的提交事件head+a+b提前失败了,并且q1中的提交事件c依赖提交事件b,那么必然是b引入了代码缺陷,因此任务调度服务器210从q1中删除b和依赖于它的c,并从q2中停止并删除从head+a+b开始到队尾的所有任务。删除后的两个队列分别为q1=<a>,q2=<head+a>。

s308:任务调度服务器210继续接收代码评审服务器201发送的提交事件d和e,并转至步骤s302将提交事件d和e入队q1。

通过上述的过程,可以理解地,任务调度服务器210不仅能够把提交事件合并后通过并行测试的方式实现测试,而且能够及时的将测试失败的提交事件以及依赖于测试失败的提交事件的关联提交事件一并进行删除和停止测试,从而根据提交事件之间的依赖性减少了测试失败的提交事件所引发的测试延误时间,加快了项目持续集成进度,大大提升了项目持续集成的效率。

示例性地,因为任务调度服务器210负责将待测试事件分发至持续集成服务器202,因此,任务调度服务器210能够获知所有待测试事件的任务状态,持续集成服务器201对于待测试事件而言仅是一个无状态的服务,所以,具体地,任务调度服务器210用于按照预设的负载均衡策略将所述待测试事件队列 中的提交事件传输至各个所述持续集成服务器202。

示例性地,参见图4,本发明实施例提供的持续集成系统20,还可以包括节点控制器220;需要说明的是,节点控制器220与任务调度服务器210、持续集成服务器202以及测试环境203相连接,该节点控制器220,用于收集所述任务调度服务器210的负载状态,并根据负载的增加状态从云端申请新的持续集成组件;

以及,将所述新的持续集成组件加入到持续集成服务器202和测试环境203。

示例性地,在项目逐渐完善时,任务调度服务器210的负载状态降低时,节点控制器220还可以用于根据负载的降低状态删除持续集成服务器202和测试环境203中的持续集成组件。

需要说明的是,节点控制器220负责从任务调度服务器210中获取系统的负载饱和情况,并通过从云平台动态申请资源加入该项目持续集成环境,从而达到随负载进行扩充的能力。在这里,申请的资源则是新的持续集成组件,包括新的持续集成服务器和测试环境。由上可知,节点控制器220通过调整资源的规模,能够提升测试资源的利用率。

示例性地,为了保证在项目持续集成的过程中不出现服务中断的现象,参见图5,本发明实施例提供的持续集成系统20,还可以包括镜像服务器230,需要说明的是,镜像服务器230与节点控制器220相连接,相应地,节点控制器220具体用于:

从镜像服务器230获取新版本的持续集成组件,并加入到持续集成服务器202和203测试环境;

以及,检测所述新版本的持续集成组件在预设的时间段内是否正常工作:

以及,当所述新版本的持续集成组件正常工作时,替换持续集成服务器202和测试环境203中旧版本的持续集成组件;

以及,当所述新版本的持续集成组件非正常工作时,删除所述新版本的持续集成组件。

于是,节点控制器220就提供了一种滚动升级和出错回滚机制,可以理解 地,出错回滚机制即滚动升级的逆操作。需要说明的是,节点控制器220也会从用于代码仓库204中检出制作镜像的代码,并触发任务调度服务器210进行镜像的制作。另外,由于所有的持续集成组件都位于容器和虚拟机之中,因此对一个持续集成组件进行滚动升级和出错回滚都是原子操作。

本实施例提供了一种项目持续集成系统20,通过提交事件进行合并排列后通过流水式并行测试方法进行测试,并将测试失败的提交事件与以及与测试失败提交事件相关联的提交事件从所述待测试任务队列删除;并且通过节点控制器根据项目持续集成的负载状态对持续集成环境中的组件进行增减,从而加快项目持续集成进度,提高开发效率,并且在项目逐渐完善时,通过调整测试资源的规模,提升测试资源的利用率。

实施例二

基于前述实施例所述的项目持续集成系统,参见图6,其示出了本发明实施例提供的一种项目持续集成的方法,该方法可以通过实施例一中所述的项目持续集成系统实现,该方法可以包括:

s601:将提交事件流中的提交事件进行合并排列,生成待测试事件队列;

s602:将所述待测试事件队列中的提交事件进行基于流水线的并行测试;

s603:将测试成功的第一提交事件合并至代码仓库;

s604:将测试失败的第二提交事件以及与所述第二提交事件相关联的第三提交事件从所述待测试任务队列删除。

需要说明的是,在具体实现过程中,图6所示的技术方案可以如图7所示,可以包括:

s701:初始创建两个队列,分别是q1和q2;

s702:接收提交事件流,其中,提交事件流中的提交事件为a、b、c、d,并按照提交事件的产生顺序入队q1,即q1=<a,b,c,d>;

s703:将q1中的提交事件进行排列合并,将合并后的提交事件入队q2,即q2=<head+a,head+a+b,head+a+b+c,head+a+b+c+d>;

s704:生成队q2中的提交事件对应的测试任务,并将所有测试任务基于 流水线的并行测试;

s705:实时监控返回的测试结果:

s706:将测试成功的第一提交事件合并至代码仓库,例如,队首head+a任务顺利结束,则出队q1和q2的队首任务,分别为a和head+a;

s707:将测试失败的第二提交事件以及与所述第二提交事件相关联的第三提交事件从所述待测试任务队列删除,比如,当有测试任务失败时,任务调度服务器210删除失败任务在q1和q2中对应的提交事件,并且在q1和q2中,删除与失败任务相关联的提交事件,例如,在head+a还未完成测试时,持续集成服务器202返回q2中的提交事件head+a+b提前失败了,并且q1中的提交事件c依赖提交事件b,那么必然是b引入了代码缺陷,因此任务调度服务器210从q1中删除b和依赖于它的c,并从q2中停止并删除从head+a+b开始到队尾的所有任务。删除后的两个队列分别为q1=<a>,q2=<head+a>。

s708:继续接收提交事件d和e,并转至步骤s702将提交事件d和e入队q1。

可以理解地,通过上述的过程不仅能够把提交事件合并后通过并行测试的方式实现测试,而且能够及时的将测试失败的提交事件以及依赖于测试失败的提交事件的关联提交事件一并进行删除和停止测试,从而根据提交事件之间的依赖性减少了测试失败的提交事件所引发的测试延误时间,加快了项目持续集成进度,大大提升了项目持续集成的效率。

示例性地,所述方法还包括:

收集负载状态,并根据负载的增加状态从云端申请新的持续集成组件;

以及,将所述新的持续集成组件加入到项目持续集成环境中。

进一步地,为了保证在项目持续集成的过程中不出现服务中断的现象,参见图8,所述根据负载从云端申请新的持续集成组件,以及将所述新的持续集成组件加入到项目持续集成环境中,具体包括:

s801:从镜像服务器获取新版本的持续集成组件,并加入到所述项目持续集成环境;

s802:检测所述新版本的持续集成组件在预设的时间段内是否正常工作:

s803:当正常工作时,替换所述项目持续集成环境中旧版本的持续集成组件;

s804:当非正常工作时,删除所述新版本的持续集成组件。

示例性地,所述方法还包括:

根据负载的降低状态删除所述项目持续集成环境中的持续集成组件。

示例性地,所述将所述待测试事件队列中的提交事件进行基于流水线的并行测试,具体包括:

按照预设的负载均衡策略将所述待测试事件队列中的提交事件传输至并行测试的流水线中。

本实施例提供了一种项目持续集成方法,通过提交事件进行合并排列后通过流水式并行测试方法进行测试,并将测试失败的提交事件与以及与测试失败提交事件相关联的提交事件从所述待测试任务队列删除;并且根据项目持续集成的负载状态对持续集成环境中的组件进行增减,从而加快项目持续集成进度,提高开发效率,并且在项目逐渐完善时,通过调整测试资源的规模,提升测试资源的利用率。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个 流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1