一种实现分布式编译的方法和分布式编译系统的制作方法

文档序号:10724657阅读:452来源:国知局
一种实现分布式编译的方法和分布式编译系统的制作方法
【专利摘要】本发明公开了一种实现分布式编译的方法和分布式编译系统。其中所述方法包括:通过前端页面接收用户提交的编译任务;每个编译任务中包括:待编译文件在代码服务器上的存储路径信息;将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上,由相应虚拟机根据编译任务从代码服务器获取对应的待编译文件、对待编译文件进行编译并将编译结果文件输出到公共数据库;接收各虚拟机反馈的编译信息,将编译任务以及与编译任务相关的用户信息和编译信息保存到回溯数据库中。该技术方案实现了文件的分布式编译,控制了成品质量,整体形成了可控、可溯的编译框架。
【专利说明】
一种实现分布式编译的方法和分布式编译系统
技术领域
[0001]本发明涉及编译领域,具体涉及一种实现分布式编译的方法和分布式编译系统。 【背景技术】
[0002]代码编译是将程序员编写的程序源码通过编译程序编译为机器可执行文件的过程。在软件开发公司中,往往不是由个人而是多人负责开发某个软件,因此在开发过程中会产生多个版本的代码,而最终软件只能由某个最终确定的版本编译生成,因此许多公司内都搭建了代码服务器进行代码的管理。然而现有技术中对于代码编译并没有较为合理的管理方法,由于任一台开发机上都有可能安装编译程序,对代码执行编译,导致最终生成的软件产品质量难以控制。
【发明内容】

