代码的编译方法、装置、存储介质及电子设备
技术领域
本发明涉及互联网领域,特别涉及一种代码的编译方法、装置、存储介质及电子设备。
背景技术
随着互联网公司业务的高速发展,如何缩减开发周期,持续快速迭代成了各家互联网公司研究的重点。作为互联网公司的主要产品,移动端APP(应用程序)的开发和测试效率一直是各家公司的核心技术。
在大型APP项目的持续集成交付过程中,一次任务编译流程往往需要几十分钟到几小时不等的情况,其交付过程耗时较长;且由于是针对IOS系统开发的APP,因此其编译过程需要昂贵的Mac系统(例如使用苹果电脑或是黑苹果)进行操作,需要耗费较多资费购买昂贵的操作设备;且如果在交付的任何阶段发生错误,那么整个任务的编译过程会重新开始,无法知晓哪些位置存在问题,且无通知机制。
发明内容
有鉴于此,本发明实施例提出了一种代码的编译方法、装置、存储介质及电子设备,用以解决现有技术的如下问题:在大型APP项目的持续集成交付过程中,一次任务编译流程往往需要几十分钟到几小时不等的情况,其交付过程耗时较长。
一方面,本发明实施例提出了一种代码的编译方法,包括:按照预设拆分规则将由第一语言代码组成的预定任务拆分为M个子任务;根据预设调度规则将所述M个子任务分配至预定分布式集群系统中的N个节点设备,以通过所述N个节点设备对所述M个子任务进行编译处理;接收节点设备编译处理后生成的由第二语言代码组成的可执行文件,并按照所述预设拆分规则对应的聚合规则聚合接收到的所有可执行文件,以得到可执行文件集合;其中,M大于或等于N,M和N均为正整数。
另一方面,本发明实施例提出了一种代码的编译装置,包括:拆分模块,用于按照预设拆分规则将由第一语言代码组成的预定任务拆分为M个子任务;分配模块,用于根据预设调度规则将所述M个子任务分配至预定分布式集群系统中的N个节点设备,以通过所述N个节点设备对所述M个子任务进行编译处理;聚合模块,用于接收节点设备编译处理后生成的由第二语言代码组成的可执行文件,并按照所述预设拆分规则对应的聚合规则聚合接收到的所有可执行文件,以得到可执行文件集合;其中,M大于或等于N,M和N均为正整数。
另一方面,本发明实施例提出了一种存储介质,存储有计算机程序,所述计算机程序被处理器执行时实现本发明任意实施例提供的方法。
另一方面,本发明实施例提出了一种电子设备,至少包括存储器、处理器,所述存储器上存储有计算机程序,所述处理器在执行所述存储器上的计算机程序时实现本发明任意实施例提供的方法。
本发明实施例按照预设拆分规则将预定任务拆分成多个子任务,并利用了分布式集群系统中的多个节点设备同步执行多个子任务,大大缩短了现有单线程处理的时间,交付过程较快。
附图说明
图1为本发明第一实施例提供的代码的编译方法的流程图;
图2为本发明第二实施例提供的代码的编译方法的流程图;
图3为本发明第三实施例提供的代码的编译装置的结构示意图一;
图4为本发明第三实施例提供的代码的编译装置的结构示意图二;
图5为本发明第五实施例提供的电子设备的结构示意图;
图6为本发明第五实施例提供的分布式集群系统的架构示意图。
具体实施方式
为了使得本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例的附图,对本发明实施例的技术方案进行清楚、完整地描述。显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于所描述的本发明的实施例,本领域普通技术人员在无需创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
除非另外定义,本发明使用的技术术语或者科学术语应当为本发明所属领域内具有一般技能的人士所理解的通常意义。本发明中使用的“第一”、“第二”以及类似的词语并不表示任何顺序、数量或者重要性,而只是用来区分不同的组成部分。“包括”或者“包含”等类似的词语意指出现该词前面的元件或者物件涵盖出现在该词后面列举的元件或者物件及其等同,而不排除其他元件或者物件。“连接”或者“相连”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电性的连接,不管是直接的还是间接的。“上”、“下”、“左”、“右”等仅用于表示相对位置关系,当被描述对象的绝对位置改变后,则该相对位置关系也可能相应地改变。
为了保持本发明实施例的以下说明清楚且简明,本发明省略了已知功能和已知部件的详细说明。
本发明第一实施例提供了一种代码的编译方法,其流程如图1所示,包括步骤S101至S103:
S101,按照预设拆分规则将由第一语言代码组成的预定任务拆分为M个子任务。
开发人员会通过某一种编程语言编写要实现的APP,然而编程语言是一种人工语言,其并非机器能够识别的语言,因此,需要将将编程语言编写的源程序变为机器能够识别的目标程序的过程即为编译。
每个源程序都是以存储在多个文件夹中的,每个文件夹都会存储一部分源代码,各个文件夹之间可能存在强相关性,也可能相关性很弱。本发明实施例在对需要编译的预定任务进行预处理时,其预设拆分规则就可以是根据各个文件夹之间的关联性将预定任务拆分成多个子任务。上述多个子任务的数量是可以根据预设拆分规则的不同而变化的,例如,只有强相关的文件夹才会拆分为一个子任务,那么子任务的数量就会较多,反之子任务数量就会变少。
S102,根据预设调度规则将M个子任务分配至预定分布式集群系统中的N个节点设备,以通过N个节点设备对M个子任务进行编译处理;其中,M大于或等于N,M和N均为正整数。
由于本发明实施例采用的是分布式集群系统中的多个节点设备来对子任务进行处理,因此上述子任务数量较多不仅不会增加系统功耗,反而更有利于后续对子任务的处理。
本发明实施例在处理子任务时,不再按照现有的方式在一台昂贵的Mac机器上编译,而是中心节点将多个子任务按照预设调度规则分配到分布式集群系统中的节点设备执行,这样,每个节点设备都可以分担一些子任务,使得现有单线程处理的时间被大大缩短。
S103,接收节点设备编译处理后生成的由第二语言代码组成的可执行文件,并按照预设拆分规则对应的聚合规则聚合接收到的所有可执行文件,以得到可执行文件集合。
当每个节点设备都编译得到了一定数量的由机器语言组成的可执行文件,即后缀为“.o”形式的文件,每个节点设备处理子任务的数量可能不同,因此,每个节点设备编译得到的可执行文件的数量也会不同。在接收到这些可执行文件后,需要按照预设拆分规则对应的聚合规则将这些可执行文件进行聚合,进而得到能够执行的可执行文件集合,即得到了要实现的APP。
本发明实施例按照预设拆分规则将预定任务拆分成多个子任务,并利用了分布式集群系统中的多个节点设备同步执行多个子任务,大大缩短了现有单线程处理的时间,交付过程较快。
本发明第二实施例提供了一种代码的编译方法,其流程如图2所示,包括步骤S201至S205:
S201,按照预设拆分规则将由第一语言代码组成的预定任务拆分为M个子任务。
开发人员会通过某一种编程语言编写要实现的APP,然而编程语言是一种人工语言,其并非机器能够识别的语言,因此,需要将将编程语言编写的源程序变为机器能够识别的目标程序的过程即为编译。
每个源程序都是以存储在多个文件夹中的,每个文件夹都会存储一部分源代码,各个文件夹之间可能存在强相关性,也可能相关性很弱。本发明实施例在对需要编译的预定任务进行预处理时,其预设拆分规则就可以是根据各个文件夹之间的关联性将预定任务拆分成多个子任务。上述多个子任务的数量是可以根据预设拆分规则的不同而变化的,例如,只有强相关的文件夹才会拆分为一个子任务,那么子任务的数量就会较多,反之子任务数量就会变少。
S202,根据预设调度规则将M个子任务分配至预定分布式集群系统中的N个节点设备,以通过N个节点设备对M个子任务进行编译处理;其中,M大于或等于N,M和N均为正整数。
由于本发明实施例采用的是分布式集群系统中的多个节点设备来对子任务进行处理,因此上述子任务数量较多不仅不会增加系统功耗,反而更有利于后续对子任务的处理。
本发明实施例在处理子任务时,不再按照现有的方式在一台昂贵的Mac机器上编译,而是中心节点将多个子任务按照预设调度规则分配到分布式集群系统中的节点设备执行,这样,每个节点设备都可以分担一些子任务,使得现有单线程处理的时间被大大缩短。
实现时,在根据预设调度规则将M个子任务分配至预定分布式集群中的N个节点设备的过程中,可以先获取预定分布式集群中各个节点设备的网络环境参数,再根据网络环境参数在预定分布式集群系统中确定待使用的节点设备集群,其中,节点设备集群中的节点设备的性能参数符合执行代码编译的预定要求;随后,根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备。该过程对预定分布式集群中的所有节点设备进行了一次可用性过滤,将明显无法执行代码编译工作的节点设备进行了过滤。
虽然已经确定的节点设备集群中都是可以执行代码编译的,但由于每个节点设备的内存和政在处理的任务等会有所不同,因此,为了合理的分配子任务,以便能够更加快速的完成编译,在根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备的过程中,具体的,可以先根据每个节点设备当前执行的任务量和内存使用量确定节点设备集群中每个节点设备的当前性能参数,再根据每个节点设备的当前性能参数和子任务总数确定分配至每个节点设备的子任务的数量。
如果之前编译过的版本中存在可用的可执行文件,则节点设备需要执行的子任务的代码内容就会少一些,因此,在根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备之前,还可以包括如下过程:确定预定任务的参数信息,其中,参数信息至少包括:任务的存储管理地址信息、时间戳信息、操作路径信息;根据参数信息在本地缓存中查找是否存在与预定任务的相似度达到预定相似度的可执行文件集合;在本地缓存中存在可执行文件集合的情况下,在本地缓存中获取可执行文件集合;在本地缓存中不存在可执行文件集合的情况下,根据参数信息向远端服务器发送查找请求,其中,查找请求用于请求查找远端服务器中是否存在与预定任务的相似度达到预定相似度的可执行文件集合;在远端服务器不存在可执行文件集合的情况下,在本地缓存中获取与预定任务的相似度最高的可执行文件集合;在远端服务器存在可执行文件集合的情况下,在本地缓存中删除与预定任务的相似度最低的可执行文件集合,并从远端服务器将相似度达到预定相似度的可执行文件集合下载至本地缓存。
通过上述查找,通常可以获取到相似度较高的可执行文件集合,当获取到该可执行文件集合后,在根据预设调度规则将M个子任务分配至预定分布式集群系统中的N个节点设备时,就可以进一步根据各个子任务以及获取到的可执行文件集合确定每个节点设备需要编译的各个子任务的代码内容;再将各个子任务的代码内容分别发送至各个子任务对应的节点设备。通过该过程,节点设备可以减少对子任务的处理时间,进一步提升了编译的速度。
S203,检测是否接收到报错消息,其中,报错消息中携带有错误原因。如果是,则执行S204,否则执行S205。
S204,在节点设备编译子任务出现错误的情况下,根据错误原因确定对应的修复策略,并根据修复策略修复对应的子任务。
该过程可以快速定位问题,并及时针对问题执行修复机制。
S205,接收节点设备编译处理后生成的由第二语言代码组成的可执行文件,并按照预设拆分规则对应的聚合规则聚合接收到的所有可执行文件,以得到可执行文件集合。
当每个节点设备都编译得到了一定数量的由机器语言组成的可执行文件,即后缀为“.o”形式的文件,每个节点设备处理子任务的数量可能不同,因此,每个节点设备编译得到的可执行文件的数量也会不同。在接收到这些可执行文件后,需要按照预设拆分规则对应的聚合规则将这些可执行文件进行聚合,进而得到能够执行的可执行文件集合,即得到了要实现的APP。
本发明实施例按照预设拆分规则将预定任务拆分成多个子任务,并利用了分布式集群系统中的多个节点设备同步执行多个子任务,大大缩短了现有单线程处理的时间,交付过程较快;由于所有可执行文件最后都需要进行聚合,因此,节点设备可以是任何形式的电脑,不需要必须为昂贵的Mac。
本发明第三实施例提供了一种代码的编译装置,该装置的结构示意如图3所示,包括:
拆分模块10,用于按照预设拆分规则将由第一语言代码组成的预定任务拆分为M个子任务;分配模块20,与拆分模块10耦合,用于根据预设调度规则将M个子任务分配至预定分布式集群系统中的N个节点设备,以通过N个节点设备对M个子任务进行编译处理;聚合模块30,与分配模块20耦合,用于接收节点设备编译处理后生成的由第二语言代码组成的可执行文件,并按照预设拆分规则对应的聚合规则聚合接收到的所有可执行文件,以得到可执行文件集合;其中,M大于或等于N,M和N均为正整数。
开发人员会通过某一种编程语言编写要实现的APP,然而编程语言是一种人工语言,其并非机器能够识别的语言,因此,需要将将编程语言编写的源程序变为机器能够识别的目标程序的过程即为编译。
每个源程序都是以存储在多个文件夹中的,每个文件夹都会存储一部分源代码,各个文件夹之间可能存在强相关性,也可能相关性很弱。本发明实施例在对需要编译的预定任务进行预处理时,其预设拆分规则就可以是根据各个文件夹之间的关联性将预定任务拆分成多个子任务。上述多个子任务的数量是可以根据预设拆分规则的不同而变化的,例如,只有强相关的文件夹才会拆分为一个子任务,那么子任务的数量就会较多,反之子任务数量就会变少。
由于本发明实施例采用的是分布式集群系统中的多个节点设备来对子任务进行处理,因此上述子任务数量较多不仅不会增加系统功耗,反而更有利于后续对子任务的处理。
本发明实施例在处理子任务时,不再按照现有的方式在一台昂贵的Mac机器上编译,而是中心节点将多个子任务按照预设调度规则分配到分布式集群系统中的节点设备执行,这样,每个节点设备都可以分担一些子任务,使得现有单线程处理的时间被大大缩短。
上述述分配模块包括:第一获取单元,用于获取预定分布式集群中各个节点设备的网络环境参数;第一确定单元,与第一获取单元耦合,用于根据网络环境参数在预定分布式集群系统中确定待使用的节点设备集群,其中,节点设备集群中的节点设备的性能参数符合执行代码编译的预定要求;分配单元,与第一确定单元耦合,用于根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备。该分配模块对预定分布式集群中的所有节点设备进行了一次可用性过滤,将明显无法执行代码编译工作的节点设备进行了过滤。
虽然已经确定的节点设备集群中都是可以执行代码编译的,但由于每个节点设备的内存和政在处理的任务等会有所不同,因此,为了合理的分配子任务,以便能够更加快速的完成编译,上述分配单元,具体可以用于:根据每个节点设备当前执行的任务量和内存使用量确定节点设备集群中每个节点设备的当前性能参数;根据每个节点设备的当前性能参数和子任务总数确定分配至每个节点设备的子任务的数量。
如果之前编译过的版本中存在可用的可执行文件,则节点设备需要执行的子任务的代码内容就会少一些,因此,上述分配模块还可以包括:第二确定单元,用于确定预定任务的参数信息,其中,参数信息至少包括:任务的存储管理地址信息、时间戳信息、操作路径信息;查找单元,与第二确定单元耦合,用于根据参数信息在本地缓存中查找是否存在与预定任务的相似度达到预定相似度的可执行文件集合;第二获取单元,与查找单元耦合,用于在本地缓存中存在可执行文件集合的情况下,在本地缓存中获取可执行文件集合;发送单元,与第二获取单元耦合,用于在本地缓存中不存在可执行文件集合的情况下,根据参数信息向远端服务器发送查找请求,其中,查找请求用于请求查找远端服务器中是否存在与预定任务的相似度达到预定相似度的可执行文件集合;第二获取单元,还用于:在远端服务器不存在可执行文件集合的情况下,在本地缓存中获取与预定任务的相似度最高的可执行文件集合;在远端服务器存在可执行文件集合的情况下,在本地缓存中删除与预定任务的相似度最低的可执行文件集合,并从远端服务器将相似度达到预定相似度的可执行文件集合下载至本地缓存。
通过上述查找,通常可以获取到相似度较高的可执行文件集合,当获取到该可执行文件集合后,上述分配单元具体还可以用于:根据各个子任务以及获取到的可执行文件集合确定每个节点设备需要编译的各个子任务的代码内容;将各个子任务的代码内容分别发送至各个子任务对应的节点设备。该处理可使节点设备减少对子任务的处理时间,进一步提升了编译的速度。
当每个节点设备都编译得到了一定数量的由机器语言组成的可执行文件,即后缀为“.o”形式的文件,每个节点设备处理子任务的数量可能不同,因此,每个节点设备编译得到的可执行文件的数量也会不同。在接收到这些可执行文件后,需要按照预设拆分规则对应的聚合规则将这些可执行文件进行聚合,进而得到能够执行的可执行文件集合,即得到了要实现的APP。
上述装置的结构还可以如图4所示,还包括:接收模块40,与分配模块20耦合,用于在节点设备编译子任务出现错误的情况下,接收报错消息,其中,报错消息中携带有错误原因;修复模块50,与接收模块40耦合,用于根据错误原因确定对应的修复策略,并根据修复策略修复对应的子任务。具有接收模块40和修复模块50的装置,可以快速定位问题,并及时针对问题执行修复机制。
本发明实施例按照预设拆分规则将预定任务拆分成多个子任务,并利用了分布式集群系统中的多个节点设备同步执行多个子任务,大大缩短了现有单线程处理的时间,交付过程较快;由于所有可执行文件最后都需要进行聚合,因此,节点设备可以是任何形式的电脑,不需要必须为昂贵的Mac。
本发明第四实施例提供了一种存储介质,存储有计算机程序,该计算机程序被处理器执行时实现本发明任意实施例提供的方法,如下步骤S1至S3:
S1,按照预设拆分规则将由第一语言代码组成的预定任务拆分为M个子任务;
S2,根据预设调度规则将M个子任务分配至预定分布式集群系统中的N个节点设备,以通过N个节点设备对M个子任务进行编译处理;
S3,接收节点设备编译处理后生成的由第二语言代码组成的可执行文件,并按照预设拆分规则对应的聚合规则聚合接收到的所有可执行文件,以得到可执行文件集合;其中,M大于或等于N,M和N均为正整数。
计算机程序被处理器执行根据预设调度规则将M个子任务分配至预定分布式集群中的N个节点设备的步骤时,具体被处理器执行如下步骤:获取预定分布式集群中各个节点设备的网络环境参数;根据网络环境参数在预定分布式集群系统中确定待使用的节点设备集群,其中,节点设备集群中的节点设备的性能参数符合执行代码编译的预定要求;根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备。
计算机程序被处理器执行根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备的步骤时,具体被处理器执行如下步骤:根据每个节点设备当前执行的任务量和内存使用量确定节点设备集群中每个节点设备的当前性能参数;根据每个节点设备的当前性能参数和子任务总数确定分配至每个节点设备的子任务的数量。
计算机程序被处理器执行根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备的步骤之前,还可以被处理器执行如下步骤:确定预定任务的参数信息,其中,参数信息至少包括:任务的存储管理地址信息、时间戳信息、操作路径信息;根据参数信息在本地缓存中查找是否存在与预定任务的相似度达到预定相似度的可执行文件集合;在本地缓存中存在可执行文件集合的情况下,在本地缓存中获取可执行文件集合;在本地缓存中不存在可执行文件集合的情况下,根据参数信息向远端服务器发送查找请求,其中,查找请求用于请求查找远端服务器中是否存在与预定任务的相似度达到预定相似度的可执行文件集合;在远端服务器不存在可执行文件集合的情况下,在本地缓存中获取与预定任务的相似度最高的可执行文件集合;在远端服务器存在可执行文件集合的情况下,在本地缓存中删除与预定任务的相似度最低的可执行文件集合,并从远端服务器将相似度达到预定相似度的可执行文件集合下载至本地缓存。
计算机程序被处理器执行根据预设调度规则将M个子任务分配至预定分布式集群系统中的N个节点设备的步骤时,具体被处理器执行如下步骤:根据各个子任务以及获取到的可执行文件集合确定每个节点设备需要编译的各个子任务的代码内容;将各个子任务的代码内容分别发送至各个子任务对应的节点设备。
计算机程序被处理器执行时,还可以被处理器执行如下步骤:在节点设备编译子任务出现错误的情况下,接收报错消息,其中,报错消息中携带有错误原因;根据错误原因确定对应的修复策略,并根据修复策略修复对应的子任务。
本发明实施例按照预设拆分规则将预定任务拆分成多个子任务,并利用了分布式集群系统中的多个节点设备同步执行多个子任务,大大缩短了现有单线程处理的时间,交付过程较快;由于所有可执行文件最后都需要进行聚合,因此,节点设备可以是任何形式的电脑,不需要必须为昂贵的Mac。
可选地,在本实施例中,上述存储介质可以包括但不限于:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。可选地,在本实施例中,处理器根据存储介质中已存储的程序代码执行上述实施例记载的方法步骤。可选地,本实施例中的具体示例可以参考上述实施例及可选实施方式中所描述的示例,本实施例在此不再赘述。显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
本发明第五实施例提供了一种电子设备,如图5所示,该电子设备至少包括存储器901和处理器902,存储器901上存储有计算机程序,处理器902在执行存储器901上的计算机程序时实现本发明任意实施例提供的方法,示例性的,计算机程序步骤如下S11至S13:
S11,按照预设拆分规则将由第一语言代码组成的预定任务拆分为M个子任务;
S12,根据预设调度规则将M个子任务分配至预定分布式集群系统中的N个节点设备,以通过N个节点设备对M个子任务进行编译处理;
S13,接收节点设备编译处理后生成的由第二语言代码组成的可执行文件,并按照预设拆分规则对应的聚合规则聚合接收到的所有可执行文件,以得到可执行文件集合;其中,M大于或等于N,M和N均为正整数。
处理器902在执行存储器901上存储的根据预设调度规则将M个子任务分配至预定分布式集群中的N个节点设备的计算机程序时,具体执行如下计算机程序:获取预定分布式集群中各个节点设备的网络环境参数;根据网络环境参数在预定分布式集群系统中确定待使用的节点设备集群,其中,节点设备集群中的节点设备的性能参数符合执行代码编译的预定要求;根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备。
处理器902在执行存储器901上存储的根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备的计算机程序时,具体执行如下计算机程序:根据每个节点设备当前执行的任务量和内存使用量确定节点设备集群中每个节点设备的当前性能参数;根据每个节点设备的当前性能参数和子任务总数确定分配至每个节点设备的子任务的数量。
处理器902在执行存储器901上存储的根据预设调度规则将M个子任务分配至节点设备集群中的N个节点设备的计算机计程序之前,还可以执行如下计算机程序:确定预定任务的参数信息,其中,参数信息至少包括:任务的存储管理地址信息、时间戳信息、操作路径信息;根据参数信息在本地缓存中查找是否存在与预定任务的相似度达到预定相似度的可执行文件集合;在本地缓存中存在可执行文件集合的情况下,在本地缓存中获取可执行文件集合;在本地缓存中不存在可执行文件集合的情况下,根据参数信息向远端服务器发送查找请求,其中,查找请求用于请求查找远端服务器中是否存在与预定任务的相似度达到预定相似度的可执行文件集合;在远端服务器不存在可执行文件集合的情况下,在本地缓存中获取与预定任务的相似度最高的可执行文件集合;在远端服务器存在可执行文件集合的情况下,在本地缓存中删除与预定任务的相似度最低的可执行文件集合,并从远端服务器将相似度达到预定相似度的可执行文件集合下载至本地缓存。
处理器902在执行存储器901上存储的根据预设调度规则将M个子任务分配至预定分布式集群系统中的N个节点设备的计算机程序时,具体执行如下计算机程序:根据各个子任务以及获取到的可执行文件集合确定每个节点设备需要编译的各个子任务的代码内容;将各个子任务的代码内容分别发送至各个子任务对应的节点设备。
处理器902在执行存储器901上存储的计算机程序,还可以执行如下计算机程序:在节点设备编译子任务出现错误的情况下,接收报错消息,其中,报错消息中携带有错误原因;根据错误原因确定对应的修复策略,并根据修复策略修复对应的子任务。
本发明实施例按照预设拆分规则将预定任务拆分成多个子任务,并利用了分布式集群系统中的多个节点设备同步执行多个子任务,大大缩短了现有单线程处理的时间,交付过程较快;由于所有可执行文件最后都需要进行聚合,因此,节点设备可以是任何形式的电脑,不需要必须为昂贵的Mac。
下面结合具体实例对上述电子设备进行说明。
在本实例中,该电子设备为分布式集群系统中的中心设备,该中心设备控制多台节点设备。由于编译IOS应用的系统核心与Linux系统核心类似,且随着各种云服务的发展,因此一次IOS应用的交付过程可以不依赖于一台Mac机器,通过一种分布式的服务,可以将交付过程缩短到秒级别,并且大幅度降低对高端设备的依赖性,结合我们的自动纠错算法,可以大幅度提高技术使用效率,解决很大人力与机器成本。
实施例主要过程包括:需要部署一套电脑集群,其集群可以用市面上的各种云服务或是简易的通过Jenkins将多台机器连接;需要建立一套调度系统,用于合理分发任务;根据每次给定的集成任务,匹配最小编译单元(即子任务);根据匹配结果,将单次集成任务中的编译过程分配到集群中处理;检测集群中各个节点设备的执行情况,如果发生错误则进行纠错处理,进行自动纠错;根据集群中各个节点设备的执行结果,进行产物聚合,并将处理结果实时的反馈;将所有的执行以及操作信息进行储存。
电子设备所在分布式集群系统的架构示意如图6所示,该电子设备包括:任务分配引擎(相当于拆分模块和分配模块)、纠错系统和通知系统(相当于接收模块和修复模块)、产物聚合系统(相当于聚合模块)。电子设备处理过程如下:
1.接收任务详情信息,包括任务的储存管理地址、时间戳、操作路径等信息,其可以根据传递任务的系统确定。
(1)如果使用Git管理的话,可以将Git地址、commitlD,branch等信息传递
(2)如果是其他代码管理系统的话,可以将管理地址、tag等信息传递过来。
2.根据任务详情的信息,提取出其中的时间戳、项目地址、操作路径等信息,通过缓存以及汉明距查找算法,找出与任务详情的信息相似度最高的缓存产物(即可执行文件集合)。
(1)根据时间戳、Tag等信息去匹配存储的缓存数据,可以根据时间戳在本机缓存N份数据,用于减少查找时间。
(2)先在缓存中查找出Diff数小于legacy(即根据业务和机器性能的不同选择不同的经验值)的数据,同时记录本次查找中Diff最小的数据地址。并返回地址。
(3)如果没有找到符合要求的数据,则在远端服务器的数据仓库中匹配,同时记录本次查找中Diff最小的数据地址。如果找到符合的数据则返回地址,并将缓存同步到本机且淘汰掉一个本地缓存。
(4)如果在远端服务器没有找到符合要求的数据,则比较远端与本机最小Diff的数据,根据实际的网络环境,选择使用远端服务器的数据还是本机的缓存数据。
(5)如果选择使用远端服务器的数据则返回地址,并将缓存同步到本机且淘汰掉一个本地缓存。
3.将获取的产物信息以及任务信息输入至任务分配引擎。
任务分配引擎根据上述信息将任务分成相应的子任务,并分析计算出各个节点设备的当前性能的占比。
4.根据各个机器的性能占比分配子任务,由占比高的机器承担相应较多的子任务,占比低的机器分配较少的子任务。
比如当前可用的节点设备为三台,分配子任务时其比值可以依次为6:3:1。如果将本次IOS交付任务的拆分成10个子任务,其中一个节点设备承担6个,另一个节点设备承担3个,再一个节点设备承担1个。
5.分配完毕后,发送相应的节点设备进行编译。
6.如果执行过程中遇到错误时,提取错误原因,并将错误原因输入至纠错系统,纠错系统根据错误种类进行修复。
(1)如果可以提取错误原因,将错误原因输入至纠错系统进行策略查找。
(2)如果没有找到修复策略则通知系统进行报错。
(3)如果无法提取错误原因,同样通知系统进行报错。
(4)修复策略的集合是随时可以扩展的,例以CococPods作为包管理工具的IOS工程中,可以将CocoaPods构建时的错误进行自动重试。
7.根据各个节点设备的执行结果,进行产物汇总与结果处理。
(1)IOS任务的产物为.o文件与资源文件的集合,因此可以将各子任务的.o文件先进行校验。
(2)如果验证没有问题的话,将.o文件与资源文件进行聚合。
(3)如果验证有问题的话,进行错误抛出。
8.根据产物汇总的处理结果,通知相应的责任人。
通知系统会根据抛出的错误以及任务信息进行加工处理,然后根据实际情况发送给责任人邮件或是其他消息类型。
9.如果产物聚合没有问题后,会将本次的产物数据以及本次任务信息存入本地缓存。
此外,尽管已经在本文中描述了示例性实施例,其范围包括任何和所有基于本发明的具有等同元件、修改、省略、组合(例如,各种实施例交叉的方案)、改编或改变的实施例。权利要求书中的元件将被基于权利要求中采用的语言宽泛地解释,并不限于在本说明书中或本申请的实施期间所描述的示例,其示例将被解释为非排他性的。因此,本说明书和示例旨在仅被认为是示例,真正的范围和精神由以下权利要求以及其等同物的全部范围所指示。
以上描述旨在是说明性的而不是限制性的。例如,上述示例(或其一个或更多方案)可以彼此组合使用。例如本领域普通技术人员在阅读上述描述时可以使用其它实施例。另外,在上述具体实施方式中,各种特征可以被分组在一起以简单化本发明。这不应解释为一种不要求保护的公开的特征对于任一权利要求是必要的意图。相反,本发明的主题可以少于特定的公开的实施例的全部特征。从而,以下权利要求书作为示例或实施例在此并入具体实施方式中,其中每个权利要求独立地作为单独的实施例,并且考虑这些实施例可以以各种组合或排列彼此组合。本发明的范围应参照所附权利要求以及这些权利要求赋权的等同形式的全部范围来确定。
以上对本发明多个实施例进行了详细说明,但本发明不限于这些具体的实施例,本领域技术人员在本发明构思的基础上,能够做出多种变型和修改实施例,这些变型和修改都应落入本发明所要求保护的范围之内。