CN112114816B - 一种分布式编译系统和方法 - Google Patents

一种分布式编译系统和方法 Download PDF

Info

Publication number
CN112114816B
CN112114816B CN202011025165.6A CN202011025165A CN112114816B CN 112114816 B CN112114816 B CN 112114816B CN 202011025165 A CN202011025165 A CN 202011025165A CN 112114816 B CN112114816 B CN 112114816B
Authority
CN
China
Prior art keywords
compiling
task
source code
server
information
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011025165.6A
Other languages
English (en)
Other versions
CN112114816A (zh
Inventor
胡登
张爽
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Uniontech Software Technology Co Ltd
Original Assignee
Uniontech Software Technology Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Uniontech Software Technology Co Ltd filed Critical Uniontech Software Technology Co Ltd
Priority to CN202011025165.6A priority Critical patent/CN112114816B/zh
Publication of CN112114816A publication Critical patent/CN112114816A/zh
Application granted granted Critical
Publication of CN112114816B publication Critical patent/CN112114816B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种分布式编译系统和方法,分布式编译方法适于在分布式编译系统中运行,方法包括步骤:监控端监控源代码的更新事件,解析源代码的更新事件得到源代码的编译内容和编译信息,并发送至任务提交服务器;任务提交服务器接收监控端发送的编译内容和编译信息,将编译内容和编译信息进行组装生成编译任务,并发送至任务分发服务器;任务分发服务器接收任务分发服务器发送的编译任务,将编译任务匹配相应的编译端并进行分发;以及编译端接收任务分发器分发的编译任务进行执行。本发明还一并公开了一种计算设备和计算机可读存储介质。

Description

一种分布式编译系统和方法
技术领域
本发明涉及程序开发领域,特别涉及一种分布式编译系统和方法。
背景技术
在开发新程序和对程序进行更新升级时,将源代码文件转化为目标程序的编译过程是一项必不可少的工作。对源代码文件进行编译时,需要根据源代码文件所需的编译环境进行编译环境的搭建,同时源代码文件随着业务需求增加和开发版本的迭代也变得越来越大,编译的时间也越来越长。
因此,目前在程序开发过程中,在编译方面对计算机的性能要求也越来越高,需要在尽量短的时间范围内完成新代码的编译测试,尽快完成程序的上线。目前在对源代码文件进行编译时,编译的效率受到计算机计算能力的限制。每次在编译时,编译所需要的环境均需要重复地重新去构建,编译环境不能够进行共享和复用,每台计算机设备所能提供的编译架构也较为单一。
为此,需要一种新的编译系统和方法。
发明内容
为此,本发明提供一种分布式编译系统和方法,以力图解决或者至少缓解上面存在的问题。
根据本发明的一个方面,提供一种分布式编译系统,包括:多个监控端,监控端适于监控源代码的更新事件,解析源代码的更新事件得到源代码的编译内容和编译信息,并发送至任务提交服务器;任务提交服务器,任务提交服务器与多个监控端通信连接,适于接收监控端发送的编译内容和编译信息,将编译内容和编译信息进行组装生成编译任务,并发送至任务分发服务器;任务分发服务器,任务分发服务器与任务提交服务器通信连接,适于接收任务分发服务器发送的编译任务,将编译任务匹配相应的编译端并进行分发;以及多个编译端,多个编译端与任务分发服务器通信连接,适于接收任务分发器分发的编译任务进行执行。
可选地,在根据本发明的系统中,监控端进一步适于:判断源代码与源代码的备份是否相同;若源代码与备份不同,则判断监控到源代码的更新事件。
可选地,在根据本发明的系统中,任务分发服务器还适于:获取编译任务对应的源代码,将源代码压缩为源码包;生成源码包的下载链接发送到编译端以便编译端下载源码包。
可选地,在根据本发明的系统中,编译信息包括编译任务的任务级别,任务分发服务器还适于:为编译任务分配任务ID;根据任务级别在任务列表中排序任务ID以便依次分发编译任务。
可选地,在根据本发明的系统中,编译内容包括编译架构,每个编译端与一种编译架构相对应;任务分发服务器进一步适于:确定与编译架构相对应的编译端,并将编译任务发送到所匹配的编译端;若编译任务包括多个编译架构,则确定与各编译架构相对应的各编译端,并将编译任务发送至所匹配的各个编译端。
可选地,在根据本发明的系统中,任务分发服务器还适于:为编译端添加预定标签;将编译任务发送至携带有预定标签的编译端执行编译任务。
可选地,在根据本发明的系统中,任务分发服务器还适于:获取编译端的节点信息,根据节点信息注册编译端;获取编译端的状态信息,与编译端建立长连接,向满足预定状态的编译端分发编译任务。
可选地,在根据本发明的系统中,编译端进一步适于:向任务分发服务器发送编译任务的编译日志及编译过程中的状态信息以便监控编译过程。
可选地,在根据本发明的系统中,编译端还适于:执行完毕编译任务后,向任务分发服务器发送编译后的文件列表,以便任务分发服务器根据文件列表下载编译后的文件。
可选地,在根据本发明的系统中,任务分发服务器还适于:确定编译端执行编译任务时的状态信息是否异常;若确定状态信息异常则指示编译端重新执行编译任务或匹配其他编译端并进行分发执行编译任务。
根据本发明的另一个方面,提供一种分布式编译方法,适于在一种分布式编译系统中执行,方法包括:监控端监控源代码的更新事件,解析源代码的更新事件得到源代码的编译内容和编译信息,并发送至任务提交服务器;任务提交服务器接收监控端发送的编译内容和编译信息,将编译内容和编译信息进行组装生成编译任务,并发送至任务分发服务器;任务分发服务器接收任务分发服务器发送的编译任务,将编译任务匹配相应的编译端并进行分发;以及编译端接收任务分发器分发的编译任务进行执行。
可选地,在根据本发明的方法中,监控端监控源代码的更新事件包括:监控端判断源代码与源代码的备份是否相同;若源代码与备份不同,则判断监控到源代码的更新事件。
可选地,在根据本发明的方法中,还包括步骤:任务分发服务器获取编译任务对应的源代码,将源代码压缩为源码包;生成源码包的下载链接发送到编译端以便编译端下载源码包。
可选地,在根据本发明的方法中,编译信息包括编译任务的任务级别,方法还包括步骤:任务分发服务器为编译任务分配任务ID;根据任务级别在任务列表中排序任务ID以便依次分发编译任务。
可选地,在根据本发明的方法中,编译内容包括编译架构,每个编译端与一种编译架构相对应;任务分发服务器进一步适于:确定与编译架构相对应的编译端,并将编译任务发送到所匹配的编译端;若编译任务包括多个编译架构,则确定与各编译架构相对应的各编译端,并将编译任务发送至所匹配的各个编译端。可选地,在根据本发明的方法中,还包括步骤:任务分发服务器为编译端添加预定标签;将编译任务发送至携带有预定标签的编译端执行编译任务。
可选地,在根据本发明的方法中,还包括:任务分发服务器获取编译端的节点信息,根据节点信息注册编译端;获取编译端的状态信息,与编译端建立长连接,向满足预定状态的编译端分发编译任务。
可选地,在根据本发明的方法中,编译端接收任务分发器分发的编译任务进行执行包括步骤:编译端向任务分发服务器发送编译任务的编译日志及编译过程中的状态信息以便监控编译过程。
可选地,在根据本发明的方法中,还包括:编译端执行完毕编译任务后,向任务分发服务器发送编译后的文件列表,以便任务分发服务器根据文件列表下载编译后的文件。
可选地,在根据本发明的方法中,还包括:任务分发服务器确定编译端执行编译任务时的状态信息是否异常;若确定状态信息异常则指示编译端重新执行编译任务或匹配其他编译端并进行分发执行编译任务。
根据本发明的又一方面,提供了一种计算设备,包括:一个或多个处理器;存储器;以及一个或多个程序,其中一个或多个程序存储在存储器中并被配置为由一个或多个处理器执行,一个或多个程序包括用于执行根据本发明的一种分布式编译方法的任一方法的指令。
根据本发明的还有一个方面,提供了一种存储一个或多个程序的计算机可读存储介质,一个或多个程序包括指令,该指令当由计算设备执行时,使得计算设备执行根据本发明的一种分布式编译方法中的任一方法。
本发明中,监控端监控源代码的更新事件,解析源代码的更新事件得到源代码的编译内容和编译信息,并发送至任务提交服务器;任务提交服务器接收监控端发送的编译内容和编译信息,将编译内容和编译信息进行组装生成编译任务,并发送至任务分发服务器,从而能够将所有需要进行编译的任务集中进行处理,提高处理效率。并进一步的,任务分发服务器接收任务分发服务器发送的编译任务,将编译任务匹配相应的编译端并进行分发;以及编译端接收任务分发服务器分发的编译任务进行执行,将汇总的编译任务统一进行分发编译端进行编译,使编译的任务使用同一套分布式编译系统进行编译提高源代码的编译速度和效率,减轻维护代码工作人员的工作量。
并进一步的,任务分发服务器在对编译任务进行分发时,根据编译任务的编译架构对编译任务进行分发,当编译任务包括多个编译架构时,确定与各编译架构相对应的各编译端,并将编译任务发送至所匹配的各个编译端,从而对一项编译任务根据其中编译架构的不同并行执行该编译任务,提高对源代码的编译效率,缩短编译时间,加快程序更新速度。并且,编译任务分发端可以对编译端添加预定标签,将编译任务发送至携带有预定标签的编译端执行编译任务,预定标签可以为用户根据自身目的进行添加,从而能够实现快速对一项编译任务向编译端进行部署,提高分发策略的复用率,一次分发后续可以继续使用该分发方案。
并且,编译端在执行编译任务的过程中,与任务分发服务器建立长连接,将执行编译任务的执行情况实时发送给任务分发服务器,包括编译任务的编译日志和编译过程中的状态信息,开发人员可以根据返回的编译任务的状态信息及时对编译任务进行调整,最终实现顺利完成所有编译任务。
附图说明
为了实现上述以及相关目的,本文结合下面的描述和附图来描述某些说明性方面,这些方面指示了可以实践本文所公开的原理的各种方式,并且所有方面及其等效方面旨在落入所要求保护的主题的范围内。通过结合附图阅读下面的详细描述,本公开的上述以及其它目的、特征和优势将变得更加明显。遍及本公开,相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个示范性实施例的分布式编译系统的示意图;
图2示出了根据本发明一个示范性实施例的计算设备200的结构框图;以及
图3示出了根据本发明一个实施例的一种分布式编译系统方法300的流程图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。相同的附图标记通常指代相同的部件或元素。
图1示出了根据本发明一个示范性实施例的分布式编译系统的示意图。如图所示,分布式编译系统100包括监控端111~11n,任务提交服务器120任务分发服务器130和编译端141~14n。监控端111~11n与任务提交服务器120连接,任务提交服务器120与任务分发服务器130连接,任务分发服务器130与编译端141~14n连接。
监控端111~11n可以实现为如图所示的多个分布式监控端111~11n,根据在地理上以方便编译人员使用和传输数据的方式进行部署。每个监控端111~11n均连接到版本服务器181~18n,其中,监控端111连接到版本服务器181,监控端112连接到版本服务器182,······监控端11n连接到版本服务器18n。图中监控端111~11n与版本服务器181~18n所连接的方式仅是示例性的,在具体的实际情况中,每个监控端111~11n可以连接到多个版本服务器,本发明对监控端111~11n所连接的版本服务器的数量不作限制。监控端111~11n监控源代码的更新事件,解析源代码的更新事件得到源代码的编译内容和编译信息,并发送至任务提交服务器120。监控端111~11n监控源代码的更新事件即监控版本服务器181~18n中的源代码的更新。版本服务器181~18n中存储有编程人员所撰写的源代码,编程人员在每次编辑完毕源代码后,均将源代码上传到版本服务器181~18n中,上传的新的源代码覆盖原先在版本服务器181~18n中存储的源代码即发生源代码的更新事件。源代码的更新事件包括对源代码的删除,增加或修改,本发明对源代码的更新事件的形式不作限制,任何形式的源代码的更新事件均可以被监控端111~11n所监控到。源代码的更新事件中包括源代码的编译内容和编译信息,监控端111~11n对源代码的更新事件进行解析得到源代码的编译内容和编译信息。
任务提交服务器120与监控端111~11n通信连接,图中任务提交服务器120与监控端111~11n所连接的方式仅为示例性的,本发明对任务提交服务器120所链接的监控端的数量不作限制。任务提交服务器120接收来自监控端111~11n解析源代码的更新事件得到的编译内容和编译信息,将编译内容和编译信息进行组装生成编译任务,并发送至任务分发服务器130。
任务提交服务器120与编译端141~14n连接,图中任务提交服务器120与编译端141~14n相连接的方式仅为示例性的,在具体的实践情况中,任务提交服务器120可以连接多种类型的编译端,本发明对任务提交服务器120所连接的编译端141~14n的数量和类型不作限制。任务分发服务器130接收来自任务提交服务器120发送的编译任务,并将编译任务匹配相应的编译端141~14n进行分发。任务分发服务器130与所连接的编译端141~14n构成主从设备模式,其中任务提交服务器120主设备,所连接的所有编译端141~14n构成从设备,主设备任务提交服务器120将编译任务匹配编译端141~14n并进行分发,从设备编译端141~14n进行编译任务的执行对编译任务进行执行,编译任务执行的结果为各个编译端141~14n所执行编译任务的结果,主设备将编译任务进行汇总得到所分发的编译任务执行结果,后续将结合具体实际情况进行说明本发明中该主从设备模式的运行情况。
编译端141~14n连接到软件仓库190,编译端141~14n接收任务分发器分发的编译任务进行执行后,将编译源代码得到的编译结果存储到软件仓库190。编译端141~14n为分布式的编译端,根据在地理上以方便编译人员编译和传输数据的方式进行部署,分布式的编译端141~14n的其中若干个可以共同执行一项编译任务。多个编译端141~14n还可以具有多种不同的架构,每个编译端141~14n的架构可不同以便执行不同类型的编译任务。被分配执行编译任务的编译端141~14n的架构与所分配的编译任务所需要的编译架构相同,执行编译任务时编译时将更新的源代码翻译为相应的硬件操作指定集。
软件仓库190中存储有所有编译端141~14n编译后的所有编译结果,编译人员在将编写的源代码上传到版本服务器181~18n后,待分布式编译系统100将源代码编译完成后,从软件仓库190中获取编译结果,进行下一步开发工作。
监控端111~11n,任务提交服务器120,任务分发服务器130和编译端141~14n,均可以实现为一种计算设备。图2示出了根据本发明一个示范性实施例的计算设备200的结构框图。如图2所示,在基本的配置202中,计算设备200典型地包括系统存储器206和一个或者多个处理器204。存储器总线208可以用于在处理器204和系统存储器206之间的通信。
取决于期望的配置,处理器204可以是任何类型的处理,包括但不限于:微处理器(μP)、微控制器(μC)、数字信息处理器(DSP)或者它们的任何组合。处理器204可以包括诸如一级高速缓存210和二级高速缓存212之类的一个或者多个级别的高速缓存、处理器核心214和寄存器216。示例的处理器核心214可以包括运算逻辑单元(ALU)、浮点数单元(FPU)、数字信号处理核心(DSP核心)或者它们的任何组合。示例的存储器控制器218可以与处理器204一起使用,或者在一些实现中,存储器控制器218可以是处理器204的一个内部部分。
取决于期望的配置,系统存储器206可以是任意类型的存储器,包括但不限于:易失性存储器(诸如RAM)、非易失性存储器(诸如ROM、闪存等)或者它们的任何组合。系统存储器206可以包括操作系统220、一个或者多个程序222以及程序数据224。在一些实施方式中,程序222可以布置为在操作系统上由一个或者多个处理器204利用程序数据224执行指令。
计算设备200还可以包括有助于从各种接口设备(例如,输出设备242、外设接口244和通信设备246)到基本配置202经由总线/接口控制器230的通信的接口总线240。示例的输出设备242包括图形处理单元248和音频处理单元250。它们可以被配置为有助于经由一个或者多个A/V端口252与诸如显示器或者扬声器之类的各种外部设备进行通信。示例外设接口244可以包括串行接口控制器254和并行接口控制器256,它们可以被配置为有助于经由一个或者多个I/O端口258和诸如输入设备(例如,键盘、鼠标、笔、语音输入设备、触摸输入设备)或者其他外设(例如打印机、扫描仪等)之类的外部设备进行通信。示例的通信设备246可以包括网络控制器260,其可以被布置为便于经由一个或者多个通信端口264与一个或者多个其他计算设备262通过网络通信链路的通信。
网络通信链路可以是通信介质的一个示例。通信介质通常可以体现为在诸如载波或者其他传输机制之类的调制数据信号中的计算机可读指令、数据结构、程序模块,并且可以包括任何信息递送介质。“调制数据信号”可以这样的信号,它的数据集中的一个或者多个或者它的改变可以在信号中编码信息的方式进行。作为非限制性的示例,通信介质可以包括诸如有线网络或者专线网络之类的有线介质,以及诸如声音、射频(RF)、微波、红外(IR)或者其它无线介质在内的各种无线介质。这里使用的术语计算机可读介质可以包括存储介质和通信介质二者。
在根据本发明的计算设备200中,应用222包括执行一种分布式编译方法300的多条程序指令,这些程序指令可以指示处理器204执行本发明的一种在分布式编译系统100中运行的分布式编译方法300中的部分步骤,以便分布式编译系统100中的各部分通过执行本发明的一种分布式编译方法300来实现向编译人员提供分布式编译服务。
计算设备200可以实现为服务器,例如文件服务器、数据库服务器、应用程序服务器等,这些电子设备可以是诸如个人数字助理(PDA)、无线网络浏览设备、应用专用设备、或者可以包括上面任何功能的混合设备。可以实现为包括桌面计算机和笔记本计算机配置的个人计算机,也在一些实施例中,计算设备200被配置为执行一种分布式编译方法300。
图3示出了根据本发明一个实施例的一种分布式编译方法300的流程图。如图3所示,一种分布式编译方法300始于步骤S310,监控端111~11n监控源代码的更新事件,解析源代码的更新事件得到源代码的编译内容和编译信息,并发送至任务提交服务器120。监控端111~11n监控源代码的更新即监控版本服务器181~18n中的源代码的更新事件。下面以监控端111、版本服务器181为例,说明本发明分布式编译方法300的执行过程,分布式编译系统100中相应的其他部分执行方法300中的步骤时与所示例的结构相同。
版本服务器181中的所产生的源代码更新事件的类型包括:
1.Push events,即将源代码更新数据推送到版本服务器181
2.Tag push events,即将源代码版本更新数据推送到版本服务器181
3.Comments,即添加对版本服务器181中的源代码的评论
4.Confidential Comments,即添加对版本服务器181中的源代码受信任的评论
5.Issues events,即针对版本服务器181中的讨论议题的创建、更新、合并
6.Confidential Issues events,即针对版本服务器181中的讨论议题的创建、更新、合并
7.Merge request events,即针对版本服务器181中源代码分支的合并请求
8.Job events,即针对版本服务器181中源代码的任务状态变化
9.Pipeline events,即针对的版本服务器181中流水线状态变化
版本服务器181中产生上述类型的更新事件中的任意一种,监控端111均可监控到并对该更新事件进行处理。根据本发明的一个实施例,监控端111监控到版本服务器181中发生源代码更新事件1,更新事件1的类型为类型1:Push events,将源代码的更新数据推送到版本服务器181,该源代码更新事件1的一个示例如下:
该源代码的更新事件1中,包括的部分操作信息如下:更新事件提交的用户id为4,该更新事件的类型为Push events,提交代码的开发人员的用户名为John Smith,提交的时间为2011年12月12日,下午14时27分31秒。
根据本发明的一个实施例,监控端111在监控版本服务器181中的源代码的更新事件时,使用GIT代码管理工具进行管理和监控,GIT代码管理工具可以在分布式的监控端111和版本服务器181中应用。每一个版本服务器181~18n中均存储有开发人员所编写的上一版本的源代码即源代码的备份,开发人员在版本服务器181中存储有新的源代码后,监控端111对存储的新的源代码与在版本服务器181中存储的与源代码的备份进行比对判断是否相同,若提交的新的源代码与备份相同,则不对该次提交的原代码进行处理,若与备份不同,则判断监控到源代码的更新事件,进行下一步操作。
监控端111监控到版本服务器181中的更新事件后,将更新事件解析得到源代码的编译内容和编译信息。源代码的编译信息对源代码的编译内容进行描述,为源代码此次更新的属性信息。
随后,执行步骤S320,任务提交服务器120接收监控端111发送的编译内容和编译信息,将编译内容和编译信息进行组装生成编译任务,并发送至任务分发服务器130。
编译信息中包括源代码更新事件的过滤规则,过滤规则规定了是否对该次源代码的更新事件进行忽略,有开发人员上传时进行手动配置,设置忽略此次源代码的更新事件时即只完成在版本服务器181中的备份更新,若设置不忽略即需要对此次源代码的更新事件的源代码进行编译。任务提交服务器120生成编译任务之前,任务提交服务器120还对过滤规则进行判断,若过滤规则规定忽略此次更新事件,则不生成对应的编译任务,若过滤规则规定执行此次更新事件,则生成对应的编译任务。
根据本发明的一个实施例,任务提交服务器120判断更新事件的过滤规则的方式为:根据开发人员设置的my-devlopment-branch正则字符串,判断是否能与预设值相匹配,若匹配成功则将更新事件生成编译任务,若匹配不成功则不对该源代码的更新事件进行处理。
任务提交服务器120生成编译任务的为将源代码更新事件的编译内容和编译信息按照预定格式进行组装,生成编译任务,本发明对组装的格式不作限制,具体实践情况中,可以根据所需要的编译任务格式进行组装。编译内容包括编译步骤,执行环境,依赖文件,编译架构。编译步骤在默认情况下为空,代表默认情况下采用预设的步骤进行执行编译。根据本发明的一个实施例,执行的编译任务的默认执行步骤为采用debian的包管理工具中包含的具体步骤进行编译,如下所示:
1.clean:清理所有编译的、生成的或编译树中无用的文件;
2.build:在编译树中将代码编译为程序并生成格式化的文档;
3.build-arch:在编译树中将代码编译为依赖于架构的程序;
4.build-indep:在编译树中将代码编译为独立于架构的格式化文档;
5.install:把文件安装到debian目录内为各个二进制包构建的文件树;
6.binary:创建所有二进制包(是binary-arch和binary-indep的合并);
7.binary-arch:在父目录中创建平台依赖(Architecture:any)的二进制包;
8.binary-indep:在父目录中创建平台独立(Architecture:all)的二进制包。
在默认情况下,按照上述步骤依次执行完成编译,若编译人员对编译任务的执行步骤需要添加或删除,则会在源代码更新事件中编译内容的编译步骤中进行相应调整。根据本发明的一个实施例,编译人员在编译步骤2中添加自定义的执行脚本,则添加后,编译步骤2的示例如下:
表示执行该编译任务时,在第二步骤(bulid)中输出一个“bulid”字符串。
编译内容的执行环境即编译任务在编译时所需要的环境,为该环境由编译所需要的基本软件列表以软件包形式形成,根据本发明的一个实施例,编译任务的执行环境为tgz格式的压缩包,本发明对编译任务的执行环境形式不作限制。
编译内容的依赖文件为源代码的编译过程中需要用到的库文件和头文件等信息,编译内容的依赖文件以URL格式记载,编译端141~14n在执行编译任务时获取源代码的依赖库和头文件列表,获取依赖文件完成编译准备工作。
编译内容的编译架构为执行编译该源代码所需的架构,不同源代码所需的编译架构不同,由于在具体事件过程中需要编译不同架构的源代码,因此需要获取源代码的架构以便匹配相应的编译端141~14n进行编译。源代码的编译架构为amd64、i386、arm64、mips64el、sw_64等中的一种或多种,本发明对编译架构的类型和数量不作限制。
编译信息除上述的过滤规则还包括编译优先级,分发要求和编译生成文件的文件名,存储地址。编译优先级为编译任务的执行优先级别,当高优先级的编译任务和低优先级的任务同时需要执行时,优先执行高优先级的编译任务。编译任务的优先级包括级别1~级别9,共9级,其中级别1的优先级最高,级别9的优先级最低。
编译信息的分发要求为编译任务的特殊分发规则,为任务分发服务器130向编译端141~14n分发编译任务的最高规则,若编译人员规定了分发要求,则任务分发服务器130按照该分发要求分发编译任务。根据本发明的一个实施例,编译端141~14n的分发要求可以为按照向特定标签的编译端141~14n分发编译任务,标签由任务分发服务器130对编译端141~14n进行设置的得到,后续将对该种分发方式进行进一步说明。在具体的实践情况中,开发人员可以按照实际需要设置不同种类的编译任务分发要求,本发明对分发要求的种类和形式不作限制。
编译信息中编译生成文件的文件名为复合软件版本管理需求的版本号编译人员所自定义的生成文件的文件名。根据本发明的一个实施例,编译生成文件的文件名格式为git describe—tag,通过版本号生成命令进行规定,本发明对文件名的格式不作限制。
编译信息中编译生成文件的存储地址为编译端141~14n执行完毕编译任务,编译完毕源代码后所生成文件在软件仓库190中的存储地址,编译端141~14n编译完毕后按照该存储地址在软件仓库190中进行存储。
根据本发明的一个实施例,编译内容的编译步骤为空,执行环境为"url":"pools.corp.deepin.com/sw-repos/buster-loongson64.tgz"和"md5sum":"33a26f4566d9d02434c3b44bae64719c",依赖文件为'../config/sources.list';编译内容的编译架构为'amd64'和'mips64el',按照josn格式进行组装编译内容和编译信息,组装完成的编译任务1的具体内容如下所示:
/>
随后,执行步骤S330,任务分发服务器130接收任务提交服务器120发送的编译任务,将编译任务匹配相应的编译端141~14n并进行分发。任务分发服务器130在接收到编译任务后,首先获取编译任务对应的源代码,将源代码压缩为源码包,生成源码包的下载链接发送到编译端141~14n以便编译端141~14n下载源码包。根据本发明的一个实施例,任务分发服务器130获取源代码后使用dpkg包管理工具将源码压缩为源码包,本发明对源代码将源码压缩的方式不作限制,任何方式压缩都可以便于编译端141~14n通过下载连接进行下载。
执行上述步骤后,任务分发服务器130为编译任务分配任务ID,根据编译任务的任务级别排序任务ID以便分发编译任务。编译级别为开发人员在源代码更新事件的编译信息中进行设置。根据本发明的一个实施例,任务分发服务器130同时有三项编译任务需要进行分发,提取三项编译任务的编译信息和编译内容作为分配ID的特征信息,得到编译任务1,编译任务2,编译任务3。编译任务1的任务级别为优先级3,编译任务2的优先级为8,编译任务3的优先级为1,则按照任务级别的优先级进行排序,优先分配编译任务3,其次分配编译任务1,最后分配编译任务2。
为方便说明任务分发服务器130进行编译任务分发的方式,现对编译端141~14n先行进行说明。编译端141~14n连接到任务分发服务器130,每个编译端141~14n构成编译端141~14n与任务分发服务器130的主从设备模式中的一个编译节点,每个编译端141~14n均具有节点属性,节点属性包括节点名称,节点地址,节点架构和节标签。节点名称即为编译端141~14n的唯一节点名称,用于标识节点。节点名称可以具有多种命名方式,本发明对编译端141~14n的节点名称的形式不作限制,在本实施例中以编号141~14n作为编译端141~14n的节点名称。节点地址为任务分发服务器130与编译端141~14n的通讯地址,任务分发服务器130通过节点地址与编译端141~14n建立通信连接。节点架构即为编译端141~14n与编译任务对应且相同的编译架构,编译端141~14n的节点架构与编译任务的编译架构相同的可以进行匹配。节点标签为任务分发服务器130向编译端141~14n所添加的标签,每个编译端141~14n可具有多项标签,具有相同项标签的编译端141~14n可构成一个虚拟的任务组,任务分发服务器130可直接将一项编译任务分发给一个任务组即具有相同项标签的编译端141~14n执行编译任务。编译端141~14n的标签和标签项数均可以由开发人员更具编译实际需求进行自行拟定,本发明对编译端141~14n的节点标签的设置方式不作限制。
任务分发服务器130为所有同时接收到编译任务分配完毕任务ID并排序完毕后,所有编译任务即进入待分发状态。开始分发编译任务时,通过任务ID查询编译任务中相应信息,包括编译内容中的编译架构和编译信息中的分发要求。任务分发服务器130根据编译内容中的编译架构匹配相应的编译端141~14n。编译任务若包括多个编译架构,每个编译端与一种编译架构相对应,则任务分发服务器130确定与各编译架构相对应的各编译端,并将编译任务发送至所匹配的各个编译端141~14n。编译任务的编译架构与编译端141~14n的节点架构相匹配,编译端141~14n只具有一种节点架构,所有编译端141~14n所提供的编译架构包括所有编译任务可能需要的节点架构。
根据本发明的一个实施例,编译任务1的编译架构为amd64和mips64el,编译任务2的编译架构为i386,编译任务3的编译架构为arm64。与此同时,编译端141的节点架构为i386,编译端142的节点架构为amd64,编译端143的节点架构为arm64,编译端144的节点架构为mips64el。则,任务分发服务器130按照前述的编译任务1~3的分发顺序,优先分发编译任务3。根据编译任务3的任务ID获知其编译架构为arm64,则匹配执行编译任务3的编译端为编译端143,将编译任务3分发给编译端143。其次,分发编译任务1,根据编译任务1的任务ID的编译架构为amd64和mips64el,匹配编译任务1的编译端为编译端142和编译端144,将编译任务1分别分发给编译端2和编译端端4。最后分配编译任务2,根据编译任务2的编译架构为i386,则匹配到编译端141,将编译任务2分发给编译端141。
任务分发服务器130还为编译端141~14n添加预定标签,添加的预定标签即为编译端141~14n的节点标签。编译任务中编译信息的分发要求即为向预定标签分发该编译任务。任务分发服务器130判断编译端141~14n的节点标签符合编译端141~14n的分发要求时,即匹配该编译端141~14n,将编译任务发送至携带有预定标签的编译端141~14n执行编译任务。当编译任务被同时设置了分发要求和编译架构时,任务分发服务器130优先按照分发要求进行编译任务的分发。编译任务的分发要求的级别高于所设置的编译架构。
根据本发明的一个实施例,编译任务1的编译架构为amd64和mips64el且分发要求为分发给携带有节点标签tag1的编译端,编译端142的节点架构为amd64,编译端144的节点架构为mips64el且节点标签为tag1,编译端145的节点架构为amd64且节点标签为tag1。则任务分发服务器130在分发编译任务1时,优先按照编译任务1的分发要求匹配到编译端144和编译端145。虽然编译端142的节点架构为amd64满足编译任务1所需要的编译架构,但由于编译端142未携带编译任务的分发要求所需要的节点标签tag1,因此优先将编译任务分发给同样编译架构为amd64的编译端145。
任务分发服务器130向编译端141~14n分发编译任务时,编译任务包括编译内容和编译信息,并将编译任务的源代码下载链接也一同发送便于编译端141~14n下载源代码。根据本发明的一个实施例,任务分发服务器130将编译任务1发送给编译端142和编译端144时,编译任务为json格式,示例如下:
/>
发送的编译任务1包括编译任务1的执行步骤为默认步骤,以及执行环境和依赖文件等信息。
随后,执行步骤S340,编译端141~14n接收任务分发器分发的编译任务进行执行。编译端141~14n搭载有操作系统包括不同接口提供相应编译服务。根据本发明一个实施例,编译端141~14n搭载的操作系统为UOS操作系统。编译端141~14n提供的接口包括通信接口(xmlrpc_info),状态接口(xmlrpc_status),重启接口(xmlrpc_clean),编译接口(xmlrpc_build)和停止接口(xmlrpc_abort)。
通信接口向任务分发服务器130提供编译端141~14n的节点信息,任务分发服务器130通过通信接口获取编译端141~14n的节点信息后,根据节点信息注册编译端141~14n。状态接口向任务分发服务器130提供编译端141~14n的状态信息,任务分发服务器130通过状态接口获取编译短的状态信息后,通过通信接口与编译端141~14n建立长连接,向满足预定状态的编译端141~14n分发编译任务。编译端141~14n的状态信息为编译端141~14n当前所处的状态,同一时间只能具有一种状态。状态信息包括空闲(IDLE),正在执行(BUILDING),等待(WAITING),任务取消(ABORTING),编译故障(UNKNOW)和离线(OFFLINE)。状态信息中空闲表示编译端141~14n等待被分配编译任务;正在执行标识编译端141~14n正在执行编译任务;等待表示编译端141~14n执行完毕后编译任务后执行后续操作中,后续操作包括将编译好的文件进行存储,汇总编译数据和日志等。任务取消表示编译端141~14n所执行的编译任务被取消,编译故障标识编译端141~14n正在执行编译任务时出现问题,离线表示任务分发服务器130无法与编译端141~14n建立联通连接。
任务分发服务器130向满足预定状态的编译端141~14n分发编译任务即只能向空闲,任务取消和编译故障的编译端141~14n分发编译任务。重启接口即当编译端141~14n执行编译任务发生故障时,任务分发服务器130通过重启接口清除编译端141~14n的编译环境并恢复编译端141~14n的状态为空闲,以便重新执行该测试任务或其他测试任务。编译接口即任务服务器向编译端141~14n分发编译任务时,通过编译接口将编译任务进行分发。停止接口即任务分发服务器130通过停止接口使编译端141~14n停止执行当前正在执行的编译任务。
根据本发明的一个实施例,任务分发服务器130首先根据编译端141~14n的通信接口获取编译端141~14n的节点信息,随后,根据节点信息对编译端141~14n进行注册。接着从状态接口获取编译端141~14n的状态信息,向满足预定状态的编译端141~14n通过编译接口分发编译任务。编译端141~14n在通过通信接口与任务分发服务器130建立长连接后,持续通过状态接口向编译端141~14n的状态信息,通过通信接口向任务分发服务器130发送执行编译任务过程中的编译日志,以便任务分发服务器130监控编译端141~14n执行编译任务的过程。编译端141~14n执行编译任务时,首先通过源代码文件的下载链接获取编译任务的源代码文件,随后根据编译内容和编译信息,按照编译步骤执行编译步骤。执行完毕编译步骤后,按照预设的编译生成文件的文件名命名编译生成的文件,以及按照存储地址向软件仓库190存储编译生成的文件。存储完毕后,将存储的编译后的文件列表发送到任务分发服务器130,以便任务分发服务器130根据文件列表下载编译后的文件。
在编译端141~14n执行编译任务的过程中,出现编译故障时,向任务分发服务器130提供编译故障的状态信息,任务分发服务器130通过重启接口清除编译端141~14n的编译环境并恢复编译端141~14n的状态为空闲,以便重新执行该测试任务或其他测试任务。
根据本发明的又一个实施例,任务分发服务器130将编译任务1发送给编译端142和编译端144前,先根据编译端142和编译端144的通信接口获取编译端142和编译端144的节点信息,随后,根据节点信息对编译端142和编译端144进行注册。通过状态接口获取编译端142和编译端144的状态信息为空闲(IDLE),则通过编译节点将编译任务1发送到编译端142和编译端144。编译端142和编译端144在通过通信接口与任务分发服务器130建立长连接后,持续通过状态接口向编译端发送执行编译任务1的状态信息,通过通信接口向任务分发服务器130发送执行编译任务1过程中的编译日志,以便任务分发服务器130监控编译端执行编译任务1的过程。编译端执行编译任务1时,首先通过源代码文件的下载链接获取编译任务1的源代码文件,随后根据编译内容和编译信息,获取编译环境并记载依赖文件,按照编译步骤即默认步骤执行编译步骤。执行完毕编译步骤后,按照预设的编译生成文件的文件名命名即dde-session-shell编译生成的文件,以及按照存储地址向软件仓库190存储编译生成的文件。存储完毕后,将存储的编译后的文件列表发送到任务分发服务器130,以便任务分发服务器130根据文件列表下载编译后的文件。在编译端142和编译端144执行编译任务1的过程中,出现编译故障时,向任务分发服务器130提供编译故障的状态信息(UNKNOW),任务分发服务器130通过重启接口清除编译端的编译环境并恢复编译端142和编译端144的状态为空闲(IDLE),以便重新执行该测试任务或其他测试任务。
本发明中,监控端监控源代码的更新事件,解析源代码的更新事件得到源代码的编译内容和编译信息,并发送至任务提交服务器;任务提交服务器接收监控端发送的编译内容和编译信息,将编译内容和编译信息进行组装生成编译任务,并发送至任务分发服务器,从而能够将所有需要进行编译的任务集中进行处理,提高处理效率。并进一步的,任务分发服务器接收任务分发服务器发送的编译任务,将编译任务匹配相应的编译端并进行分发;以及编译端接收任务分发服务器分发的编译任务进行执行,将汇总的编译任务统一进行分发编译端进行编译,使编译的任务使用同一套分布式编译系统进行编译提高源代码的编译速度和效率,减轻维护代码工作人员的工作量。
并进一步的,任务分发服务器在对编译任务进行分发时,根据编译任务的编译架构对编译任务进行分发,当编译任务包括多个编译架构时,确定与各编辑架构相对应的各编译端,并将编译任务发送至匹配的各个编译端,从而对一项编译任务根据其中编译架构的不同并行执行该编译任务,提高对源代码的编译效率,缩短编译时间,加快程序更新速度。并且,编译任务分发端可以对编译端添加预定标签,将编译任务发送至携带有预定标签的编译端执行编译任务,预定标签可以为用户根据自身目的进行添加,从而能够实现快速对一项编译任务向编译端进行部署,提高分发策略的复用率,一次分发后续可以继续使用该分发方案。
并且,编译端在执行编译任务的过程中,与任务分发服务器建立长连接,将执行编译任务的执行情况实时发送给任务分发服务器,包括编译任务的编译日志和编译过程中的状态信息,开发人员可以根据返回的编译任务的状态信息及时对编译任务进行调整,最终实现顺利完成所有编译任务。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下被实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
A8、如A1-A7中任一项所述的系统,其中,所述编译端进一步适于:
向所述任务分发服务器发送所述编译任务的编译日志及编译过程中的状态信息以便监控编译过程。
A9、如A8所述的系统,其中,所述编译端还适于:
执行完毕编译任务后,向所述任务分发服务器发送编译后的文件列表,以便所述任务分发服务器根据所述文件列表下载所述编译后的文件。
A10、如A7-A9中任一项所述的系统,其中,所述任务分发服务器还适于:
确定所述编译端执行所述编译任务时的状态信息是否异常;
若确定所述状态信息异常则指示所述编译端重新执行所述编译任务或匹配其他编译端并进行分发执行所述编译任务。
B12、如B11所述的方法,其中,所述监控端监控源代码的更新事件包括:
所述监控端判断所述源代码与所述源代码的备份是否相同;
若所述源代码与所述备份不同,则判断监控到所述源代码的更新事件。
B13、如B11或B12所述的方法,还包括步骤:
所述任务分发服务器获取所述编译任务对应的源代码,将所述源代码压缩为源码包;
生成所述源码包的下载链接发送到所述编译端以便所述编译端下载所述源码包。
B14、如B13所述的方法,其中,所述编译信息包括所述编译任务的任务级别,所述方法还包括步骤:
所述任务分发服务器为所述编译任务分配任务ID;
根据所述任务级别在任务列表中排序所述任务ID以便依次分发所述编译任务。
B15、如B11-B14中任一项所述的方法,其中,所述编译内容包括编译架构,每个所述编译端与一种编译架构相对应;
所述任务分发服务器进一步适于:
确定与所述编译架构相对应的编译端,并将所述编译任务发送到所匹配的编译端;
若所述编译任务包括多个编译架构,则确定与各编译架构相对应的各编译端,并将所述编译任务发送至所匹配的各个编译端。
B16、如B15所述的方法,还包括步骤:
所述任务分发服务器为所述编译端添加预定标签;
将所述编译任务发送至携带有所述预定标签的编译端执行编译任务。
B17、如B11-B16中任一项所述的方法,还包括:
所述任务分发服务器获取所述编译端的节点信息,根据所述节点信息注册所述编译端;
获取所述编译端的状态信息,与所述编译端建立长连接,向满足预定状态的编译端分发编译任务。
B18、如B11-B17中任一项所述的方法,其中,所述编译端接收所述任务分发器分发的编译任务进行执行包括步骤:
所述编译端向所述任务分发服务器发送所述编译任务的编译日志及编译过程中的状态信息以便监控编译过程。
B19、如B18所述的方法,还包括:
所述编译端执行完毕编译任务后,向所述任务分发服务器发送编译后的文件列表,以便所述任务分发服务器根据所述文件列表下载所述编译后的文件。
B20、如B17-B19中任一项所述的方法,还包括:
所述任务分发服务器确定所述编译端执行所述编译任务时的状态信息是否异常;
若确定所述状态信息异常则指示所述编译端重新执行所述编译任务或匹配其他编译端并进行分发执行所述编译任务。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员应当理解在本文所公开的示例中的设备的模块或单元或组间可以布置在如该实施例中所描述的设备中,或者可替换地可以定位在与该示例中的设备不同的一个或多个设备中。前述示例中的模块可以组合为一个模块或者此外可以分成多个子模块。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组间组合成一个模块或单元或组间,以及此外可以把它们分成多个子模块或子单元或子组间。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
此外,所述实施例中的一些在此被描述成可以由计算机系统的处理器或者由执行所述功能的其它装置实施的方法或方法元素的组合。因此,具有用于实施所述方法或方法元素的必要指令的处理器形成用于实施该方法或方法元素的装置。此外,装置实施例的在此所述的元素是如下装置的例子:该装置用于实施由为了实施该发明的目的的元素所执行的功能。
这里描述的各种技术可结合硬件或软件,或者它们的组合一起实现。从而,本发明的方法和设备,或者本发明的方法和设备的某些方面或部分可采取嵌入有形媒介,例如软盘、CD-ROM、硬盘驱动器或者其它任意机器可读的存储介质中的程序代码(即指令)的形式,其中当程序被载入诸如计算机之类的机器,并被所述机器执行时,所述机器变成实践本发明的设备。
在程序代码在可编程计算机上执行的情况下,计算设备一般包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件),至少一个输入装置,和至少一个输出装置。其中,存储器被配置用于存储程序代码;处理器被配置用于根据该存储器中存储的所述程序代码中的指令,执行本发明的设备停机状态的判断方法。
以示例而非限制的方式,计算机可读介质包括计算机存储介质和通信介质。计算机可读介质包括计算机存储介质和通信介质。计算机存储介质存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息。通信介质一般以诸如载波或其它传输机制等已调制数据信号来体现计算机可读指令、数据结构、程序模块或其它数据,并且包括任何信息传递介质。以上的任一种的组合也包括在计算机可读介质的范围之内。
如在此所使用的那样,除非另行规定,使用序数词“第一”、“第二”、“第三”等等来描述普通对象仅仅表示涉及类似对象的不同实例,并且并不意图暗示这样被描述的对象必须具有时间上、空间上、排序方面或者以任意其它方式的给定顺序。
尽管根据有限数量的实施例描述了本发明,但是受益于上面的描述,本技术领域内的技术人员明白,在由此描述的本发明的范围内,可以设想其它实施例。此外,应当注意,本说明书中使用的语言主要是为了可读性和教导的目的而选择的,而不是为了解释或者限定本发明的主题而选择的。因此,在不偏离所附权利要求书的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。对于本发明的范围,对本发明所做的公开是说明性的,而非限制性的,本发明的范围由所附权利要求书限定。

