基于编译集群的代码编译方法、装置、设备及存储介质与流程

文档序号:32156417发布日期:2022-11-11 23:41阅读:31来源:国知局
基于编译集群的代码编译方法、装置、设备及存储介质与流程

1.本发明涉及计算机软件技术领域,尤其涉及一种基于编译集群的代码编译方法、装置、设备及存储介质。


背景技术:

2.在计算机软件领域,过去开发的软件项目一般不会太大,代码量不会太多,代码编译一般都是在单台电脑上进行,然而,目前的软件项目,随着功能日趋完善,新功能、新特性的不断引入,导致代码量不断增加,软件项目逐步变大,导致编译时间的不断增加,严重影响了软件开发、测试的进度。
3.上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。


技术实现要素:

4.本发明的主要目的在于提供一种基于编译集群的代码编译方法、装置、设备及存储介质,旨在解决现有技术软件代码编译时间过长的技术问题。
5.为实现上述目的,本发明提供了一种基于编译集群的代码编译方法,所述方法包括以下步骤:
6.接收客户端控制器发送的代码编译任务,将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译;
7.接收所述编译节点反馈的已编译代码,并获取所述代码编译任务对应的文件接收路径;
8.通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器。
9.可选的,所述接收客户端控制器发送的代码编译任务的步骤,包括:
10.接收各个客户端控制器发送的待执行任务,并获取各个待执行任务对应的任务识别码;
11.基于所述任务识别码对所述待执行任务进行去重处理,以获得代码编译任务。
12.可选的,所述接收各个客户端控制器发送的待执行任务的步骤,包括:
13.接收各个客户端控制器发送的待编译代码、编译命令、环境变量及文件接收路径;
14.根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境;
15.基于所述编译环境,将所述环境变量转化为集群环境变量,将所述编译命令转化为集群编译命令;
16.根据所述待编译代码、所述集群环境变量、所述集群编译命令及所述文件接收路径生成待执行任务。
17.可选的,所述根据所述环境变量及各个客户端控制器的环境信息确定所述待编译
代码对应的编译环境的步骤之前,还包括:
18.获取各个客户端控制器发送的安全校验数据;
19.根据所述安全校验数据对所述待编译代码、所述环境变量及所述文件接收路径进行安全校验;
20.在安全校验通过时,执行根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境的步骤。
21.可选的,所述根据所述安全校验数据对所述待编译代码、所述环境变量及所述文件接收路径进行安全校验的步骤,包括:
22.获取所述待编译代码对应的代码哈希值,获取所述编译命令对应的命令哈希值,获取所述环境变量对应的变量哈希值,获取所述文件接收路径的路径哈希值;
23.将所述代码哈希值、所述命令哈希值、所述变量哈希值及所述路径哈希值以预设组合规则进行组合,以获得组合哈希值;
24.对所述组合哈希值进行哈希编码,以获得安全验证数据;
25.在所述安全验证数据及所述安全校验数据一致时,判定安全校验通过;
26.在所述安全验证数据及所述安全校验数据不一致时,判定安全校验未通过。
27.可选的,所述将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译的步骤,包括:
28.获取任务缓存队列的队列信息,根据所述队列信息确定所述任务缓存队列中是否存在代码编译任务;
29.在所述任务缓存队列中不存在代码编译任务时,获取编译集群中各编译节点的任务执行信息;
30.基于所述任务执行信息将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。
31.可选的,所述获取任务缓存队列的队列信息,根据所述队列信息确定所述任务缓存队列中是否存在代码编译任务的步骤之后,还包括:
32.在所述任务缓存队列中存在代码编译任务时,将所述代码编译任务添加至所述任务缓存队列中。
33.可选的,所述基于所述任务执行信息将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译的步骤,包括:
34.根据所述任务执行信息确定所述编译集群中是否存在空闲编译节点;
35.在所述编译集群中存在空闲编译节点时,将所述编译集群中的空闲编译节点作为目标编译节点,将所述代码编译任务分发至所述目标编译节点,以使所述目标编译节点进行代码编译。
36.可选的,所述根据所述任务执行信息确定所述编译集群中是否存在空闲编译节点的步骤之后,还包括:
37.在所述编译集群中不存在空闲编译节点时,获取各编译节点对应的任务等待队列中的任务数量;
38.在存在所述任务数量低于预设数量的任务等待队列时,将所述任务数量低于所述预设数量的任务等待队列对应的编译节点作为目标编译节点,将所述代码编译任务分发至
所述目标编译节点,以使所述目标编译节点进行代码编译。
39.可选的,所述在所述编译集群中不存在空闲编译节点时,获取各编译节点对应的任务等待队列中的任务数量的步骤之后,还包括:
40.在不存在所述任务数量低于所述预设数量的任务等待队列时,将所述代码编译任务添加至所述任务缓存队列中。
41.可选的,所述通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器的步骤,包括:
42.获取所述代码编译任务对应的客户端控制器的网络地址;
43.根据所述网络地址及所述文件接收路径构建文件传输路径;
44.基于所述文件传输路径及所述已编译代码生成代码传输请求,将所述代码传输请求发送至所述代码编译任务对应的客户端控制器。
45.可选的,所述通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器的步骤之后,还包括:
46.获取通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器的数据传输结果;
47.根据所述代码编译任务、所述已编译代码及所述数据传输结果构建代码编译记录,将所述代码编译记录存储至预设存储空间。
48.此外,为实现上述目的,本发明还提出一种基于编译集群的代码编译装置,所述基于编译集群的代码编译装置包括以下模块:
49.任务接收模块,用于接收客户端控制器发送的代码编译任务,将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译;
50.代码接收模块,用于接收所述编译节点反馈的已编译代码,并获取所述代码编译任务对应的文件接收路径;
51.代码发送模块,用于通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器。
52.可选的,所述任务接收模块还用于接收各个客户端控制器发送的待执行任务,并获取各个待执行任务对应的任务识别码;基于所述任务识别码对所述待执行任务进行去重处理,以获得代码编译任务。
53.可选的,所述任务接收模块还用于接收各个客户端控制器发送的待编译代码、编译命令、环境变量及文件接收路径;根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境;基于所述编译环境,将所述环境变量转化为集群环境变量,将所述编译命令转化为集群编译命令;根据所述待编译代码、所述集群环境变量、所述集群编译命令及所述文件接收路径生成待执行任务。
54.可选的,所述任务接收模块还用于获取各个客户端控制器发送的安全校验数据;根据所述安全校验数据对所述待编译代码、所述环境变量及所述文件接收路径进行安全校验;在安全校验通过时,执行根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境的步骤。
55.可选的,所述任务接收模块还用于获取所述待编译代码对应的代码哈希值,获取所述编译命令对应的命令哈希值,获取所述环境变量对应的变量哈希值,获取所述文件接
收路径的路径哈希值;将所述代码哈希值、所述命令哈希值、所述变量哈希值及所述路径哈希值以预设组合规则进行组合,以获得组合哈希值;对所述组合哈希值进行哈希编码,以获得安全验证数据;在所述安全验证数据及所述安全校验数据一致时,判定安全校验通过;在所述安全验证数据及所述安全校验数据不一致时,判定安全校验未通过。
56.可选的,所述任务接收模块还用于获取任务缓存队列的队列信息,根据所述队列信息确定所述任务缓存队列中是否存在代码编译任务;在所述任务缓存队列中不存在代码编译任务时,获取编译集群中各编译节点的任务执行信息;基于所述任务执行信息将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。
57.此外,为实现上述目的,本发明还提出一种基于编译集群的代码编译设备,所述基于编译集群的代码编译设备包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的基于编译集群的代码编译程序,所述基于编译集群的代码编译程序被所述处理器执行时实现如上所述的基于编译集群的代码编译方法的步骤。
58.此外,为实现上述目的,本发明还提出一种计算机可读存储介质,所述计算机可读存储介质上存储有基于编译集群的代码编译程序,所述基于编译集群的代码编译程序执行时实现如上所述的基于编译集群的代码编译方法的步骤。
59.本发明通过接收客户端控制器发送的代码编译任务,将代码编译任务分发至编译集群中的编译节点,以使编译节点进行代码编译;接收编译节点反馈的已编译代码,并获取代码编译任务对应的文件接收路径;通过文件接收路径将已编译代码发送至代码编译任务对应的客户端控制器。由于本发明并非采用单台电脑执行代码编译任务,而是将代码编译任务分发至编译集群中的编译节点进行代码编译,再将编译完成的已编译代码发送至客户端控制器,而编译集群相对单台电脑更容易进行扩容,性能更容易提升,可以有效缩短代码编译的编译时间,更利于进行软件开发及测试。
附图说明
60.图1是本发明实施例方案涉及的硬件运行环境的电子设备的结构示意图;
61.图2为本发明基于编译集群的代码编译方法第一实施例的流程示意图;
62.图3为本发明基于编译集群的代码编译方法第二实施例的流程示意图;
63.图4为本发明基于编译集群的代码编译方法第三实施例的流程示意图;
64.图5为本发明基于编译集群的代码编译装置第一实施例的结构框图。
65.本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
66.应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
67.参照图1,图1为本发明实施例方案涉及的硬件运行环境的基于编译集群的代码编译设备结构示意图。
68.如图1所示,该电子设备可以包括:处理器1001,例如中央处理器(central processing unit,cpu),通信总线1002、用户接口1003,网络接口1004,存储器1005。其中,通信总线1002用于实现这些组件之间的连接通信。用户接口1003可以包括显示屏(display)、输入单元比如键盘(keyboard),可选用户接口1003还可以包括标准的有线接
口、无线接口。网络接口1004可选的可以包括标准的有线接口、无线接口(如无线保真(wireless-fidelity,wi-fi)接口)。存储器1005可以是高速的随机存取存储器(random access memory,ram)存储器,也可以是稳定的非易失性存储器(non-volatile memory,nvm),例如磁盘存储器。存储器1005可选的还可以是独立于前述处理器1001的存储装置。
69.本领域技术人员可以理解,图1中示出的结构并不构成对电子设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
70.如图1所示,作为一种存储介质的存储器1005中可以包括操作系统、网络通信模块、用户接口模块以及基于编译集群的代码编译程序。
71.在图1所示的电子设备中,网络接口1004主要用于与网络服务器进行数据通信;用户接口1003主要用于与用户进行数据交互;本发明电子设备中的处理器1001、存储器1005可以设置在基于编译集群的代码编译设备中,所述电子设备通过处理器1001调用存储器1005中存储的基于编译集群的代码编译程序,并执行本发明实施例提供的基于编译集群的代码编译方法。
72.本发明实施例提供了一种基于编译集群的代码编译方法,参照图2,图2为本发明一种基于编译集群的代码编译方法第一实施例的流程示意图。
73.本实施例中,所述基于编译集群的代码编译方法包括以下步骤:
74.步骤s10:接收客户端控制器发送的代码编译任务,将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。
75.需要说明的是,本实施例的执行主体可以是所述基于编译集群的代码编译设备,所述基于编译集群的代码编译设备可以是服务器、云服务器等电子设备,还可以为其他可实现相同或相似功能的设备,本实施例对此不加以限制,在本实施例及下述各实施例中,以基于编译集群的代码编译设备为例对本发明基于编译集群的代码编译方法进行说明。
76.需要说明的是,客户端控制器可以是安装在客户端中用于管理客户端中各个编译进程的控制器。代码编译任务可以是客户端通过客户端控制器提交至基于编译集群的代码编译设备的需要进行代码编译的任务。编译集群可以是由多台服务器共同构建的用于进行代码编译的集群,编译节点可以是编译集群中单独进行代码编译的节点,编译节点可以由一台服务器构成,也可以是由多台服务器共同构成。
77.步骤s20:接收所述编译节点反馈的已编译代码,并获取所述代码编译任务对应的文件接收路径。
78.需要说明的是,已编译代码可以是编译集群执行代码编译任务,对代码编译任务中的待编译代码进行编译得到的编译完成的代码。文件接收路径可以是客户端通过客户端控制器提交代码编译任务时设置的用于接收已编译代码的路径,文件接收路径可以具备访问域名及访问路径的客户端文件接收接口的完整网络访问路径。
79.步骤s30:通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器。
80.可以理解的是,在获取到文件接收路径之后,可以通过文件接收路径将已编译代码发送至代码编译任务对应的客户端控制器,再由客户端控制器反馈至对应的编译进程。
81.需要说明的是,文件接收路径由于是需要通过网络传输至基于编译集群的代码编译设备的,可能会被黑客进行拦截,若直接将包含访问域名及访问路径的文件接收路径进
行发送,可能导致黑客拦截获取到完整的文件接收路径,并通过文件接收路径对客户端进行攻击,因此,可以将访问域名隐藏,仅传输访问路径。
82.进一步地,为了提高文件传输安全性,本实施例步骤s30,可以包括:
83.获取所述代码编译任务对应的客户端控制器的网络地址;根据所述网络地址及所述文件接收路径构建文件传输路径;基于所述文件传输路径及所述已编译代码生成代码传输请求,将所述代码传输请求发送至所述代码编译任务对应的客户端控制器。
84.需要说明的是,若文件接收路径仅包括访问路径,没有访问域名,则仅依靠文件接收路径无法进行数据传输,因此,需要先获取代码编译任务对应的客户端控制器的网络地址(ip地址),然后将网络地址及文件接收路径进行拼接,以获得完整的文件传输路径,然后针对文件传输路径生成代码传输请求,将已编译代码添加至代码传输请求中,再通过代码传输请求发送至客户端控制器。
85.在实际使用中,可以各个客户端控制器的网络地址预先存储在基于编译集群的代码编译设备中,在需要使用时直接进行获取即可。
86.进一步地,为了便于追溯编译异常发生原因,本实施例步骤s30之后,还可以包括:
87.获取通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器的数据传输结果;根据所述代码编译任务、所述已编译代码及所述数据传输结果构建代码编译记录,将所述代码编译记录存储至预设存储空间。
88.需要说明的是,数据传输结果可以包括传输成功、传输失败,在传输失败时,数据传输结果还可以包括失败原因描述等信息。
89.可以理解的是,代码在编译过程中难免会出现编译异常,而现有技术因编译存在于单台电脑本地,可以很容易追溯编译失败原因,而本实施例中编译放置在服务器端,若发生异常没有对应的记录,则十分难以追溯,不利于排查异常发生原因,因此,可以根据数据传输结果、代码编译任务、已编译代码构建代码编译记录,将代码编译记录存储至预设存储空间中,可以追溯代码编译使用记录及异常发生时间,便于排查编译异常的原因。
90.本实施例通过接收客户端控制器发送的代码编译任务,将代码编译任务分发至编译集群中的编译节点,以使编译节点进行代码编译;接收编译节点反馈的已编译代码,并获取代码编译任务对应的文件接收路径;通过文件接收路径将已编译代码发送至代码编译任务对应的客户端控制器。由于本发明并非采用单台电脑执行代码编译任务,而是将代码编译任务分发至编译集群中的编译节点进行代码编译,再将编译完成的已编译代码发送至客户端控制器,而编译集群相对单台电脑更容易进行扩容,性能更容易提升,可以有效缩短代码编译的编译时间,更利于进行软件开发及测试。
91.参考图3,图3为本发明一种基于编译集群的代码编译方法第二实施例的流程示意图。
92.基于上述第一实施例,本实施例基于编译集群的代码编译方法在所述步骤s10,包括:
93.步骤s101:接收各个客户端控制器发送的待执行任务,并获取各个待执行任务对应的任务识别码。
94.需要说明的是,待执行任务可以是客户端控制器发送至基于编译集群的代码编译设备的需要执行的代码编译任务,也可以是基于编译集群的代码编译设备在接收到客户端
控制器发送的各种信息构建的需要执行的代码编译任务。任务识别码可以是根据待执行任务生成的唯一识别码。
95.在实际使用中,可以获取待执行任务中的任务名称、待编译代码等数据,对任务名称、待编译代码等数据进行拼接,将拼接得到的组合数据利用预设唯一值算法(例如md5算法)进行编码,将编码获得的编码字符作为待执行任务对应的任务识别码,还可以获取待执行任务对应的客户端控制器的唯一标识(id)及任务名称等数据,将获取到的唯一标识及任务名称等数据进行拼接,将拼接得到的组合数据利用预设唯一值算法进行编码,将编码得到的编码字符作为待执行任务对应的任务识别码。
96.进一步地,为了降低用户使用难度,提高用户使用体验,本实施例接收各个客户端控制器发送的待执行任务的步骤,可以包括:
97.接收各个客户端控制器发送的待编译代码、编译命令、环境变量及文件接收路径;根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境;基于所述编译环境,将所述环境变量转化为集群环境变量,将所述编译命令转化为集群编译命令;根据所述待编译代码、所述集群环境变量、所述集群编译命令及所述文件接收路径生成待执行任务。
98.需要说明的是,待编译代码可以是需要进行编译的软件代码,环境变量可以是用于指定客户端本地代码编译工具访问路径的变量,编译命令可以是调用代码编译工具进行代码编译的命令。编译环境可以是对待编译代码进行编译所需的系统环境,集群环境变量可以是用于编译集群中代码编译工具的访问路径的变量,集群编译命令可以是调用编译集群中代码编译工具的命令。
99.可以理解的是,客户端的环境与编译集群的环境可能并不相同,例如:两者使用的系统不同,环境变量不同,代码编译工具的访问路径不同,因此,在客户端对待编译代码进行编译需要使用的环境变量及编译命令在编译集群中可能并不能直接使用,需要进行转化,而若是每次使用编译集群进行编译都需要用户自己进行修改,会十分复杂,且会降低用户体验,因此,可以由基于编译集群的代码编译设备将编译命令及环境变量转化为编译集群环境对应的集群编译命令及集群环境变量,则不需要用户自行修改,可以降低用户使用难度,并提高用户的使用体验。
100.进一步地,为了避免恶意攻击,提高安全性,本实施例所述根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境的步骤之前,还可以包括:
101.获取各个客户端控制器发送的安全校验数据;根据所述安全校验数据对所述待编译代码、所述环境变量及所述文件接收路径进行安全校验;在安全校验通过时,执行根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境的步骤。
102.需要说明的是,安全校验数据可以是客户端控制器在发送待编译代码、编译命令、环境变量及文件接收路径时一同发送至基于编译集群的代码编译设备的数据,安全校验数据可以是客户端控制器根据待编译代码、编译命令、环境变量及文件接收路径通过预设安全算法运算得到的。
103.可以理解的是,基于编译集群的代码编译设备根据与客户端控制器使用一样的预设安全算法根据待编译代码、编译命令、环境变量及文件接收路径进行运算,可以得到运算
结果,将运算结果与安全校验数据进行对比,即可验证是否安全。
104.进一步地,为了进一步提高安全性,本实施例所述根据所述安全校验数据对所述待编译代码、所述环境变量及所述文件接收路径进行安全校验的步骤,可以包括:
105.获取所述待编译代码对应的代码哈希值,获取所述编译命令对应的命令哈希值,获取所述环境变量对应的变量哈希值,获取所述文件接收路径的路径哈希值;将所述代码哈希值、所述命令哈希值、所述变量哈希值及所述路径哈希值以预设组合规则进行组合,以获得组合哈希值;对所述组合哈希值进行哈希编码,以获得安全验证数据;在所述安全验证数据及所述安全校验数据一致时,判定安全校验通过;在所述安全验证数据及所述安全校验数据不一致时,判定安全校验未通过。
106.需要说明的是,代码哈希值可以是对待编译代码使用预设哈希(hash)算法进行运算得到的哈希值,命令哈希值可以是对编译命令使用预设哈希算法进行运算得到的哈希值,变量哈希值可以是对环境变量使用预设哈希算法进行运算得到的哈希值,路径哈希值可以是对文件接收路径使用预设哈希算法进行运算得到的哈希值。预设哈希算法可以是md5、sha-1等哈希算法,也可以是其他类型的哈希算法,本实施例对此不加以限制。预设组合规则可以根据实际需要进行设置,例如:将代码哈希值、命令哈希值、变量哈希值及路径哈希值以字符默认排序规则进行排序,根据排序结果将各个哈希值直接进行拼接,以获得组合哈希值。对组合哈希值进行哈希编码同样可以采用哈希算法进行哈希运算,可以采用与计算代码哈希值、命令哈希值等哈希值相同的哈希算法,也可以采用不同的哈希算法,本实施例对此不加以限制。
107.可以理解的是,针对相同的待编译代码、编译命令、环境变量及文件接收路径等数据运算得到的安全验证数据都是相同的,而待编译代码、编译命令、环境变量及文件接收路径等数据任一项不同运算得到的安全验证数据均不相同,而客户端运算得到的安全校验数据也采用了同样的运算方式,若待编译代码、编译命令、环境变量及文件接收路径等数据并未被篡改,则安全验证数据与安全校验数据应一致,可以通过比对安全验证数据及安全校验数据是否一致,根据比对结果来判定安全校验是否通过。而安全验证数据等运算过程均是在设备内部运算,并未暴露在外部传输数据中,黑客即便拦截得到待编译代码、编译命令、环境变量及文件接收路径,也无法获知如何计算安全验证数据,因此,可以避免数据被黑客篡改,进一步提高安全性。
108.步骤s102:基于所述任务识别码对所述待执行任务进行去重处理,以获得代码编译任务。
109.需要说明的是,有时客户端控制器可能会因各种意外情况重复发送待执行任务至基于编译集群的代码编译设备,若不对待执行任务进行处理,均执行,会浪费编译集群性能,因此,可以计算待执行任务对应的任务识别码,通过任务识别码判断是否有重复提交的待执行任务,依据任务识别码对待执行任务进行去重处理,去除重复的待执行任务,可以节约编译集群的性能,避免不必要的性能消耗。在去重处理之后,可以保证待执行任务均为唯一,不含重复的待执行任务,因此,此时可以将去重处理之后的待执行任务作为代码编译任务。
110.步骤s103:将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。
111.可以理解的是,将代码编译任务分发至编译集群中的编译节点,编译节点在接收到代码编译任务之后,可以获取代码编译任务中的待编译代码、集群编译命令及集群环境变量,并基于集群编译命令及集群环境变量对待编译代码进行代码编译。
112.本实施例通过接收各个客户端控制器发送的待执行任务,并获取各个待执行任务对应的任务识别码;基于所述任务识别码对所述待执行任务进行去重处理,以获得代码编译任务;将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。由于在进行任务分发之前获取了各个待执行任务的任务识别码,将任务识别码相同的重复待执行任务进行去重,以获得不重复的代码编译任务,再将代码编译任务分发至编译集群中的编译节点进行代码编译,可以有效的避免不必要的性能消耗。
113.参考图4,图4为本发明一种基于编译集群的代码编译方法第三实施例的流程示意图。
114.基于上述第一实施例,本实施例基于编译集群的代码编译方法在所述步骤s10,包括:
115.步骤s101':接收客户端控制器发送的代码编译任务。
116.需要说明的是,代码编译任务可以是由单个客户端控制器发送至基于编译集群的代码编译设备的一个或多个任务,也可以是由多个客户端控制器发送至基于编译集群的代码编译设备的多个任务。
117.步骤s102':获取任务缓存队列的队列信息,根据所述队列信息确定所述任务缓存队列中是否存在代码编译任务。
118.需要说明的是,任务缓存队列可以是代码编译任务在超过编译集群可接收的任务上限时用于保存代码编译任务的缓存队列,任务缓存队列可以是设置于专用的缓存服务器中,也可以是直接设置于基于编译集群的代码编译设备的缓存中的队列,在任务数量达到编译集群的任务负载上限时,会将后续接收的代码编译任务防止任务缓存队列中,并监控编译集群的任务负载情况,在编译集群任务负载情况缓解时逐渐将任务缓存队列中的代码编译任务分配至编译集群中的编译节点。队列信息可以包括队列的运行情况,例如:可承受最大任务数量及当前任务数量等信息。根据队列信息即可获知任务缓存队列中是否存在任务,即任务缓存队列中是否存在代码编译任务。
119.进一步地,为了防止编译集群宕机,本实施例步骤s102'之后,还可以包括:
120.在所述任务缓存队列中存在代码编译任务时,将所述代码编译任务添加至所述任务缓存队列中。
121.可以理解的是,若任务缓存队列中存在代码编译任务,则可以说明此前代码编译任务的数量已超过编译集群的任务负载上限,此时若继续向编译集群分配代码编译任务,可能会令编译集群的内存超过负荷,最终导致内存溢出,导致编译集群宕机,因此,可以在检查到任务缓存队列中存在代码编译任务时,将代码编译任务添加至任务缓存队列中。
122.步骤s103':在所述任务缓存队列中不存在代码编译任务时,获取编译集群中各编译节点的任务执行信息。
123.需要说明的是,任务执行信息可以包括当前执行代码编译任务执行进度及等待执行的代码编译任务的数量。
124.可以理解的是,在任务缓存队列中不存在代码编译任务时,可以说明当前代码编
译任务的数量并未超过编译集群的任务负载上限,因此,可以进行代码编译任务分配,此时,可以获取编译集群中各个编译节点的任务执行信息。
125.步骤s104':基于所述任务执行信息将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。
126.需要说明的是,基于任务执行信息进行分析,可以快速确定编译集群中可执行代码编译任务的编译节点并分发代码编译任务,以使编译节点进行代码编译。
127.进一步地,为了合理进行代码编译任务分发,本实施例步骤s104',可以包括:
128.根据所述任务执行信息确定所述编译集群中是否存在空闲编译节点;在所述编译集群中存在空闲编译节点时,将所述编译集群中的空闲编译节点作为目标编译节点,将所述代码编译任务分发至所述目标编译节点,以使所述目标编译节点进行代码编译。
129.可以理解的是,因为任务执行信息包括了编译节点中当前代码编译任务的执行进度及等待执行的代码编译任务的数量,因此,可以直接根据任务执行信息判断编译集群中是否存在空闲编译节点,例如:若编译节点当前代码编译任务已执行完毕或编译节点中当前代码编译任务在短时间(例如:3s)内执行完毕的编译节点作为空闲编译节点。将空闲编译节点作为目标编译节点,将代码编译任务分发至目标编译节点,以使目标编译节点进行代码编译。
130.进一步地,为了在编译集群中没有空闲编译节点时也可进行任务分发,本实施例根据所述任务执行信息确定所述编译集群中是否存在空闲编译节点步骤之后,还可以包括:
131.在所述编译集群中不存在空闲编译节点时,获取各编译节点对应的任务等待队列中的任务数量;在存在所述任务数量低于预设数量的任务等待队列时,将所述任务数量低于所述预设数量的任务等待队列对应的编译节点作为目标编译节点,将所述代码编译任务分发至所述目标编译节点,以使所述目标编译节点进行代码编译。
132.需要说明的是,若编译集群使用用户较多,则大概率编译集群中可能并不存在空闲编译节点,但是,编译集群其实也未超出任务负载上限,此时,可以根据编译集群的性能为各个编译节点设置一个任务等待队列,在编译节点正在进行代码编译任务时,将后续的代码编译任务添加至任务等待队列中,编译节点在执行完当前代码编译任务时,可以直接从任务等待队列中顺序获取代码编译任务继续执行。而由于编译节点的性能并非无线,因此,在任务等待队列中也不可能无限制添加代码编译任务,因此,可以为任务等待队列设置一预设数量,在任务等待队列中的任务数量小于预设数量时,将代码编译任务添加至任务等待队列中。预设数量可以根据实际使用中各编译节点的实际性能进行设置,编译节点的性能越高,则设置的预设数量可以越大。
133.在实际使用中,在不存在所述任务数量低于预设数量的任务等待队列时,将代码编译任务添加至所述任务缓存队列中。
134.可以理解的是,若编译集群中所有编译节点的任务等待队列均达到了预设数量,则可以说明编译集群已经达到了任务负载上线,因此,可以将代码编译任务添加至任务缓存队列中。
135.本实施例通过接收客户端控制器发送的代码编译任务;获取任务缓存队列的队列信息,根据所述队列信息确定所述任务缓存队列中是否存在代码编译任务;在所述任务缓
存队列中不存在代码编译任务时,获取编译集群中各编译节点的任务执行信息;基于所述任务执行信息将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。由于在进行代码编译任务分发之前还根据任务缓存队列的队列信息判断任务缓存队列中是否存在代码编译任务,在任务缓存队列中不存在代码编译任务时再基于编译集群中各编译节点的任务执行信息进行代码编译任务分发,可以有效避免编译集群宕机等异常现象,且可以合理的分发代码编译任务至各个编译节点。
136.此外,本发明实施例还提出一种存储介质,所述存储介质上存储有基于编译集群的代码编译程序,所述基于编译集群的代码编译程序被处理器执行时实现如上文所述的基于编译集群的代码编译方法的步骤。
137.参照图5,图5为本发明基于编译集群的代码编译装置第一实施例的结构框图。
138.如图5所示,本发明实施例提出的基于编译集群的代码编译装置包括:
139.任务接收模块501,用于接收客户端控制器发送的代码编译任务,将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译;
140.代码接收模块502,用于接收所述编译节点反馈的已编译代码,并获取所述代码编译任务对应的文件接收路径;
141.代码发送模块503,用于通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器。
142.本实施例通过接收客户端控制器发送的代码编译任务,将代码编译任务分发至编译集群中的编译节点,以使编译节点进行代码编译;接收编译节点反馈的已编译代码,并获取代码编译任务对应的文件接收路径;通过文件接收路径将已编译代码发送至代码编译任务对应的客户端控制器。由于本发明并非采用单台电脑执行代码编译任务,而是将代码编译任务分发至编译集群中的编译节点进行代码编译,再将编译完成的已编译代码发送至客户端控制器,而编译集群相对单台电脑更容易进行扩容,性能更容易提升,可以有效缩短代码编译的编译时间,更利于进行软件开发及测试。
143.进一步地,所述任务接收模块501,还用于接收各个客户端控制器发送的待执行任务,并获取各个待执行任务对应的任务识别码;基于所述任务识别码对所述待执行任务进行去重处理,以获得代码编译任务。
144.进一步地,所述任务接收模块501,还用于接收各个客户端控制器发送的待编译代码、编译命令、环境变量及文件接收路径;根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境;基于所述编译环境,将所述环境变量转化为集群环境变量,将所述编译命令转化为集群编译命令;根据所述待编译代码、所述集群环境变量、所述集群编译命令及所述文件接收路径生成待执行任务。
145.进一步地,所述任务接收模块501,还用于获取各个客户端控制器发送的安全校验数据;根据所述安全校验数据对所述待编译代码、所述环境变量及所述文件接收路径进行安全校验;在安全校验通过时,执行根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境的步骤。
146.进一步地,所述任务接收模块501,还用于获取所述待编译代码对应的代码哈希值,获取所述编译命令对应的命令哈希值,获取所述环境变量对应的变量哈希值,获取所述文件接收路径的路径哈希值;将所述代码哈希值、所述命令哈希值、所述变量哈希值及所述
路径哈希值以预设组合规则进行组合,以获得组合哈希值;对所述组合哈希值进行哈希编码,以获得安全验证数据;在所述安全验证数据及所述安全校验数据一致时,判定安全校验通过;在所述安全验证数据及所述安全校验数据不一致时,判定安全校验未通过。
147.进一步地,所述任务接收模块501,还用于获取任务缓存队列的队列信息,根据所述队列信息确定所述任务缓存队列中是否存在代码编译任务;在所述任务缓存队列中不存在代码编译任务时,获取编译集群中各编译节点的任务执行信息;基于所述任务执行信息将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。
148.进一步地,所述任务接收模块501,还用于在所述任务缓存队列中存在代码编译任务时,将所述代码编译任务添加至所述任务缓存队列中。
149.进一步地,所述任务接收模块501,还用于根据所述任务执行信息确定所述编译集群中是否存在空闲编译节点;在所述编译集群中存在空闲编译节点时,将所述编译集群中的空闲编译节点作为目标编译节点,将所述代码编译任务分发至所述目标编译节点,以使所述目标编译节点进行代码编译。
150.进一步地,所述任务接收模块501,还用于在所述编译集群中不存在空闲编译节点时,获取各编译节点对应的任务等待队列中的任务数量;在存在所述任务数量低于预设数量的任务等待队列时,将所述任务数量低于所述预设数量的任务等待队列对应的编译节点作为目标编译节点,将所述代码编译任务分发至所述目标编译节点,以使所述目标编译节点进行代码编译。
151.进一步地,所述任务接收模块501,还用于在不存在所述任务数量低于所述预设数量的任务等待队列时,将所述代码编译任务添加至所述任务缓存队列中。
152.进一步地,所述代码发送模块503,还用于获取所述代码编译任务对应的客户端控制器的网络地址;根据所述网络地址及所述文件接收路径构建文件传输路径;基于所述文件传输路径及所述已编译代码生成代码传输请求,将所述代码传输请求发送至所述代码编译任务对应的客户端控制器。
153.进一步地,所述代码发送模块503,还用于获取通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器的数据传输结果;根据所述代码编译任务、所述已编译代码及所述数据传输结果构建代码编译记录,将所述代码编译记录存储至预设存储空间。
154.应当理解的是,以上仅为举例说明,对本发明的技术方案并不构成任何限定,在具体应用中,本领域的技术人员可以根据需要进行设置,本发明对此不做限制。
155.需要说明的是,以上所描述的工作流程仅仅是示意性的,并不对本发明的保护范围构成限定,在实际应用中,本领域的技术人员可以根据实际的需要选择其中的部分或者全部来实现本实施例方案的目的,此处不做限制。
156.另外,未在本实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的基于编译集群的代码编译方法,此处不再赘述。
157.此外,需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在
包括该要素的过程、方法、物品或者系统中还存在另外的相同要素。
158.上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
159.通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如只读存储器(read only memory,rom)/ram、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
160.以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。
161.本发明公开了a1、一种基于编译集群的代码编译方法,所述基于编译集群的代码编译方法包括以下步骤:
162.接收客户端控制器发送的代码编译任务,将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译;
163.接收所述编译节点反馈的已编译代码,并获取所述代码编译任务对应的文件接收路径;
164.通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器。
165.a2、如a1所述的基于编译集群的代码编译方法,所述接收客户端控制器发送的代码编译任务的步骤,包括:
166.接收各个客户端控制器发送的待执行任务,并获取各个待执行任务对应的任务识别码;
167.基于所述任务识别码对所述待执行任务进行去重处理,以获得代码编译任务。
168.a3、如a2所述的基于编译集群的代码编译方法,所述接收各个客户端控制器发送的待执行任务的步骤,包括:
169.接收各个客户端控制器发送的待编译代码、编译命令、环境变量及文件接收路径;
170.根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境;
171.基于所述编译环境,将所述环境变量转化为集群环境变量,将所述编译命令转化为集群编译命令;
172.根据所述待编译代码、所述集群环境变量、所述集群编译命令及所述文件接收路径生成待执行任务。
173.a4、如a3所述的基于编译集群的代码编译方法,所述根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境的步骤之前,还包括:
174.获取各个客户端控制器发送的安全校验数据;
175.根据所述安全校验数据对所述待编译代码、所述环境变量及所述文件接收路径进行安全校验;
176.在安全校验通过时,执行根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境的步骤。
177.a5、如a4所述的基于编译集群的代码编译方法,所述根据所述安全校验数据对所述待编译代码、所述环境变量及所述文件接收路径进行安全校验的步骤,包括:
178.获取所述待编译代码对应的代码哈希值,获取所述编译命令对应的命令哈希值,获取所述环境变量对应的变量哈希值,获取所述文件接收路径的路径哈希值;
179.将所述代码哈希值、所述命令哈希值、所述变量哈希值及所述路径哈希值以预设组合规则进行组合,以获得组合哈希值;
180.对所述组合哈希值进行哈希编码,以获得安全验证数据;
181.在所述安全验证数据及所述安全校验数据一致时,判定安全校验通过;
182.在所述安全验证数据及所述安全校验数据不一致时,判定安全校验未通过。
183.a6、如a1所述的基于编译集群的代码编译方法,所述将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译的步骤,包括:
184.获取任务缓存队列的队列信息,根据所述队列信息确定所述任务缓存队列中是否存在代码编译任务;
185.在所述任务缓存队列中不存在代码编译任务时,获取编译集群中各编译节点的任务执行信息;
186.基于所述任务执行信息将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。
187.a7、如a6所述的基于编译集群的代码编译方法,所述获取任务缓存队列的队列信息,根据所述队列信息确定所述任务缓存队列中是否存在代码编译任务的步骤之后,还包括:
188.在所述任务缓存队列中存在代码编译任务时,将所述代码编译任务添加至所述任务缓存队列中。
189.a8、如a6所述的基于编译集群的代码编译方法,所述基于所述任务执行信息将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译的步骤,包括:
190.根据所述任务执行信息确定所述编译集群中是否存在空闲编译节点;
191.在所述编译集群中存在空闲编译节点时,将所述编译集群中的空闲编译节点作为目标编译节点,将所述代码编译任务分发至所述目标编译节点,以使所述目标编译节点进行代码编译。
192.a9、如a8所述的基于编译集群的代码编译方法,所述根据所述任务执行信息确定所述编译集群中是否存在空闲编译节点的步骤之后,还包括:
193.在所述编译集群中不存在空闲编译节点时,获取各编译节点对应的任务等待队列中的任务数量;
194.在存在所述任务数量低于预设数量的任务等待队列时,将所述任务数量低于所述预设数量的任务等待队列对应的编译节点作为目标编译节点,将所述代码编译任务分发至所述目标编译节点,以使所述目标编译节点进行代码编译。
195.a10、如a9所述的基于编译集群的代码编译方法,所述在所述编译集群中不存在空
闲编译节点时,获取各编译节点对应的任务等待队列中的任务数量的步骤之后,还包括:
196.在不存在所述任务数量低于所述预设数量的任务等待队列时,将所述代码编译任务添加至所述任务缓存队列中。
197.a11、如a1所述的基于编译集群的代码编译方法,所述通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器的步骤,包括:
198.获取所述代码编译任务对应的客户端控制器的网络地址;
199.根据所述网络地址及所述文件接收路径构建文件传输路径;
200.基于所述文件传输路径及所述已编译代码生成代码传输请求,将所述代码传输请求发送至所述代码编译任务对应的客户端控制器。
201.a12、如a1-a11任一项所述的基于编译集群的代码编译方法,所述通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器的步骤之后,还包括:
202.获取通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器的数据传输结果;
203.根据所述代码编译任务、所述已编译代码及所述数据传输结果构建代码编译记录,将所述代码编译记录存储至预设存储空间。
204.本发明公开了b13、一种基于编译集群的代码编译装置,所述基于编译集群的代码编译装置包括以下模块:
205.任务接收模块,用于接收客户端控制器发送的代码编译任务,将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译;
206.代码接收模块,用于接收所述编译节点反馈的已编译代码,并获取所述代码编译任务对应的文件接收路径;
207.代码发送模块,用于通过所述文件接收路径将所述已编译代码发送至所述代码编译任务对应的客户端控制器。
208.b14、如b13所述的基于编译集群的代码编译装置,所述任务接收模块还用于接收各个客户端控制器发送的待执行任务,并获取各个待执行任务对应的任务识别码;基于所述任务识别码对所述待执行任务进行去重处理,以获得代码编译任务。
209.b15、如b14所述的基于编译集群的代码编译装置,所述任务接收模块还用于接收各个客户端控制器发送的待编译代码、编译命令、环境变量及文件接收路径;根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境;基于所述编译环境,将所述环境变量转化为集群环境变量,将所述编译命令转化为集群编译命令;根据所述待编译代码、所述集群环境变量、所述集群编译命令及所述文件接收路径生成待执行任务。
210.b16、如b15所述的基于编译集群的代码编译装置,所述任务接收模块还用于获取各个客户端控制器发送的安全校验数据;根据所述安全校验数据对所述待编译代码、所述环境变量及所述文件接收路径进行安全校验;在安全校验通过时,执行根据所述环境变量及各个客户端控制器的环境信息确定所述待编译代码对应的编译环境的步骤。
211.b17、如b16所述的基于编译集群的代码编译装置,所述任务接收模块还用于获取所述待编译代码对应的代码哈希值,获取所述编译命令对应的命令哈希值,获取所述环境
变量对应的变量哈希值,获取所述文件接收路径的路径哈希值;将所述代码哈希值、所述命令哈希值、所述变量哈希值及所述路径哈希值以预设组合规则进行组合,以获得组合哈希值;对所述组合哈希值进行哈希编码,以获得安全验证数据;在所述安全验证数据及所述安全校验数据一致时,判定安全校验通过;在所述安全验证数据及所述安全校验数据不一致时,判定安全校验未通过。
212.b18、如b13所述的基于编译集群的代码编译装置,所述任务接收模块还用于获取任务缓存队列的队列信息,根据所述队列信息确定所述任务缓存队列中是否存在代码编译任务;在所述任务缓存队列中不存在代码编译任务时,获取编译集群中各编译节点的任务执行信息;基于所述任务执行信息将所述代码编译任务分发至编译集群中的编译节点,以使所述编译节点进行代码编译。
213.本发明公开了c19、一种基于编译集群的代码编译设备,所述基于编译集群的代码编译设备包括:处理器、存储器及存储在所述存储器上并可在所述处理器上运行的基于编译集群的代码编译程序,所述基于编译集群的代码编译程序被所述处理器执行时实现如上所述的基于编译集群的代码编译方法的步骤。
214.本发明公开了d20、一种计算机可读存储介质,所述计算机可读存储介质上存储有基于编译集群的代码编译程序,所述基于编译集群的代码编译程序执行时实现如上所述的基于编译集群的代码编译方法的步骤。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1