[0003]鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的实现分布式编译的方法和分布式编译系统。
[0004]依据本发明的一个方面,提供了一种实现分布式编译的方法,包括:
[0005]通过前端页面接收用户提交的编译任务;每个编译任务中包括:待编译文件在代码服务器上的存储路径信息;
[0006]将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上,由相应虚拟机根据编译任务从代码服务器获取对应的待编译文件、对待编译文件进行编译并将编译结果文件输出到公共数据库;
[0007]接收各虚拟机反馈的编译信息,将编译任务以及与编译任务相关的用户信息和编译信息保存到回溯数据库中。
[0008]可选地,每个编译任务中还包括:编译环境要求信息;
[0009]所述将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上包括: 根据预先搜集的各虚拟机的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机。
[0010]可选地,所述根据预先搜集的各虚拟机的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机包括:
[0011]将所接收到编译任务放入编译任务池中;
[0012]每接收到一个虚拟机的任务查询信息,根据预先搜集的各虚拟机的编译环境信息确定该虚拟机的编译环境信息,从编译任务池中找出编译环境要求信息与该虚拟机的编译环境信息匹配的编译任务分配给该虚拟机;
[0013]其中,空闲的虚拟机每隔预设时间发送一次任务查询信息。
[0014]可选地,每个编译任务中还包括:用户代码权限信息;
[0015]该方法在将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上之前,进一步包括:将编译任务中的用户代码权限信息发送给代码服务器进行校验,在校验通过后,在编译任务中的用户代码权限信息中打上校验通过标志,然后再将编译任务调度到分布式的虚拟机集群中的相应的虚拟机上;
[0016]所述由相应虚拟机根据编译任务从代码服务器获取对应的待编译文件包括:相应虚拟机根据编译任务中的打上校验通过标志的用户代码权限信息,从代码服务器获取对应的待编译文件。
[0017]可选地,该方法进一步包括:
[0018]虚拟机对待编译文件进行编译时如果需要编译公用资源,先到公共数据库中查询;
[0019]如果公共数据库中存在需要的编译公用资源,则从公共数据库获取;
[0020]如果公共数据库中不存在需要的编译公用资源,则从代码服务器获取该编译公用资源,并保存到公共数据库中。
[0021]可选地,该方法进一步包括:
[0022]生成对公共数据库的访问账户信息;
[0023]接收各虚拟机在每次启动时发送的获取/更新公共数据库的访问账户信息的请求,将所生成的相应访问账户信息发送给发送请求的虚拟机。[〇〇24]可选地,该方法进一步包括:
[0025]将虚拟机反馈的编译信息,通过前端页面展示给用户。[〇〇26]可选地,该方法进一步包括:
[0027]通过前端页面接收用户提交的查询信息;
[0028]根据查询信息从回溯数据库和/或公共数据库中获取相应的内容,并通过前端页面展示给用户。
[0029]可选地,所述编译信息包括如下中的一种或多种:
[0030]虚拟机在执行编译任务时的编译环境信息;[0031 ]虚拟机在执行编译任务时记录的编译日志信息;[〇〇32]编译进度信息。[〇〇33]可选地,该方法进一步包括:
[0034]将编译结果文件发送到签名服务器,由签名服务器对编译结果文件进行签名操作后输出签名后的文件,以及将签名后的文件发送到回溯数据库中保存一份。
[0035]依据本发明的另一方面,提供了一种分布式编译系统,包括:中心控制器、分布式的虚拟机集群、代码服务器、公共数据库和回溯数据库;
[0036]中心控制器,适于通过前端页面接收用户提交的编译任务,将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上;其中,每个编译任务中包括:待编译文件在代码服务器上的存储路径信息;
[0037]虚拟机,适于根据所分配的编译任务从代码服务器获取对应的待编译文件,对待编译文件进行编译并将编译结果文件输出到公共数据库,以及适于将编译信息反馈给中心控制器;
[0038]中心控制器,还适于接收各虚拟机反馈的编译信息,将编译任务以及与编译任务相关的用户信息和编译信息保存到回溯数据库中。
[0039]可选地,每个编译任务中还包括:编译环境要求信息;
[0040]所述中心控制器,适于根据预先搜集的各虚拟机的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机。
[0041]可选地,所述中心控制器,适于将所接收到编译任务放入编译任务池中;每接收到一个虚拟机的任务查询信息,根据预先搜集的各虚拟机的编译环境信息确定该虚拟机的编译环境信息,从编译任务池中找出编译环境要求信息与该虚拟机的编译环境信息匹配的编译任务分配给该虚拟机;
[0042]其中,空闲的虚拟机每隔预设时间向中心控制器发送一次任务查询信息。
[0043]可选地,每个编译任务中还包括:用户代码权限信息;
[0044]所述中心控制器,在将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上之前,进一步适于将编译任务中的用户代码权限信息发送给代码服务器进行校验,在校验通过后,在编译任务中的用户代码权限信息中打上校验通过标志,然后再将编译任务调度到相应的虚拟机上;
[0045]虚拟机适于根据编译任务中的打上校验通过标志的用户代码权限信息,从代码服务器获取对应的待编译文件。
[0046]可选地,虚拟机,进一步适于在对待编译文件进行编译时,如果需要编译公用资源,先到公共数据库中查询;如果公共数据库中存在需要的编译公用资源,则从公共数据库获取;如果公共数据库中不存在需要的编译公用资源,则从代码服务器获取该编译公用资源,并保存到公共数据库中。
[0047]可选地,所述中心控制器,进一步适于生成对公共数据库的访问账户信息;接收各虚拟机在每次启动时发送的获取/更新公共数据库的访问账户信息的请求,将所生成的相应访问账户信息发送给发送请求的虚拟机。
[0048]可选地,所述中心控制器,进一步适于将虚拟机反馈的编译信息,通过前端页面展示给用户。
[0049]可选地,该方法进一步包括:
[0050]所述中心控制器,进一步适于通过前端页面接收用户提交的查询信息;根据查询信息从回溯数据库和/或公共数据库中获取相应的内容,并通过前端页面展示给用户。[0051 ]可选地,所述编译信息包括如下中的一种或多种:
[0052]虚拟机在执行编译任务时的编译环境信息;[〇〇53]虚拟机在执行编译任务时记录的编译日志信息;[〇〇54]编译进度信息。[〇〇55] 可选地,该系统进一步包括:
[0056]签名服务器,适于从公共数据库获取编译结果文件,对编译结果文件进行签名操作后输出签名后的文件,以及将签名后的文件发送到回溯数据库中保存一份。
[0057]由上述可知,本发明的技术方案在多台虚拟机中执行文件的编译,这些虚拟机构成了分布式的虚拟机集群,在通过前端页面接收到用户提交的编译任务后,从编译任务中提取待编译代码在代码服务器中的存储路径信息,将编译任务调度到合适的虚拟机后便可以根据存储路径信息获取待编译文件进行编译,并将结果文件输出到公共数据库。各虚拟机在编译完成后生成编译反馈信息,将这些信息和与编译任务相关的用户信息和编译信息保存到回溯数据库中。该技术方案实现了文件的分布式编译,提供了独立、统一管理的编译环境,控制了成品质量;同时编译的结果文件保存在公共数据库中方便提取和调用;回溯数据库中的相关信息便于日后问题的回溯和复查,整体形成了可控、可溯的编译框架。
[0058]上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段, 而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的【具体实施方式】。【附图说明】
[0059]通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
[0060]图1示出了根据本发明一个实施例的一种实现分布式编译的方法的流程图;
[0061]图2示出了根据本发明一个实施例的一种分布式编译系统的结构示意图。【具体实施方式】
[0062]下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
[0063]图1示出了根据本发明一个实施例的一种实现分布式编译的方法的流程图,如图1 所示,该方法包括:
[0064]步骤S110,通过前端页面接收用户提交的编译任务;每个编译任务中包括:待编译文件在代码服务器上的存储路径信息。
[0065]步骤S120,将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上,由相应虚拟机根据编译任务从代码服务器获取对应的待编译文件、对待编译文件进行编译并将编译结果文件输出到公共数据库。
[0066]步骤S130,接收各虚拟机反馈的编译信息,将编译任务以及与编译任务相关的用户信息和编译信息保存到回溯数据库中。
[0067]可见,图1所示的方法,在多台虚拟机中执行文件的编译,这些虚拟机构成了分布式的虚拟机集群,在通过前端页面接收到用户提交的编译任务后,从编译任务中提取待编译代码在代码服务器中的存储路径信息,将编译任务调度到合适的虚拟机后便可以根据存储路径信息获取待编译文件进行编译,并将结果文件输出到公共数据库。各虚拟机在编译完成后生成编译反馈信息,将这些信息和与编译任务相关的用户信息和编译信息保存到回溯数据库中。该技术方案实现了文件的分布式编译,提供了独立、统一管理的编译环境,控制了成品质量;同时编译的结果文件保存在公共数据库中方便提取和调用;回溯数据库中的相关信息便于日后问题的回溯和复查,整体形成了可控、可溯的编译框架。
[0068]在本发明的一个实施例中,图1所示的方法中,每个编译任务中还包括:编译环境要求信息;将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上包括:根据预先搜集的各虚拟机的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机。
[0069]举例而言,针对安卓系统、1S系统、Windows系统编写的代码文件所要求的编译环境是不同的,因此每个待编译文件都需要特定的编译环境,如要求编译环境配置有VS2008, VS2010等组件才能实现编译。又例如,根据开发项目的需求不同,编译过程中可以根据设置参数的不同生成不同的编译结果文件,如要求编译结果文件包含符号表pdb文件,因此可以在前端页面上为用户提供生成的编译文件包含pdb文件的选项。如果某个开发项目强制要求编译输出该文件,则可以在后台将该选项设置为无法在前端页面进行操作的默认设置项。这样,一方面各虚拟机可以配置相同或不同的编译环境以应对不同的编译需求,另一方面也可以根据用户输入的参数控制编译结果文件的类型。其中虚拟机的编译环境信息可以维护为一个编译环境信息列表供查询。因此在接收到编译任务后,调取其中的编译环境要求信息,在编译环境信息列表中匹配满足要求的虚拟机,再从中选出空闲的虚拟机进行编译。
[0070]在一优选实施例中,空闲的虚拟机可以主动请求任务进行编译,具体地,根据预先搜集的各虚拟机的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机包括:将所接收到编译任务放入编译任务池中;每接收到一个虚拟机的任务查询信息,根据预先搜集的各虚拟机的编译环境信息确定该虚拟机的编译环境信息,从编译任务池中找出编译环境要求信息与该虚拟机的编译环境信息匹配的编译任务分配给该虚拟机;其中,空闲的虚拟机每隔预设时间发送一次任务查询信息。[0071 ]例如,空闲的虚拟机A每隔5分钟发送一次任务查询信息,当接收到该信息后,从编译环境信息列表中确定该虚拟机A安装有JDK(Java Development Kit,Java开发工具包), 可以编译安卓apk,因此从编译任务池中确定了相应任务并分配给虚拟机A。
[0072]在本发明的一个实施例中,图1所示的方法中,每个编译任务中还包括:用户代码权限信息;该方法在将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上之前,进一步包括:将编译任务中的用户代码权限信息发送给代码服务器进行校验,在校验通过后,在编译任务中的用户代码权限信息中打上校验通过标志,然后再将编译任务调度到分布式的虚拟机集群中的相应的虚拟机上;由相应虚拟机根据编译任务从代码服务器获取对应的待编译文件包括:相应虚拟机根据编译任务中的打上校验通过标志的用户代码权限信息,从代码服务器获取对应的待编译文件。
[0073]—个开发项目在代码服务器中可能存在多个版本的待编译文件,同时在代码服务器中存在多个开发项目的待编译文件,为了安全控制,可以要求每个项目只有权限较高的用户可以访问并提取其中的待编译文件进行编译。在本实施例中,用户A通过前端页面提交编译任务时,需要在页面的相应位置输入用户代码权限信息,例如代码服务器的登录名和密码,则通过该用户代码权限信息先去代码服务器进行检验,通过后在编译任务中的用户代码权限信息中打上校验通过标志,再将编译任务调度至相应的虚拟机上,虚拟机编译时通过打上校验通过标志的用户代码权限信息,从代码服务器获取对应的待编译文件进行编译。
[0074]在本发明的一个实施例中,图1所示的方法进一步包括:虚拟机对待编译文件进行编译时如果需要编译公用资源,先到公共数据库中查询;如果公共数据库中存在需要的编译公用资源,则从公共数据库获取;如果公共数据库中不存在需要的编译公用资源,则从代码服务器获取该编译公用资源,并保存到公共数据库中。
[0075]在对待编译文件进行编译时,经常会用到.lib头文件等公用编译资源,这些资源是很多编译任务都需要用到的,如果每次都向代码服务器进行访问获取会大大浪费时间和资源,因此可以将这些公用资源存储到公共数据库中。如果编译任务所需的公共资源无法在公共数据库中找到,再从代码服务器进行获取,在获取到该公共资源后可以将其存至公共数据库,这样其他编译任务如果需要该公共资源就不必到代码服务器进行获取,节约了时间,效率更高。
[0076]在本发明的一个实施例中,图1所示的方法进一步包括:生成对公共数据库的访问账户信息;接收各虚拟机在每次启动时发送的获取/更新公共数据库的访问账户信息的请求,将所生成的相应访问账户信息发送给发送请求的虚拟机。
[0077]由于公共数据库中包含大量的从代码服务器获取的内容,因此如果不对公共数据库的访问权限加以限制,很容易引起安全问题,因此在本实施例中,需要生成对公共数据库的访问账户信息,使得虚拟机根据获取.更新的访问账户信息来访问公共数据库。
[0078]在本发明的一个实施例中,图1所示的方法进一步包括:将虚拟机反馈的编译信息,通过前端页面展示给用户。具体地,编译信息包括如下中的一种或多种:虚拟机在执行编译任务时的编译环境信息;虚拟机在执行编译任务时记录的编译日志信息;编译进度信息。用户可以根据这些信息了解到编译执行的状况,方便进行中断、回滚等操作。
[0079]在本发明的一个实施例中,图1所示的方法进一步包括:通过前端页面接收用户提交的查询信息;根据查询信息从回溯数据库和/或公共数据库中获取相应的内容,并通过前端页面展示给用户。
[0080]其中,提交查询信息的过程与编译过程可以是相互独立的,例如在提交编译任务前,查看公共数据库中是否包含所需的头文件,又例如,在编译结果文件出现问题需要排查时,访问回溯数据库调取之前执行过的编译任务等信息。[0081 ]在本发明的一个实施例中,上述方法进一步包括:将编译结果文件发送到签名服务器,由签名服务器对编译结果文件进行签名操作后输出签名后的文件,以及将签名后的文件发送到回溯数据库中保存一份。
[0082]编译结果文件进行签名后就拥有了软件开发者的认证,例如,在手游客户端上线时,用户往往在应用市场中查看到该客户端确实拥有开发者的签名才会确认下载,相当于确认了该客户端是经过官方认证的。因此,确保上线的产品是经过签名的、以及确保签名不被滥用是开发者需要注意的问题。在本实施例中由签名服务器完成编译结果文件的签名操作,签名后的文件同样可以保存到回溯数据库中,例如在产品出现问题后,可以从数据库中提取相应的文件进行调试检查。
[0083]图2示出了根据本发明一个实施例的一种分布式编译系统的结构示意图,如图2所示,分布式编译系统200包括:中心控制器210、分布式的虚拟机220集群、代码服务器230、公共数据库240和回溯数据库250。
[0084]中心控制器210,适于通过前端页面接收用户提交的编译任务,将所接收到的编译任务调度到分布式的虚拟机220集群中的相应虚拟机220上;其中,每个编译任务中包括:待编译文件在代码服务器230上的存储路径信息。
[0085]虚拟机220,适于根据所分配的编译任务从代码服务器230获取对应的待编译文件,对待编译文件进行编译并将编译结果文件输出到公共数据库240,以及适于将编译信息反馈给中心控制器210。
[0086]中心控制器210,还适于接收各虚拟机220反馈的编译信息,将编译任务以及与编译任务相关的用户信息和编译信息保存到回溯数据库250中。
[0087]可见,图2所示的系统,在多台虚拟机中执行文件的编译,这些虚拟机构成了分布式的虚拟机集群,在通过前端页面接收到用户提交的编译任务后,从编译任务中提取待编译代码在代码服务器中的存储路径信息,将编译任务调度到合适的虚拟机后便可以根据存储路径信息获取待编译文件进行编译,并将结果文件输出到公共数据库。各虚拟机在编译完成后生成编译反馈信息,将这些信息和与编译任务相关的用户信息和编译信息保存到回溯数据库中。该技术方案实现了文件的分布式编译,提供了独立、统一管理的编译环境,控制了成品质量;同时编译的结果文件保存在公共数据库中方便提取和调用;回溯数据库中的相关信息便于日后问题的回溯和复查,整体形成了可控、可溯的编译框架。[〇〇88]在本发明的一个实施例中,上述系统中,每个编译任务中还包括:编译环境要求信息;中心控制器210,适于根据预先搜集的各虚拟机220的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机220。[〇〇89]在本发明的一个实施例中,上述系统中,中心控制器210,适于将所接收到编译任务放入编译任务池中;每接收到一个虚拟机220的任务查询信息,根据预先搜集的各虚拟机 220的编译环境信息确定该虚拟机220的编译环境信息,从编译任务池中找出编译环境要求信息与该虚拟机220的编译环境信息匹配的编译任务分配给该虚拟机220;其中,空闲的虚拟机220每隔预设时间向中心控制器210发送一次任务查询信息。
[0090]在本发明的一个实施例中,上述系统中,每个编译任务中还包括:用户代码权限信息;中心控制器210,在将所接收到的编译任务调度到分布式的虚拟机220集群中的相应虚拟机220上之前,进一步适于将编译任务中的用户代码权限信息发送给代码服务器230进行校验,在校验通过后,在编译任务中的用户代码权限信息中打上校验通过标志,然后再将编译任务调度到相应的虚拟机220上;虚拟机220适于根据编译任务中的打上校验通过标志的用户代码权限信息,从代码服务器230获取对应的待编译文件。[0091 ]在本发明的一个实施例中,上述系统中,虚拟机220,进一步适于在对待编译文件进行编译时,如果需要编译公用资源,先到公共数据库240中查询;如果公共数据库240中存在需要的编译公用资源,则从公共数据库240获取;如果公共数据库240中不存在需要的编译公用资源,则从代码服务器230获取该编译公用资源,并保存到公共数据库240中。
[0092]在本发明的一个实施例中,上述系统中,中心控制器210,进一步适于生成对公共数据库240的访问账户信息;接收各虚拟机220在每次启动时发送的获取/更新公共数据库 240的访问账户信息的请求,将所生成的相应访问账户信息发送给发送请求的虚拟机220。
[0093]在本发明的一个实施例中,上述系统中,中心控制器210,进一步适于将虚拟机220 反馈的编译信息,通过前端页面展示给用户。
[0094]在本发明的一个实施例中,上述系统中,中心控制器210,进一步适于通过前端页面接收用户提交的查询信息;根据查询信息从回溯数据库250和/或公共数据库240中获取相应的内容,并通过前端页面展示给用户。[〇〇95]在本发明的一个实施例中,上述系统中,编译信息包括如下中的一种或多种:虚拟机220在执行编译任务时的编译环境信息;虚拟机220在执行编译任务时记录的编译日志信息;编译进度信息。
[0096]在本发明的一个实施例中,上述系统进一步包括:签名服务器(图未示出),适于从公共数据库240获取编译结果文件,对编译结果文件进行签名操作后输出签名后的文件,以及将签名后的文件发送到回溯数据库250中保存一份。[〇〇97]需要说明的是,上述各系统实施例的具体实现方式与前述对应方法实施例的【具体实施方式】相同,在此不再赘述。
[0098]综上所述,本发明的技术方案,在多台虚拟机中执行文件的编译,这些虚拟机构成了分布式的虚拟机集群,在通过前端页面接收到用户提交的编译任务后,从编译任务中提取待编译代码在代码服务器中的存储路径信息,将编译任务调度到合适的虚拟机后便可以根据存储路径信息获取待编译文件进行编译,并将结果文件输出到公共数据库。各虚拟机在编译完成后生成编译反馈信息,将这些信息和与编译任务相关的用户信息和编译信息保存到回溯数据库中。另外,用户还可以通过前端页面查看虚拟机反馈的编译信息,以及输入查询信息查看回溯数据库中的相应内容。该技术方案实现了文件的分布式编译,提供了独立、统一管理的编译环境,控制了成品质量;同时编译的结果文件保存在公共数据库中方便提取和调用;回溯数据库中的相关信息便于日后问题的回溯和复查,整体形成了可控、可溯的编译框架。
[0099]需要说明的是:[〇1〇〇]在此提供的算法和显示不与任何特定计算机、虚拟装置或者其它设备固有相关。 各种通用装置也可以与基于在此的示教一起使用。根据上面的描述,构造这类装置所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
[0101]在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
[0102]类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此, 遵循【具体实施方式】的权利要求书由此明确地并入该【具体实施方式】,其中每个权利要求本身都作为本发明的单独实施例。
[0103]本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
[0104]此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。[〇1〇5]本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的分布式编译系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
[0106]应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中, 不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
[0107]本发明的实施例公开了A1、一种实现分布式编译的方法,其中,该方法包括:[〇1〇8]通过前端页面接收用户提交的编译任务;每个编译任务中包括:待编译文件在代码服务器上的存储路径信息;
[0109]将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上,由相应虚拟机根据编译任务从代码服务器获取对应的待编译文件、对待编译文件进行编译并将编译结果文件输出到公共数据库;
[0110]接收各虚拟机反馈的编译信息,将编译任务以及与编译任务相关的用户信息和编译信息保存到回溯数据库中。
[0111]A2、如A1所述的方法,其中,
[0112]每个编译任务中还包括:编译环境要求信息;
[0113]所述将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上包括: 根据预先搜集的各虚拟机的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机。
[0114]A3、如A2所述的方法,其中,所述根据预先搜集的各虚拟机的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机包括:
[0115]将所接收到编译任务放入编译任务池中;
[0116]每接收到一个虚拟机的任务查询信息,根据预先搜集的各虚拟机的编译环境信息确定该虚拟机的编译环境信息,从编译任务池中找出编译环境要求信息与该虚拟机的编译环境信息匹配的编译任务分配给该虚拟机;
[0117]其中,空闲的虚拟机每隔预设时间发送一次任务查询信息。
[0118]A4、如A1所述的方法,其中,
[0119]每个编译任务中还包括:用户代码权限信息;
[0120]该方法在将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上之前,进一步包括:将编译任务中的用户代码权限信息发送给代码服务器进行校验,在校验通过后,在编译任务中的用户代码权限信息中打上校验通过标志,然后再将编译任务调度到分布式的虚拟机集群中的相应的虚拟机上;[0121 ]所述由相应虚拟机根据编译任务从代码服务器获取对应的待编译文件包括:相应虚拟机根据编译任务中的打上校验通过标志的用户代码权限信息,从代码服务器获取对应的待编译文件。
[0122]A5、如A1所述的方法,该方法进一步包括:
[0123]虚拟机对待编译文件进行编译时如果需要编译公用资源,先到公共数据库中查询;
[0124]如果公共数据库中存在需要的编译公用资源,则从公共数据库获取;
[0125]如果公共数据库中不存在需要的编译公用资源,则从代码服务器获取该编译公用资源,并保存到公共数据库中。
[0126]A6、如A1所述的方法,其中,该方法进一步包括:
[0127]生成对公共数据库的访问账户信息;
[0128]接收各虚拟机在每次启动时发送的获取/更新公共数据库的访问账户信息的请求,将所生成的相应访问账户信息发送给发送请求的虚拟机。
[0129]A7、如A1所述的方法,其中,该方法进一步包括:
[0130]将虚拟机反馈的编译信息,通过前端页面展示给用户。[〇131 ] A8、如A1所述的方法,其中,该方法进一步包括:
[0132]通过前端页面接收用户提交的查询信息;
[0133]根据查询信息从回溯数据库和/或公共数据库中获取相应的内容,并通过前端页面展示给用户。
[0134]A9、如A1所述的方法,其中,所述编译信息包括如下中的一种或多种:
[0135]虚拟机在执行编译任务时的编译环境信息;
[0136]虚拟机在执行编译任务时记录的编译日志信息;
[0137]编译进度信息。
[0138]A10、如A1-A9中任一项所述的方法,其中,该方法进一步包括:
[0139]将编译结果文件发送到签名服务器,由签名服务器对编译结果文件进行签名操作后输出签名后的文件,以及将签名后的文件发送到回溯数据库中保存一份。[〇14〇]本发明的实施例还公开了B11、一种分布式编译系统,其中,该编译系统包括:中心控制器、分布式的虚拟机集群、代码服务器、公共数据库和回溯数据库;
[0141]中心控制器,适于通过前端页面接收用户提交的编译任务,将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上;其中,每个编译任务中包括:待编译文件在代码服务器上的存储路径信息;
[0142]虚拟机,适于根据所分配的编译任务从代码服务器获取对应的待编译文件,对待编译文件进行编译并将编译结果文件输出到公共数据库,以及适于将编译信息反馈给中心控制器;
[0143]中心控制器,还适于接收各虚拟机反馈的编译信息,将编译任务以及与编译任务相关的用户信息和编译信息保存到回溯数据库中。
[0144]B12、如B11所述的系统,其中,
[0145]每个编译任务中还包括:编译环境要求信息;
[0146]所述中心控制器,适于根据预先搜集的各虚拟机的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机。
[0147]B13、如B12所述的系统,其中,
[0148]所述中心控制器,适于将所接收到编译任务放入编译任务池中;每接收到一个虚拟机的任务查询信息,根据预先搜集的各虚拟机的编译环境信息确定该虚拟机的编译环境信息,从编译任务池中找出编译环境要求信息与该虚拟机的编译环境信息匹配的编译任务分配给该虚拟机;
[0149]其中,空闲的虚拟机每隔预设时间向中心控制器发送一次任务查询信息。
[0150]B14、如B11所述的系统,其中,[0151 ]每个编译任务中还包括:用户代码权限信息;
[0152]所述中心控制器,在将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上之前,进一步适于将编译任务中的用户代码权限信息发送给代码服务器进行校验,在校验通过后,在编译任务中的用户代码权限信息中打上校验通过标志,然后再将编译任务调度到相应的虚拟机上;
[0153]虚拟机适于根据编译任务中的打上校验通过标志的用户代码权限信息,从代码服务器获取对应的待编译文件。
[0154]B15、如B11所述的系统,
[0155]虚拟机,进一步适于在对待编译文件进行编译时,如果需要编译公用资源,先到公共数据库中查询;如果公共数据库中存在需要的编译公用资源,则从公共数据库获取;如果公共数据库中不存在需要的编译公用资源,则从代码服务器获取该编译公用资源,并保存到公共数据库中。
[0156]B16、如B11所述的系统,其中,
[0157]所述中心控制器,进一步适于生成对公共数据库的访问账户信息;接收各虚拟机在每次启动时发送的获取/更新公共数据库的访问账户信息的请求,将所生成的相应访问账户信息发送给发送请求的虚拟机。
[0158]B17、如B11所述的系统,其中,
[0159]所述中心控制器,进一步适于将虚拟机反馈的编译信息,通过前端页面展示给用户。
[0160]B18、如Bl 1所述的系统,其中,该方法进一步包括:
[0161]所述中心控制器,进一步适于通过前端页面接收用户提交的查询信息;根据查询信息从回溯数据库和/或公共数据库中获取相应的内容,并通过前端页面展示给用户。
[0162]B19、如Bl 1所述的系统,其中,所述编译信息包括如下中的一种或多种:
[0163]虚拟机在执行编译任务时的编译环境信息;
[0164]虚拟机在执行编译任务时记录的编译日志信息;
[0165]编译进度信息。
[0166]B20、如B11-B17中任一项所述的系统,其中,该系统进一步包括:
[0167]签名服务器,适于从公共数据库获取编译结果文件,对编译结果文件进行签名操作后输出签名后的文件,以及将签名后的文件发送到回溯数据库中保存一份。
【主权项】
1.一种实现分布式编译的方法,其中,该方法包括:通过前端页面接收用户提交的编译任务;每个编译任务中包括:待编译文件在代码服 务器上的存储路径信息;将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上,由相应虚拟机 根据编译任务从代码服务器获取对应的待编译文件、对待编译文件进行编译并将编译结果 文件输出到公共数据库;接收各虚拟机反馈的编译信息,将编译任务以及与编译任务相关的用户信息和编译信 息保存到回溯数据库中。2.如权利要求1所述的方法,其中,每个编译任务中还包括:编译环境要求信息;所述将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上包括:根据 预先搜集的各虚拟机的编译环境信息,将所接收到的编译任务分配给符合该编译任务的编 译环境要求的空闲的虚拟机。3.如权利要求2所述的方法,其中,所述根据预先搜集的各虚拟机的编译环境信息,将 所接收到的编译任务分配给符合该编译任务的编译环境要求的空闲的虚拟机包括:将所接收到编译任务放入编译任务池中;每接收到一个虚拟机的任务查询信息,根据预先搜集的各虚拟机的编译环境信息确定 该虚拟机的编译环境信息,从编译任务池中找出编译环境要求信息与该虚拟机的编译环境 信息匹配的编译任务分配给该虚拟机;其中,空闲的虚拟机每隔预设时间发送一次任务查询信息。4.如权利要求1所述的方法,其中,每个编译任务中还包括:用户代码权限信息;该方法在将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟机上之前, 进一步包括:将编译任务中的用户代码权限信息发送给代码服务器进行校验,在校验通过 后,在编译任务中的用户代码权限信息中打上校验通过标志,然后再将编译任务调度到分 布式的虚拟机集群中的相应的虚拟机上;所述由相应虚拟机根据编译任务从代码服务器获取对应的待编译文件包括:相应虚拟 机根据编译任务中的打上校验通过标志的用户代码权限信息,从代码服务器获取对应的待 编译文件。5.如权利要求1所述的方法,该方法进一步包括:虚拟机对待编译文件进行编译时如果需要编译公用资源,先到公共数据库中查询;如果公共数据库中存在需要的编译公用资源,则从公共数据库获取;如果公共数据库中不存在需要的编译公用资源,则从代码服务器获取该编译公用资 源,并保存到公共数据库中。6.—种分布式编译系统,其中,该编译系统包括:中心控制器、分布式的虚拟机集群、代 码服务器、公共数据库和回溯数据库;中心控制器,适于通过前端页面接收用户提交的编译任务,将所接收到的编译任务调 度到分布式的虚拟机集群中的相应虚拟机上;其中,每个编译任务中包括:待编译文件在代 码服务器上的存储路径信息;虚拟机,适于根据所分配的编译任务从代码服务器获取对应的待编译文件,对待编译 文件进行编译并将编译结果文件输出到公共数据库,以及适于将编译信息反馈给中心控制 器;中心控制器,还适于接收各虚拟机反馈的编译信息,将编译任务以及与编译任务相关 的用户信息和编译信息保存到回溯数据库中。7.如权利要求6所述的系统,其中,每个编译任务中还包括:编译环境要求信息;所述中心控制器,适于根据预先搜集的各虚拟机的编译环境信息,将所接收到的编译 任务分配给符合该编译任务的编译环境要求的空闲的虚拟机。8.如权利要求7所述的系统,其中,所述中心控制器,适于将所接收到编译任务放入编译任务池中;每接收到一个虚拟机 的任务查询信息,根据预先搜集的各虚拟机的编译环境信息确定该虚拟机的编译环境信 息,从编译任务池中找出编译环境要求信息与该虚拟机的编译环境信息匹配的编译任务分 配给该虚拟机;其中,空闲的虚拟机每隔预设时间向中心控制器发送一次任务查询信息。9.如权利要求6所述的系统,其中,每个编译任务中还包括:用户代码权限信息;所述中心控制器,在将所接收到的编译任务调度到分布式的虚拟机集群中的相应虚拟 机上之前,进一步适于将编译任务中的用户代码权限信息发送给代码服务器进行校验,在 校验通过后,在编译任务中的用户代码权限信息中打上校验通过标志,然后再将编译任务 调度到相应的虚拟机上;虚拟机适于根据编译任务中的打上校验通过标志的用户代码权限信息,从代码服务器 获取对应的待编译文件。10.如权利要求6所述的系统,虚拟机,进一步适于在对待编译文件进行编译时,如果需要编译公用资源,先到公共数 据库中查询;如果公共数据库中存在需要的编译公用资源,则从公共数据库获取;如果公共 数据库中不存在需要的编译公用资源,则从代码服务器获取该编译公用资源,并保存到公 共数据库中。
【文档编号】G06F9/455GK106095522SQ201610391177
【公开日】2016年11月9日
【申请日】2016年6月3日 公开号201610391177.8, CN 106095522 A, CN 106095522A, CN 201610391177, CN-A-106095522, CN106095522 A, CN106095522A, CN201610391177, CN201610391177.8
【发明人】张 杰, 杨银辉, 高大鹏, 刘浩, 曹曙
【申请人】北京奇虎科技有限公司, 奇智软件(北京)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1