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

文档序号:10686882阅读:509来源:国知局
一种实现分布式编译的方法和分布式编译系统的制作方法
【专利摘要】本发明公开了一种实现分布式编译的方法和分布式编译系统。其中方法包括:当用户登录分布式编译系统时,确定用户分组信息并根据该信息向该用户展示其有查看权限的编译任务;接收该用户提交的编译任务并将其与该用户的分组信息对应保存;每个编译任务中包括:待编译文件在代码服务器上的存储路径信息;接收到已登录用户的对有查看权限的编译任务中的指定任务进行编译操作的指令时,判断其是否对该任务具有操作权限,是则将该任务放入待处理任务队列中;将待处理任务队列中的编译任务调度到分布式的虚拟机集群中的相应虚拟机上并由其获取对应的待编译文件后进行编译并将编译结果文件输出到公共数据库。该技术方案通过权限管理控制了编译的安全性。
【专利说明】
一种实现分布式编译的方法和分布式编译系统
技术领域
[0001]本发明涉及编译领域,具体涉及一种实现分布式编译的方法和分布式编译系统。
【背景技术】
[0002]代码编译是将程序员编写的程序源码通过编译程序编译为机器可执行文件的过程。在软件开发公司中,往往不是由个人而是多人负责开发某个软件,因此在开发过程中会产生多个版本的代码,而最终软件只能由某个最终确定的版本编译生成,因此许多公司内都搭建了代码服务器进行代码的管理。然而现有技术中对于代码编译并没有较为合理的管理方法,由于任一台开发机上都有可能安装编译程序,因此每一个开发人员都可以使用自己的开发机对代码执行编译,导致最终生成的软件产品质量难以控制。

【发明内容】

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