Claims (7)

1.一种分布式编译系统,所述系统包括:
多个监控端,所述监控端适于监控源代码的更新事件,解析所述源代码的更新事件得到所述源代码的编译内容和编译信息,并发送至任务提交服务器;
任务提交服务器,所述任务提交服务器与多个监控端通信连接,适于接收所述监控端发送的所述编译内容和所述编译信息,将所述编译内容和所述编译信息进行组装生成编译任务,并发送至任务分发服务器;
任务分发服务器,所述任务分发服务器与所述任务提交服务器通信连接,适于接收所述任务分发服务器发送的编译任务,将所述编译任务匹配相应的编译端并进行分发;以及
多个编译端,所述多个编译端与所述任务分发服务器通信连接,适于接收所述任务分发器分发的编译任务进行执行;
其中,所述任务分发服务器还适于确定所述编译端执行所述编译任务时的状态信息是否异常,若确定所述状态信息异常则指示所述编译端重新执行所述编译任务或匹配其他编译端并进行分发执行所述编译任务;
所述编译内容包括编译架构,每个所述编译端与一种编译架构相对应;
所述任务分发服务器进一步适于:
确定与所述编译架构相对应的编译端,并将所述编译任务发送到所匹配的编译端;
若所述编译任务包括多个编译架构,则确定与各编译架构相对应的各编译端,并将所述编译任务发送至所匹配的各个编译端;
所述任务分发服务器还适于:
为所述编译端添加预定标签;
将所述编译任务发送至携带有所述预定标签的编译端执行编译任务;
当编译任务被同时设置了分发要求和编译架构时,任务分发服务器优先按照分发要求进行编译任务的分发,编译任务的分发要求的级别高于所设置的编译架构,分发要求即为向预定标签的编译端分发该编译任务。
2.如权利要求1所述的系统,其中,所述监控端进一步适于:
判断所述源代码与所述源代码的备份是否相同;
若所述源代码与所述备份不同,则判断监控到所述源代码的更新事件。
3.如权利要求1所述的系统,其中,所述任务分发服务器还适于:
获取所述编译任务对应的源代码,将所述源代码压缩为源码包;
生成所述源码包的下载链接发送到所述编译端以便所述编译端下载所述源码包。
4.如权利要求3所述的系统,其中,所述编译信息包括所述编译任务的任务级别,所述任务分发服务器还适于:
为所述编译任务分配任务ID;
根据所述任务级别在任务列表中排序所述任务ID以便依次分发所述编译任务。
5.如权利要求1-4中任一项所述的系统,其中,所述任务分发服务器还适于:
获取所述编译端的节点信息,根据所述节点信息注册所述编译端;
获取所述编译端的状态信息,与所述编译端建立长连接,向满足预定状态的编译端分发编译任务。
6.一种分布式编译方法,适于在如权利要求1-5中任一项所述的分布式编译系统中运行,所述方法包括:
所述监控端监控源代码的更新事件,解析所述源代码的更新事件得到所述源代码的编译内容和编译信息,并发送至任务提交服务器;
所述任务提交服务器接收所述监控端发送的所述编译内容和所述编译信息,将所述编译内容和所述编译信息进行组装生成编译任务,并发送至任务分发服务器;
所述任务分发服务器接收所述任务分发服务器发送的编译任务,将所述编译任务匹配相应的编译端并进行分发;以及
所述编译端接收所述任务分发器分发的编译任务进行执行;
其中,所述方法还包括确定所述编译端执行所述编译任务时的状态信息是否异常,若确定所述状态信息异常则指示所述编译端重新执行所述编译任务或匹配其他编译端并进行分发执行所述编译任务;
所述编译内容包括编译架构,每个所述编译端与一种编译架构相对应;
所述将所述编译任务匹配相应的编译端并进行分发包括:
确定与所述编译架构相对应的编译端,并将所述编译任务发送到所匹配的编译端;
若所述编译任务包括多个编译架构,则确定与各编译架构相对应的各编译端,并将所述编译任务发送至所匹配的各个编译端;
为所述编译端添加预定标签;
将所述编译任务发送至携带有所述预定标签的编译端执行编译任务;
当编译任务被同时设置了分发要求和编译架构时,任务分发服务器优先按照分发要求进行编译任务的分发,所述编译任务的分发要求的级别高于所设置的编译架构,分发要求即为向预定标签的编译端分发该编译任务。
7.一种存储一个或多个程序的计算机可读存储介质,所述一个或多个程序包括指令,所述指令当由计算设备执行时,使得所述计算设备执行根据权利要求6所述的方法。
CN202011025165.6A 2020-09-25 2020-09-25 一种分布式编译系统和方法 Active CN112114816B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011025165.6A CN112114816B (zh) 2020-09-25 2020-09-25 一种分布式编译系统和方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011025165.6A CN112114816B (zh) 2020-09-25 2020-09-25 一种分布式编译系统和方法

