软件持续集成的方法、装置和系统的制作方法

文档序号:7760618阅读:111来源:国知局
专利名称:软件持续集成的方法、装置和系统的制作方法
技术领域
本发明涉及持续集成技术领域,特别涉及一种软件持续集成的方法、装置和系统。
背景技术
CI (Continuous Integration,持续集成)是一种自动化的软件创建与测试过程, 在软件开发项目中,CI系统将每个CI任务分解成多个CI子任务,如将对某软件的CI任务 分解成获取最新代码、编译代码、打包、发布、安装、自动测试、质量检测和数据度量等CI子 任务,通过不断的执行CI子任务,可尽早地发现软件缺陷,并对其进行修复。由此可见,不 同的CI系统的优劣可对于软件的开发效率和投入成本造成不同的影响。现有的CI系统如图1所示,主要由CI主控和CI代理组成,其对软件进行CI的主 要步骤为首先,用户向某一CI主控下发CI任务;然后,该CI主控将该CI任务分解成多个 CI子任务,并将该CI子任务下发至相应的CI代理执行,其中每个CI代理负责执行的CI任 务类型是固定的;最后,由该相应的CI代理执行该CI子任务,并将执行结果返回CI主控。在实现本发明的过程中,发明人发现现有技术至少存在以下问题现有的持续集成系统中,由于CI代理负责执行的CI任务类型是固定的,CI主控 只能下发固定的CI任务至相应的CI代理,没有选择的可能性,从而CI代理资源的共享程 度低,资源利用率低下。

发明内容
本发明实施例提供了一种软件持续集成的方法,以实现CI代理间的负载分担,提 高CI代理的利用率。—方面,本发明实施例提供一种软件持续集成的方法,包括接收并管理CI主控发送的CI子任务;根据当前管理的CI代理资源池中至少两个CI代理的在线通信状态、所述至少两 个CI代理的计算资源闲置状态,确定执行当前管理的至少一个CI子任务中的当前可执行 子任务的目的CI代理,并将所述当前可执行子任务发送至所述目的CI代理,使所述目的CI 代理执行所述可执行子任务,所述至少两个CI代理为通用计算单元。本发明实施例还提供了一种软件持续集成的装置,所述装置包括可执行子任务接收模块,用于接收并管理CI主控发送的CI子任务 ;目的CI代理确定模块,用于根据当前管理的CI代理资源池中至少两个CI代理的 在线通信状态、所述至少两个CI代理的计算资源闲置状态,确定执行当前管理的至少一个 CI子任务中的当前可执行子任务的目的CI代理,并将所述当前可执行子任务发送至所述 目的CI代理,使所述目的CI代理执行所述可执行子任务,所述至少两个CI代理为通用计 算单元。本发明实施例还提供了一种软件持续集成的系统,包括至少两个CI主控、CI管 理机、至少两个CI代理,所述至少两个CI代理为通用计算单元;
所述CI主控用于接收用户下发的CI任务,将所述CI任务分解成至少两项CI子任务,向所述CI管理机发送当前可执行的CI子任务;所述CI管理机用于接收并管理所述CI主控发送的CI子任务;根据当前管理的CI 代理资源池中至少两个CI代理的在线通信状态、所述至少两个CI代理的计算资源闲置状 态,确定执行自身管理的至少一个CI子任务中的当前可执行子任务的目的CI代理,并将所 述当前可执行子任务发送至所述目的CI代理;所述CI代理为所述CI管理机确定的目的CI代理时,用于接收并执行所述CI管 理机发送的当前可执行子任务。可见,本实施例通过根据当前管理的CI代理资源池中至少两个CI代理的在线通 信状态、所述至少两个CI代理的计算资源闲置状态,确定执行所述可执行子任务的目的CI 代理,实现CI代理间的负载分担,提高CI代理的利用率以及持续集成的效率。


图1是现有技术中CI系统的结构示意图;图2是本发明实施例1中提供的软件持续集成的方法流程图;图3是本发明实施例2中提供的软件持续集成的方法流程图;图4是本发明实施例3中提供的软件持续集成的方法流程图;图5是本发明实施例4中提供的第一种CI管理机的结构示意流程图;图6是本发明实施例4中提供的第二种CI管理机的结构示意流程图;图7是本发明实施例4中提供的第三种CI管理机的结构示意流程图;图8是本发明实施例5中提供的软件持续集成系统的结构示意流程图。
具体实施例方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方 式作进一步地详细描述。实施例1如图2所示,本发明实施例提供了一种软件持续集成的方法,该方法包括以下步 骤SlOl 接收CI主控发送的CI子任务;S102 根据当前管理的CI代理资源池中至少两个CI代理的在线通信状态、所述至 少两个CI代理的计算资源闲置状态,确定执行当前管理的至少一个CI子任务中的当前可 执行子任务的目的CI代理,并将所述当前可执行子任务发送至所述目的CI代理,使所述目 的CI代理执行所述可执行子任务,所述至少两个CI代理为通用计算单元。本实施例中,当前管理的至少一个CI子任务中的当前可执行子任务,可以是当前 接收的所述CI子任务,也可以是之前接收的CI子任务。可见,本实施例通过根据当前管理的CI代理资源池中至少两个CI代理的在线通 信状态、所述至少两个CI代理的计算资源闲置状态,确定执行所述可执行子任务的目的CI 代理,实现CI代理间的负载分担,提高CI代理的利用率以及持续集成的效率;通过CI管理 机接收并管理一个或多个CI主控发送的CI子任务,并由CI管理机将自身当前管理的至少一个CI子任务中的当前可执行子任务发送给CI代理处理,进而支持CI主控间的并发任务 控制。实施例2如图3所示,本发明实施例提供了一种软件持续集成的方法,该方法包括以下步 骤
S201 =CI管理机接收CI主控和CI代理发送的注册请求;具体的,CI主控和CI代理启动时,以心跳的形式发送向CI管理机注册请求,与CI 管理机建立通讯连接,CI管理机中将产生一个由所有向其注册的CI代理组成的CI代理资 源池,资源池中的CI代理为通用的计算单元。其中,CI主控发送的注册请求的请求信息中包括CI主控间的子任务依赖关系和 其指定的CI代理类型,不同类型的CI代理可以支持不同操作系统和特殊CI任务。S202 =CI管理机接收CI主控和CI代理发送的注册请求,根据至少两个CI主控发 送的注册请求,获取至少两个CI主控间的子任务依赖关系和至少两个CI主控指定的CI代 理类型;根据至少两个CI代理发送的注册请求,获取所述CI代理的类型,将至少两个CI代 理按其类型组织成不同的CI代理资源组。具体的,CI管理机根据至少两个CI主控发送的注册请求,获取至少两个CI主控 间的子任务依赖关系和至少两个CI主控指定的CI代理类型,生成子任务依赖关系表和在 线CI代理类型表;CI管理机根据至少两个CI代理发送的注册请求,获取所述CI代理的类 型,将至少两个CI代理按其类型组织成不同的CI代理资源组,将CI代理类型相同的CI代 理划分在同一个CI代理资源组中。S203 用户发送CI任务到CI主控;具体的,用户可以通过Web(网络)或⑶I (Graphical User Interface,图形用户 接口)发送CI任务到CI主控;例如,用户需要更新其正在开发的Sl软件,即把对Sl新开发产生的内容与当前的 Sl软件的内容集成起来,则其可通过Web将向CI主控发送对软件Sl的CI任务。S204 =CI主控将接收到的CI任务分解为多个CI子任务,并将该多个CI子任务缓 存至主控任务队列;例如,当CI主控A接收到用户发送的针对软件Sl的CI任务a后,对该CI任务a 进行分解,得到三个CI子任务al、a2和a3,该三个CI子任务分别为获取软件A的最新代 码、安装该新代码和对该新代码进行自动测试;然后CI主控将上述三个CI子任务缓存至主 控任务队列Li。其中,缓存队列用于存储由CI主控分解得到的CI子任务。S205 =CI主控将当前可执行的CI子任务从主控任务队列取出,并指定当前可执行 的CI子任务的子任务权值;具体的,CI主控从主控任务队列中缓存的CI子任务中获取当前可执行的CI子任 务,并根据执行该CI子任务所需的CPU和内存来制定子任务权值。其中,子任务权值,用于表示CI子任务的任务量,子任务权值越大,表示该CI子任 务的任务量越大,则用于执行该CI子任务所需的计算资源越多;子任务权值越小,表示该 CI子任务的任务量越小,则用于执行该CI子任务所需的计算资源越少;其中,计算资源包括执行CI子任务所需的内存和执行设备的CPU资源。可执行子任务,是指其执行不依赖于 其他CI子任务的执行结果即可执行的CI子任务,和/或当前其需要依赖的其他CI子任务 的执行结果已产生的CI子任务;其中,其他CI子任务即可以是属于同一个主控的CI子任 务,也可以是属于不同主控的CI子任务。
例如,主控任务队列Ll中缓存了三个CI子任务al、a2和a3,分别为获取软件A的 最新代码、安装该新代码和对该新代码进行自动测试,其中,CI子任务al,即获取软件A的 最新代码,是当前可执行的CI子任务;CI子任务a2,即安装该新代码,需要依赖CI子任务 al的执行结果;CI子任务a3,即对该新代码进行自动测试,需要依赖主控B中的CI子任务 bl才能执行。则CI主控A从主控任务队列Ll中获取的当前可执行的CI子任务为al。当 主控任务队列中的CI子任务的执行依赖于其所在CI主控中的其他CI子任务的执行结果 时,CI主控查询该其他CI子任务的执行结果,如果该其他子任务已执行完,则该CI子任务 为当前可执行的CI子任务。当主控任务队列中的CI子任务的执行依赖于其他CI主控中的其他CI子任务的 执行结果时,CI主控向CI管理机发送查询信息,通过查询CI管理机中的依赖CI子任务执 行状态表,获取该CI子任务依赖的其他CI主控中的其他CI子任务的执行状态,如果该其 他CI子任务已执行完,则该CI子任务为可执行子任务;如果该其他子任务未执行,则该CI 子任务为当前不可执行的CI子任务,此时,CI子任务需等待其他CI子任务顺序执行完毕 后,方可执行;优选的,如果其他CI子任务未执行,也可由CI管理机优先执行该其他CI子 任务。S206 =CI主控将当前可执行的CI子任务发送至CI管理机;具体的,CI主控将当前可执行的CI子任务信息缓存至主控下发队列,排队等待下 发至CI管理机,该CI子任务信息中至少包括可执行子任务及其子任务权值;例如,CI主控A将当前可执行的CI子任务al及其子任务权值发送至CI管理机, 而子任务a2和a3则继续缓存在该主控任务队列Ll中,直至其依赖的CI子任务执行完毕, 使其成为当前可执行的CI子任务后方可执行。S207 =CI管理机接收CI主控发送的CI子任务;具体的,CI管理机接收CI子任务后,将其缓存至管理机任务队列,并排队等待将 该CI子任务下发至CI代理,使其执行该CI子任务。其中,CI管理机从管理机任务队列中取出自身当前可执行的CI子任务,简称为当 前可执行子任务;S208 =CI管理机根据所述CI主控指定的CI代理类型,确定目的CI代理资源组;具体的,CI管理机查询在线CI代理类型表,获取发送该可执行子任务CI主控的 CI代理类型。查询各CI代理资源组,确定与该CI代理类型相同的CI代理资源组,该资源 组为目的CI代理资源组。S209 =CI管理机在当前管理的CI代理资源池中的CI代理均处于在线通信状态 时,根据所述至少两个CI代理返回的空闲状态查询响应,获取至少两个CI代理的计算资源 闲置状态;具体的,由于CI管理机定时向CI代理发送心跳轮询查询,获取的在线通信状态, CI代理收到心跳查询信息后向CI管理机发送心跳响应信息,其返回的心跳响应信息中,包含其当前的计算资源闲置状态。S210 根据所述至少两个CI代理的计 算资源闲置状态生成所述至少两个CI代理 的空闲计算资源权值,如果当前CI代理的空闲计算资源权值大于或等于所述可执行子任 务的子任务权值,则所述当前CI代理为目的CI代理。具体的,CI管理机根据CI代理发送的计算资源闲置状态,得到CI代理的空闲资 源权值。CI管理机判断该空闲资源权值是否大于或等于可执行子任务的子任务权值,如果 是,则该CI代理为可选目的CI代理,CI管理机从可选目的代理中确定目的CI代理。优选 的,CI管理机可通过在可选CI代理中随机选择一个CI代理作为目的CI代理;也可以为了 更好的完成可执行子任务,选择可选CI代理中空闲资源权值最大的CI代理作为目的CI代 理。其中,目的CI代理是指其空闲资源权值大于或等于可执行子任务的CI子任务权 值的CI代理。空闲计算资源的权值,用于表示CI代理当前的计算能力,空闲资源权值越大, CI代理当前的计算能力越强,则CI代理可执行子任务的任务量越大;空闲资源权值越小, CI代理当前的计算能力越弱,则CI代理可执行子任务的任务量越小,优选的,可根据CI代 理当前的存储容量和其处理速度来制定其空闲资源权值。S211 =CI管理机将当前可执行子任务发送给目的CI代理;具体的,CI管理机将可执行子任务缓存至管理机下发队列,排队等待下发至目的 CI代理。优选的,可根据可执行子任务的优先级下发可执行子任务。S212 目的CI代理接收可执行子任务;具体的,目的CI代理将可执行子任务缓存至CI代理任务队列,排队等待执行。S213 目的CI代理将任务执行结果发送至CI管理机;并备份该任务执行结果,生 成任务执行日志;具体的,目的CI代理将任务执行结果缓存至CI代理上传队列,排队等待上传至CI 管理机;优选的,可采用单独的存储设备对任务执行结果进行备份,用户可直接访问该存储 设备查询任务执行结果,或通过发下查询命令至CI主控,由CI主控查询任务执行结果。S214 =CI管理机接收所述目的CI代理发送的所述可执行子任务的执行结果;S215 =CI管理机将接收到的执行结果发送给CI主控;S216 =CI管理机根据所述至少两个CI主控间的子任务依赖关系,判断是否有其他 CI主控的子任务的执行依赖所述执行结果,如果有,则记录所述执行结果;具体的,CI管理机将接收到的执行结果发送给CI主控后,查询CI主控注册表,判 断当前是否有其他主控子任务的执行需要依赖所述执行结果,如果有,则依赖CI子任务执 行状态表中记录该可执行子任务的执行结果,以便CI主控通过查询该依赖CI子任务执行 状态表,从而确定该主控可执行子任务。其中,CI主控注册表中记载了 CI主空间的子任务依赖。例如,CI管理机中存在一 CI主控注册表Tl,该表Tl中记载了通过CI管理机下发 CI任务的CI主控间的CI子任务依赖关系,如表Tl所示表Tl
权利要求
一种软件持续集成的方法,其特征在于,所述方法包括接收并管理CI主控发送的CI子任务;根据当前管理的CI代理资源池中至少两个CI代理的在线通信状态、所述至少两个CI代理的计算资源闲置状态,确定执行当前管理的至少一个CI子任务中的当前可执行子任务的目的CI代理,并将所述当前可执行子任务发送至所述目的CI代理,使所述目的CI代理执行所述可执行子任务,所述至少两个CI代理为通用计算单元。
2.根据权利要求1所述方法,其特征在于,所述根据当前管理的CI代理资源池中至少 两个CI代理的在线通信状态、所述至少两个CI代理的计算资源闲置状态,确定执行所述可 执行子任务的目的CI代理,包括在当前管理的CI代理资源池中的至少两个CI代理均处于在线通信状态时,根据所述 至少两个CI代理返回的空闲状态查询响应,获取至少两个CI代理的计算资源闲置状态;根据所述至少两个CI代理的计算资源闲置状态生成所述至少两个CI代理的空闲计算 资源权值,如果当前CI代理的空闲计算资源权值大于或等于所述可执行子任务的子任务 权值,则所述当前CI代理为目的CI代理。
3.根据权利要求2所述方法,其特征在于,所述方法还包括 接收所述CI主控发送的所述空闲计算资源权值的获取请求;响应所述获取请求,将所述空闲计算资源权值发送给所述CI主控,使所述CI主控将其 当前可执行的CI子任务发送给根据所述空闲计算资源权值确定的目的CI代理执行。
4.根据权利要求1所述方法,其特征在于,所述接收CI主控发送的可执行子任务之前, 所述方法还包括接收CI主控和CI代理发送的注册请求;根据至少两个CI主控发送的注册请求,获取所述至少两个CI主控间的子任务依赖关 系和所述至少两个CI主控指定的CI代理类型;根据至少两个CI代理发送的注册请求,获取所述至少两个CI代理的类型,将所述至少 两个CI代理按其类型组织成不同的CI代理资源组。
5.根据权利要求4所述方法,其特征在于,所述根据当前管理的CI代理资源池中至少 两个CI代理的在线通信状态、所述至少两个CI代理的计算资源闲置状态,确定执行当前管 理的至少一个CI子任务中的当前可执行子任务的目的CI代理,并将所述可执行子任务发 送至所述目的CI代理,使所述目的CI代理执行所述可执行子任务,所述CI代理为通用计 算单元之后,所述方法还包括接收所述目的CI代理发送的所述可执行子任务的执行结果; 根据所述至少两个CI主控间的子任务依赖关系,判断是否有其他CI主控的子任务的 执行依赖所述执行结果,如果有,则记录所述执行结果;响应所述其他CI主控发送的获取所述执行结果的请求,使所述其他CI主控根据所述 执行结果确定并发送当前可执行的CI子任务。
6.根据权利要求4所述方法,其特征在于,所述接收CI主控发送的可执行子任务之后, 所述方法还包括;根据所述CI主控指定的CI代理类型,确定目的CI代理资源组; 所述根据当前管理的CI代理资源池中至少两个CI代理的在线通信状态、所述至少两个CI代理的计算资源闲置状态,确定执行所述可执行子任务的目的CI代理,包括在所述目的CI代理资源组中,根据所述目的CI代理资源组中的CI代理的在线通信状 态、所述CI代理的计算资源闲置状态,确定执行所述可执行子任务的目的CI代理。
7.根据权利要求1所述方法,其特征在于,所述方法还包括向CI主控和CI代理发送心跳握手消息,以检测所述CI主控和所述CI代理的通信状 态;当检测到所述目的CI代理通信状态异常,将所述目的CI代理未完成的可执行子任务重 新发送给待执行所述可执行子任务的目的CI代理。
8.一种CI管理机,其特征在于,所述CI管理机包括可执行子任务接收模块,用于接收并管理CI主控发送的CI子任务; 目的CI代理确定模块,用于根据当前管理的CI代理资源池中至少两个CI代理的在线 通信状态、所述至少两个CI代理的计算资源闲置状态,确定执行当前管理的至少一个CI子 任务中的当前可执行子任务的目的CI代理,并将所述可执行子任务发送至所述目的CI代 理,使所述目的CI代理执行所述可执行子任务,所述至少两个CI代理为通用计算单元。
9.根据权利要求8所述CI管理机,其特征在于,所述目的CI代理确定模块包括 计算资源闲置状态获取单元,用于在当前管理的CI代理资源池中的至少两个CI代理均处于在线通信状态时,根据所述至少两个CI代理返回的空闲状态查询响应,获取至少两 个CI代理的计算资源闲置状态;第一目的CI代理确定单元,用于根据所述至少两个CI代理的计算资源闲置状态生成 所述至少两个CI代理的空闲计算资源权值,如果当前CI代理的空闲计算资源权值大于或 等于所述可执行子任务的子任务权值,则所述当前CI代理为目的CI代理。
10.根据权利要求9所述CI管理机,其特征在于,所述CI管理机还包括空闲计算资源权值获取请求接收模块,用于接收所述CI主控发送的所述空闲计算资 源权值的获取请求;空闲计算资源权值获取请求响应模块,用于响应所述获取请求,将所述空闲计算资源 权值发送给所述CI主控,使所述CI主控将其当前可执行的CI子任务发送给根据所述空闲 计算资源权值确定的目的CI代理执行。
11.根据权利要求8所述CI管理机,其特征在于,所述CI管理机还包括 注册请求接收模块,用于接收CI主控和CI代理发送的注册请求;CI代理类型获取模块,用于根据至少两个CI主控发送的注册请求,获取所述至少两个 CI主控间的子任务依赖关系和所述至少两个CI主控指定的CI代理类型;CI代理资源组管理模块,用于根据至少两个CI代理发送的注册请求,获取所述至少两 个CI代理的类型,将所述至少两个CI代理按其类型组织成不同的CI代理资源组。
12.根据权利要求11所述CI管理机,其特征在于,所述CI管理机还包括执行结果接收模块,用于接收所述目的CI代理发送的所述可执行子任务的执行结果; 执行结果记录模块,用于根据所述至少两个CI主控间的子任务依赖关系,判断是否有 其他CI主控的子任务的执行依赖所述执行结果,如果有,则记录所述执行结果;执行结果获取请求响应模块,用于响应所述其他CI主控发送的获取所述执行结果的 请求,使所述其他CI主控根据所述执行结果确定并发送当前可执行的CI子任务。
13.根据权利要求11所述CI管理机,其特征在于,所述目的CI代理确定模块包括目的CI代理资源组确定单元,用于根据所述CI主控指定的CI代理类型,确定目的CI 代理资源组;第二目的CI代理确定单元,用于在所述目的CI代理资源组中,根据所述目的CI代理 资源组中的CI代理的在线通信状态、所述CI代理的计算资源闲置状态,确定执行所述可执 行子任务的目的CI代理。
14.根据权利要求8所述CI管理机,其特征在于,所述CI管理机还包括通信状态检测模块,用于向CI主控和CI代理发送心跳握手消息,以检测所述CI主控 和所述CI代理的通信状态;可执行子任务重发模块,用于当检测到所述目的CI代理通信状态异常,将所述目的CI 代理未完成的可执行子任务重新发送给待执行所述可执行子任务的目的CI代理。
15.一种软件持续集成的系统,其特征在于,所述系统包括至少两个CI主控、CI管理 机、至少两个CI代理,所述至少两个CI代理为通用计算单元;所述CI主控用于接收用户下发的CI任务,将所述CI任务分解成至少两项CI子任务, 向所述CI管理机发送当前可执行的CI子任务;所述CI管理机用于接收并管理所述CI主控发送的CI子任务;根据当前管理的CI代 理资源池中至少两个CI代理的在线通信状态、所述至少两个CI代理的计算资源闲置状态, 确定执行自身管理的至少一个CI子任务中的当前可执行子任务的目的CI代理,并将所述 当前可执行子任务发送至所述目的CI代理;所述CI代理为所述CI管理机确定的目的CI代理时,用于接收并执行所述CI管理机 发送的当前可执行子任务。
16.根据权利要求13所述的系统,其特征在于,所述系统还包括所述CI主控,还用于向所述CI管理机发送注册请求;所述CI代理,还用于向所述CI管理机发送注册请求;所述CI管理机,还用于接收所述CI主控发送的注册请求,根据至少两个CI主控发送 的注册请求,获取所述至少两个CI主控间的子任务依赖关系和所述至少两个CI主控指定 的CI代理类型;接收所述CI代理发送的注册请求,根据至少两个CI代理发送的注册请求, 获取所述至少两个CI代理的类型,将所述至少两个CI代理按其类型组织成不同的CI代理 资源组。
全文摘要
本发明公开了一种软件持续集成的方法,包括接收并管理CI主控发送的CI子任务;根据当前管理的CI代理资源池中至少两个CI代理的在线通信状态、所述至少两个CI代理的计算资源闲置状态,确定执行当前管理的至少一个CI子任务中的当前可执行子任务的目的CI代理,并将所述当前可执行子任务发送至所述目的CI代理,使所述目的CI代理执行所述可执行子任务,所述至少两个CI代理为通用计算单元。本发明还公开了一种软件持续集成的装置,包括可执行子任务接收模块;目的CI代理确定模块;本发明通过向为通用计算单元的目的CI代理发送可执行子任务,增加了执行CI子任务的CI代理的可选性。该系统各装置之间的通信采用动态注册机制,实现了CI主控机和CI代理的动态热插拔和水平扩展,从而有效地提高了系统的扩展性。
文档编号H04L29/06GK101957778SQ201010290480
公开日2011年1月26日 申请日期2010年9月19日 优先权日2010年9月19日
发明者孙达, 王佥 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1