本发明实施例涉及计算机技术领域,具体涉及一种linux下编译处理方法及装置。
背景技术
软件开发中,需要发布应用程序或者驱动时,都需要将源代码编译成指定的文件。而不同语言、发布到不同平台依赖的编译环境又各不相同,极大地耗费开发人员编译的时间。
现有技术中将开发需要使用的各种编译环境在云端预配置好,每套编译环境对应一台云主机,开发编译时,自主选择需要的环境进行编译,解决了每个开发单独维护不同编译环境的繁琐工作,但是导致云主机无限增加,难以维护,且云主机使用效率低下。
技术实现要素:
由于现有方法存在上述问题,本发明实施例提出一种linux下编译处理方法及装置。
第一方面,本发明实施例提出一种linux下编译处理方法,包括:
获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境;
生成所述编译环境对应的编译镜像,并根据所述编译镜像生成对应的容器;
通过所述容器对所述编译任务对应的编译对象进行编译;
其中,所述编译环境从云端获取、从本地导入或根据现有环境部署生成。
可选地,所述获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境,具体包括:
获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境,若判断获知所述编译环境和所述编译任务的编译参数不匹配,则根据所述编译任务的编译参数对所述编译环境进行自学习。
可选地,所述生成所述编译环境对应的编译镜像,并根据所述编译镜像生成对应的容器,具体包括:
若判断获知编译任务包括多个,则根据规则在镜像池中选择对应的编译镜像;
若所述镜像池中无对应的编译镜像,则根据所述规则生成对应的编译镜像;
根据选择的/生成的编译镜像为每个编译任务生成单独的容器。
可选地,所述方法还包括:
若判断获知所述编译对象已编译完成,则将销毁所述容器;
若判断获知所述编译对象编译失败,则保留所述容器,以供开发分析。
可选地,所述方法还包括:
对云端加载的镜像、本地上传的镜像、在已有镜像基础上启动容器部署生成新的镜像、主动学习生成的镜像进行统一管理。
可选地,所述方法还包括:
将编译过程中生成的编译日志和编译产物发送至中控服务器进行存储。
可选地,所述方法还包括:
若判断获知编译过程中生成的参数不在预设的阈值范围内,则生成告警信息,并将所述告警信息发送给目标终端。
第二方面,本发明实施例还提出一种linux下编译处理装置,包括:
环境确定模块,用于获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境;
容器启动模块,用于生成所述编译环境对应的编译镜像,并根据所述编译镜像生成对应的容器;
对象编译模块,用于通过所述容器对所述编译任务对应的编译对象进行编译;
其中,所述编译环境从云端获取、从本地导入或根据现有环境部署生成。
可选地,所述环境确定模块具体用于获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境,若判断获知所述编译环境和所述编译任务的编译参数不匹配,则根据所述编译任务的编译参数对所述编译环境进行自学习。
可选地,所述容器启动模块具体用于:
若判断获知编译任务包括多个,则根据规则在镜像池中选择对应的编译镜像;
若所述镜像池中无对应的编译镜像,则根据所述规则生成对应的编译镜像;
根据选择的/生成的编译镜像为每个编译任务生成单独的容器。
可选地,所述装置还包括:
容器销毁模块,用于若判断获知所述编译对象已编译完成,则将销毁所述容器;
容器保留模块,用于若判断获知所述编译对象编译失败,则保留所述容器,以供开发分析。
可选地,所述装置还包括:
镜像管理模块,用于对云端加载的镜像、本地上传的镜像、在已有镜像基础上启动容器部署生成新的镜像、主动学习生成的镜像进行统一管理。
可选地,所述装置还包括:
存储模块,用于将编译过程中生成的编译日志和编译产物发送至中控服务器进行存储。
可选地,所述装置还包括:
告警模块,用于若判断获知编译过程中生成的参数不在预设的阈值范围内,则生成告警信息,并将所述告警信息发送给目标终端。
第三方面,本发明实施例还提出一种电子设备,包括:
至少一个处理器;以及
与所述处理器通信连接的至少一个存储器,其中:
所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述程序指令能够执行上述方法。
第四方面,本发明实施例还提出一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机程序,所述计算机程序使所述计算机执行上述方法。
由上述技术方案可知,本发明实施例通过生成编译环境对应的编译镜像,并进一步根据编译镜像生成对应的容器对编译对象进行编译,使得编译环境易于管理,提升编译环境的使用效率,大大减少了云主机的数量,提高云主机的使用效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些图获得其他的附图。
图1为本发明一实施例提供的一种linux下编译处理方法的流程示意图;
图2为本发明一实施例提供的云编译系统的结构示意图;
图3为本发明另一实施例提供的云编译系统的结构示意图;
图4为本发明另一实施例提供的一种linux下编译处理方法的流程示意图;
图5为本发明一实施例提供的一种linux下编译处理装置的结构示意图;
图6为本发明一实施例提供的电子设备的逻辑框图。
具体实施方式
下面结合附图,对本发明的具体实施方式作进一步描述。以下实施例仅用于更加清楚地说明本发明的技术方案,而不能以此来限制本发明的保护范围。
图1示出了本实施例提供的一种linux下编译处理方法的流程示意图,包括:
s101、获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境。
其中,所述编译环境从云端获取、从本地导入或根据现有环境部署生成。
所述编译任务为linux下待编译的程序。
所述编译参数包括编译过程中需要的参数。
s102、生成所述编译环境对应的编译镜像,并根据所述编译镜像生成对应的容器。
举例来说,可以使用docker技术为每个编译环境配置一个基础的编译镜像,编译环境按需生成容器,该容器编译完成可自动销毁,以节省空间。
具体地,编译时根据选择的镜像启动容器,以保证编译环境的一致性。
需要说明的是,在同一台云主机中可以同时生成多个编译镜像。
s103、通过所述容器对所述编译任务对应的编译对象进行编译。
本实施例通过生成编译环境对应的编译镜像,并进一步根据编译镜像生成对应的容器对编译对象进行编译,使得编译环境易于管理,提升编译环境的使用效率,大大减少了云主机的数量,提高云主机的使用效率。
进一步地,在上述方法实施例的基础上,s101具体包括:
获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境,若判断获知所述编译环境和所述编译任务的编译参数不匹配,则根据所述编译任务的编译参数对所述编译环境进行自学习。
具体地,当编译环境和编译任务的编译参数不匹配时,通过自学习改变编译环境,使得编译环境能够满足编译任务的编译参数。
进一步地,在上述方法实施例的基础上,s102具体包括:
s1021、若判断获知编译任务包括多个,则根据规则在镜像池中选择对应的编译镜像。
s1022、若所述镜像池中无对应的编译镜像,则根据所述规则生成对应的编译镜像。
s1023、根据选择的/生成的编译镜像为每个编译任务生成单独的容器。
s1023、根据选择的/生成的编译镜像为每个编译任务生成单独的容器。
具体地,在进行多任务编译时,每个任务需要单独的容器,以保证编译环境的隔离性。镜像池中存有若干个编译镜像,根据预设的规则在镜像池中选择对应的编译镜像,该预设的规则例如编译参数的匹配。如果镜像池中无对应的编译镜像,则根据所述规则生成对应的编译镜像;如果镜像池中有对应的编译镜像,则选择该对应的编译镜像。确定编译镜像后,根据编译镜像为每个编译任务生成单独的容器。
进一步地,在上述方法实施例的基础上,所述方法还包括:
s104、若判断获知所述编译对象已编译完成,则将销毁所述容器。
s105、若判断获知所述编译对象编译失败,则保留所述容器,以供开发分析。
为了节省云主机的空间,待编译完成后,需要销毁当前容器;为了供开发人员分析程序存在的问题,若编译失败,则根据配置决定是否保留容器。
进一步地,在上述方法实施例的基础上,所述方法还包括:
s106、对云端加载的镜像、本地上传的镜像、在已有镜像基础上启动容器部署生成新的镜像、主动学习生成的镜像进行统一管理。
具体地,本实施例提供的镜像可以从多个渠道获取:从云端加载、从本地上传、在已有镜像基础上启动容器部署生成或主动学习生成,对所有的镜像进行统一管理,以方便linux下进行编译处理。
进一步地,在上述方法实施例的基础上,所述方法还包括:
s107、将编译过程中生成的编译日志和编译产物发送至中控服务器进行存储。
具体地,将编译日志和编译的相关产物回传到中控服务器进行存储,以方便开发人员进行编译的追溯。
进一步地,在上述方法实施例的基础上,所述方法还包括:
s108、若判断获知编译过程中生成的参数不在预设的阈值范围内,则生成告警信息,并将所述告警信息发送给目标终端。
具体地,本实施例提供linux编译系统状态告警功能,为用户提供各项资源阈值范围的配置,实时监控各容器状态数据,当判断设备存在异常,生成的参数不在预设的阈值范围内,则通过接口发送给目标终端,告知测试用户。
图2示出了云编译系统的结构示意图,包括云编译平台qbuild的web服务器和中控服务器,以及数据库db和代码服务器,其中中控服务器通过虚拟化平台与多台云主机连接,每台云主机中包括多个编译环境,如图3所示的编译环境1、编译环境2和编译环境3,而每个编译环境中包括多个任务,所有的云主机与存储服务器连接,该存储服务器用于存储编译相关的数据。
该云编译系统包括以下模块:
核心调度模块:负责云编译平台qbuild和编译系统通信机制;linux编译系统异步多线程调调度image启动容器,能够通过并发形式执行,linux系统采用自学习方式。
编译配置模块:提供用户对编译环境、qbuild中控、公网源配置;对不同的任务构建不同的编译环境。
编译环境构建模块:提供自动从公网云端获取基础系统的image、本地导入image和从现有环境自动部署生成image三种构建方式。
编译agent模块:负责从代码服务器拉取项目代码,启动对应的编译器,编译出相关的产物。
任务管理模块:负责不同任务的启动、暂停、取消、删除、重试、多次编译等;支持定时构建任务;事件触发构建任务(如代码变动、其它任务回调等)。
产物管理模块:负责对编译产物签名,多任务之间产物共享等处理。
log模块:负责收集不同任务编译日志,提供log下载接口。
告警模块:提供linux编译系统状态告警功能,为用户提供各项资源阈值配置,实时监控各容器状态数据,当判断设备存在异常,通过接口告知给测试用户。
需要说明的是,windows、linux和ios均采用单独的编译流程。
在具体执行过程中,如图4所示,首先选择编译环境,可以自动安装编译环境后通过qbuild中控接口将新环境入库,并通过qbuild中控接口获取编译环境;然后启动容器执行编译任务,并回传编译结果;若编译成功,则确定是否需要保留编译环境,如保留编译环境则回传编译环境访问方式,如不需要保留编译环境则销毁编译环境;若编译失败,可以销毁编译环境。
图5示出了本实施例提供的一种linux下编译处理装置的结构示意图,所述装置包括:环境确定模块501、容器启动模块502和对象编译模块503,其中:
所述环境确定模块501用于获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境;
所述容器启动模块502用于生成所述编译环境对应的编译镜像,并根据所述编译镜像生成对应的容器;
所述对象编译模块503用于通过所述容器对所述编译任务对应的编译对象进行编译;
其中,所述编译环境从云端获取、从本地导入或根据现有环境部署生成。
具体地,所述环境确定模块501获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境;所述容器启动模块502生成所述编译环境对应的编译镜像,并根据所述编译镜像生成对应的容器;所述对象编译模块503通过所述容器对所述编译任务对应的编译对象进行编译。
本实施例通过生成编译环境对应的编译镜像,并进一步根据编译镜像生成对应的容器对编译对象进行编译,使得编译环境易于管理,提升编译环境的使用效率,大大减少了云主机的数量,提高云主机的使用效率。
进一步地,在上述装置实施例的基础上,所述环境确定模块501具体用于获取linux下的编译任务,根据所述编译任务的编译参数确定云端所述编译任务对应的编译环境,若判断获知所述编译环境和所述编译任务的编译参数不匹配,则根据所述编译任务的编译参数对所述编译环境进行自学习。
进一步地,在上述装置实施例的基础上,所述容器启动模块502具体用于:
若判断获知编译任务包括多个,则根据规则在镜像池中选择对应的编译镜像;
若所述镜像池中无对应的编译镜像,则根据所述规则生成对应的编译镜像;
根据选择的/生成的编译镜像为每个编译任务生成单独的容器。
进一步地,在上述装置实施例的基础上,所述装置还包括:
容器销毁模块,用于若判断获知所述编译对象已编译完成,则将销毁所述容器;
容器保留模块,用于若判断获知所述编译对象编译失败,则保留所述容器,以供开发分析。
进一步地,在上述装置实施例的基础上,所述装置还包括:
镜像管理模块,用于对云端加载的镜像、本地上传的镜像、在已有镜像基础上启动容器部署生成新的镜像、主动学习生成的镜像进行统一管理。
进一步地,在上述装置实施例的基础上,所述装置还包括:
存储模块,用于将编译过程中生成的编译日志和编译产物发送至中控服务器进行存储。
进一步地,在上述装置实施例的基础上,所述装置还包括:
告警模块,用于若判断获知编译过程中生成的参数不在预设的阈值范围内,则生成告警信息,并将所述告警信息发送给目标终端。
本实施例所述的linux下编译处理装置可以用于执行上述方法实施例,其原理和技术效果类似,此处不再赘述。
参照图6,所述电子设备,包括:处理器(processor)601、存储器(memory)602和总线603;
其中,
所述处理器601和存储器602通过所述总线603完成相互间的通信;
所述处理器601用于调用所述存储器602中的程序指令,以执行上述各方法实施例所提供的方法。
本实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法。
本实施例提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行上述各方法实施例所提供的方法。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。