Publications (2)

Publication Number Publication Date
CN112114816A CN112114816A (zh) 2020-12-22
CN112114816B true CN112114816B (zh) 2024-05-31

Family

ID=73796936

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011025165.6A Active CN112114816B (zh) 2020-09-25 2020-09-25 一种分布式编译系统和方法

Country Status (1)

Country Link
CN (1) CN112114816B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113254022A (zh) * 2021-05-14 2021-08-13 北京车和家信息技术有限公司 分布式编译系统和方法
CN113986239A (zh) * 2021-10-22 2022-01-28 烽火通信科技股份有限公司 分布式编译方法、装置、设备及可读存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060121074A (ko) * 2005-05-23 2006-11-28 (주)주빅스테크놀러지 하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체
CN104965748A (zh) * 2015-06-03 2015-10-07 广州华多网络科技有限公司 编译平台、编译方法及装置
CN105068855A (zh) * 2015-08-19 2015-11-18 北京奇虎科技有限公司 一种编译安卓包开发文件的方法、服务器和系统
CN105975276A (zh) * 2016-05-09 2016-09-28 上海携程商务有限公司 分布式构建系统及方法
CN106095522A (zh) * 2016-06-03 2016-11-09 北京奇虎科技有限公司 一种实现分布式编译的方法和分布式编译系统
CN109582316A (zh) * 2018-11-15 2019-04-05 北京深思数盾科技股份有限公司 一种跨平台编译方法、装置、系统、服务器及存储介质
CN111580802A (zh) * 2020-04-30 2020-08-25 完美世界(北京)软件科技发展有限公司 持续集成方法、基于分布式编译的持续集成方法及系统

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060121074A (ko) * 2005-05-23 2006-11-28 (주)주빅스테크놀러지 하이브리드 p2p 네트워크 지능형 분산 컴파일러 시스템및 그 방법과 상기 방법을 실현시키기 위한 프로그램을기록한 컴퓨터로 읽을 수 있는 기록매체
CN104965748A (zh) * 2015-06-03 2015-10-07 广州华多网络科技有限公司 编译平台、编译方法及装置
CN105068855A (zh) * 2015-08-19 2015-11-18 北京奇虎科技有限公司 一种编译安卓包开发文件的方法、服务器和系统
CN105975276A (zh) * 2016-05-09 2016-09-28 上海携程商务有限公司 分布式构建系统及方法
CN106095522A (zh) * 2016-06-03 2016-11-09 北京奇虎科技有限公司 一种实现分布式编译的方法和分布式编译系统
CN109582316A (zh) * 2018-11-15 2019-04-05 北京深思数盾科技股份有限公司 一种跨平台编译方法、装置、系统、服务器及存储介质
CN111580802A (zh) * 2020-04-30 2020-08-25 完美世界(北京)软件科技发展有限公司 持续集成方法、基于分布式编译的持续集成方法及系统

Also Published As

Publication number Publication date
CN112114816A (zh) 2020-12-22

Similar Documents

Publication Publication Date Title
US11106459B2 (en) Distributed parallel build system
US10341194B2 (en) System and method for building, optimizing, and enforcing infrastructure on a cloud based computing environment
US9817860B2 (en) Generation and application of correctness-enforced executable filters
US8522207B1 (en) Systems and methods for automated centralized build/merge management
US20170255886A1 (en) Workflow execution
CN112148711B (zh) 一种批处理任务的处理方法和装置
CN112114816B (zh) 一种分布式编译系统和方法
US9542173B2 (en) Dependency handling for software extensions
CN112769706B (zh) 组件化路由方法及系统
US9904574B2 (en) Parallel computing without requiring antecedent code deployment
CN113297081B (zh) 一种持续集成流水线的执行方法和装置
US9760364B2 (en) Checks for software extensions
US11740894B2 (en) Build-independent software framework for creating custom adapters
CN112052035A (zh) 基于银行后线系统的版本组包方法及装置
Vani Building, deploying and validating a home location register (HLR) using Jenkins under the docker and container environment
WO2021218617A1 (zh) 代码执行方法和设备
CN118194490A (zh) 一种物流系统的仿真计算方法和装置
CN117111898A (zh) 一种业务模型的构建方法及装置
CN118092950A (zh) 面向异构超算的应用软件封装方法和系统
Marshall et al. Ensemble dispatching on an IBM Blue Gene/L for a bioinformatics knowledge environment
CN114579202A (zh) 任务处理方法、装置、计算机设备及计算机可读存储介质
CN114090419A (zh) 一种程序测试方法、系统、装置、电子设备以及存储介质
CN118193079A (zh) 一种业务逻辑的执行方法和装置
CN115640039A (zh) 微服务的版本管理方法、装置、计算机设备及存储介质
CN115629770A (zh) 一种软件部署方法、装置、存储介质和计算机设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant