1.本发明涉及互联网技术领域,尤其是涉及一种web前端创建并运行构建任务的方法、系统和终端。
背景技术:2.目前,无论是传统互联网还是现在的 web3.0 时代,前端职能的业务交付,都离不开将开发的代码构建并部署的过程。前端web 项目主要使用的是 javascript 和 css这两种浏览器能直接解释运行的语言。但实际上,在使用了浏览器不能直接解释运行的语言,或使用了错误的语法,或采用了前端框架,需要依赖管理,或基于性能考虑,需要对开发代码进行精简、压缩,或基于安全考虑,需要将易于阅读的源代码转换成人很难直接看懂的压缩代码时,需要在前端进行代码构建,基于传统的技术方案,通常会集成在发布服务中,在同一个服务器资源和环境下去完成不同项目的依赖安装、编译压缩代码等构建相关的过程。
3.但这种构建方式存在以下不足:1.构建脚本存在全局污染可能性:构建脚本执行内容是前端工程师自定义的,因为每个项目都可能使用不同的方式去构建代码,例如 a 项目用 gulp 工具,b 项目则用 webpack 工具。在这种背景下,任何项目都可以加入恶意脚本,危害线上机器。例如 b 项目在执行打包的时候,可以跨目录去删除 a 项目的文件。
4.2.构建脚本会产生副作用:构建脚本由开发者指定,不做限制,意味着其中可能存在许多不可控的副作用。比如在构建任务过程中启动了一些子进程,直到任务结束都没有卸载掉,就一直挂载在系统上,持续占用系统资源。
5.3.多个项目同时进行构建,资源占用过多导致全局卡死,导致服务器宕机:真实的使用场景,均是多个构建任务并发,有的任务可能会消耗巨大的服务器资源,导致整个服务卡死,所有任务均无法继续。
6.4.npm 全局缓存导致构建产物不符合预期:npm 是前端使用的包管理器,是对各种工具、插件包的管理。传统方案是在单一的服务器环境下处理构建任务,从而会造成共用一个npm 全局缓存。而项目构建真实场景下,有可能存在需要清理掉缓存,重新生成独立的项目npm 依赖缓存才能正确构建的情况。所以全局统一的缓存必然有很大的缺陷。
7.5.没有任务排队机制:当构建任务数过多、服务器资源消耗殆尽时,没有排队机制,会导致任务直接失败。
8.因此,如何建立一种前端用于稳定产出构建产物的环境,产出构建产物,是目前亟待解决的问题。
技术实现要素:9.本发明的目的是提供一种web前端创建并运行构建任务的方法、系统和终端,通过建立用于产出稳定构建产物环境,在接收到用户任务请求时,基于服务镜像,创建任务容器,各任务经过排队后进入进程,在各自的任务容器里执行,各任务设置各自的npm代理,在任务结束后卸载掉任务容器,避免了构建任务数过多引起服务器资源消耗殆尽现象的出现,减少了全局污染,节约了系统资源。
10.第一方面,本发明的上述发明目的通过以下技术方案得以实现:一种web前端建立用于产出稳定构建产物环境的方法,包括建立服务镜像、任务调度程序、任务执行结束及卸载程序,建立服务镜像包括基于容器镜像文件,拉取基本运行环境、设置包管理器代理、设置包管理器私有源地址,任务调度程序用于基于建立好的服务镜像,创建并启动一个任务容器,执行用户自定义的代码构建脚本,并将实时任务信息传输出去,任务执行结束及卸载程序用于设置任务结束条件及在任务结束后卸载程序。
11.本发明进一步设置为:基本运行环境包括nodejs 运行环境,包管理器代理包括npm代理,设置包管理器代理用于使npm代理能够支持访问内外网接口,设置包管理器私有源地址用于对私有包设置地址,以便于在创建任务时能够正确安装私有包。
12.本发明进一步设置为:任务执行结束及卸载程序,用于在任务结束或任务执行超过设定时间后,自动执行强行终止程序,退出任务,删除掉任务容器。
13.第二方面,本发明的上述发明目的通过以下技术方案得以实现:一种web前端创建并运行构建任务的方法,接收前端任务请求,对任务请求进行排队,对进入进程的任务,基于已建立的产出稳定构建产物的环境,创建任务容器并运行,在任务执行结束或执行时间超过设定时长后,退出任务并删除任务容器,输出构建产物。
14.本发明进一步设置为:用户任务请求包括调用平台名称、应用名、应用发布环境、应用代码仓库地址、代码分支名、构建脚本名。
15.本发明进一步设置为:任务请求中包括用户自定义的代码构建脚本,创建任务容器后运行时,执行用户自定义的代码构建脚本,包括基于前端任务请求,下载项目代码,安装项目依赖包,执行用户自定义构建脚本,压缩构建产物,存储在持久化存储空间。
16.本发明进一步设置为:安装项目依赖包时,从集中存储的数据库中拉取依赖缓存,如果数据库中没有依赖缓存,则重新安装依赖,并将安装产生的依赖缓存,存储在用于集中存储的数据库中,以供下一任务拉取。
17.第三方面,本发明的上述发明目的通过以下技术方案得以实现:一种web前端创建并运行构建任务系统,包括前端、后处理端,前端用于输入用户任务请求,后处理端包括建立产出稳定构建产物环境、任务调度器,任务调度器用于接收用户任务请求,对用户任务请求排队,在任务进入进程后,基于建立好的构建产物环境,创建并启动任务容器,执行用户任务请求的用户自定义代码构建脚本,并实时输出执行信息,在执行完成后或执行时间超过设定时长后,卸载掉任务容器,输出存储的构建产物。
18.本发明进一步设置为:任务调度器包括主进程器、至少一个工作进程器、任务调度进程器,主进程器用于接收用户任务请求,并随机分配给一个工作进程器处理,所述工作进程器将任务消息传送给任务调度进程器,任务调度进程器将所述任务消息加入任务队列,进行排队;任务调度进程器用于监测任务中心的任务数量,并及时补充任务。
19.第四方面,本发明的上述发明目的通过以下技术方案得以实现:一种web前端创建并运行构建任务系统终端,包括存储器、处理器、以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现本技术所述方法。
20.与现有技术相比,本技术的有益技术效果为:1.本技术通过建立相互独立的用于构建产物的稳定环境,进行构建任务,防止构建时相互污染;2.进一步地,本技术通过已建立好的环境,独立进行产物构建,保证了构建任务结束后能及时卸载掉任务容器及相关进程,防止系统资源无谓地被占用;3.进一步地,本技术通过限制每个任务的规模,防止多个项目同时进行构建时,因资源占用过多导致全局卡死、服务器宕机的现象出现;4.进一步地,本技术在每个任务创建时,分别建立 npm 用于包管理,并生成独立的全局包缓存,保证构建过程高效率且构建产物符合预期;5.进一步地,本技术在环境中设置排队机制,保证各任务都能够顺利执行。
附图说明
21.图1是本技术的一个具体实施例的创建并运行构建任务的系统结构示意图。
具体实施方式
22.以下结合附图对本发明作进一步详细说明。
23.具体实施例一本技术的一种web前端创建并运行构建任务的方法,包括建立用于产出稳定构建产物环境,接收前端的任务请求,对任务请求进行排队,对进入进程的任务,基于已建立的产出稳定构建产物的环境,对每个任务请求分别创建各自的任务容器并运行,在任务执行结束或执行时间超过设定时长后,退出任务并删除任务容器,输出构建产物。
24.本技术的一种web前端建立用于产出稳定构建产物环境的方法,包括建立服务镜像、任务调度程序、任务执行结束及卸载程序。
25.建立服务镜像包括基于容器镜像文件,拉取基本运行环境、设置包管理器代理、设置包管理器私有源地址,任务调度程序用于基于建立好的服务镜像,创建并启动一个任务容器,执行用户自定义的代码构建脚本,并将实时任务信息传输出去,任务执行结束及卸载程序用于设置任务结束条件及在任务结束后卸载程序。
26.在本技术的一个具体实施例中,基于dockerfile容器镜像文件,建立用于创建任务的服务镜像。dockerfile容器镜像文件文件,能够指定好执行任务过程中所需要的基本依赖和配置,包括:1、拉取nodejs 运行环境,作为前端构建所需的基本运行环境;2、设置npm包管理器代理,设置内外网代理接口,使 npm包管理器代理能够支持访问内外网接口;3、设置npm包管理器代理私有源地址,即私有包地址,用于创建任务时能够正确安装用户自定义的私有包。
27.任务调度程序基于建立好的服务镜像,执行进入进程的任务,创建一个任务容器并启动,任务容器执行用户自定义的代码构建脚本,在执行过程中,实时将执行信息传输出去,以便于用户能够实时获知创建任务的过程,方便追踪排查问题。
28.任务容器执行用户自定义的代码构建脚本时,根据代码地址,下载项目代码,安装项目依赖的 npm 包,执行用户自定义的代码构建脚本,将构建产物进行压缩,存储在指定的持久化存储空间。
29.在安装项目依赖的 npm 包时,首先会去集中存储数据库中去拉取依赖缓存,如果数据库中没有依赖缓存,则重新安装依赖,并将安装产生的依赖缓存,存储到集中存储数据库中,以供下一任务拉取。每项任务安装各自的项目依赖包,并生成独立的缓存,避免了因全局缓存冲突导致需重新生成缓存才能正确构建的情况。
30.用户自定义的代码构建脚本,完全由用户自定义,由用户任务请求时包括的参数决定,用户任务请求包括调用平台名称、应用名、应用发布环境、应用代码仓库地址、代码分支名、构建脚本名。
31.在本技术的一个具体实施例中,如用户自定义的代码构建脚本为:npm run build,则执行时会去拉构建缓存、依赖缓存。
32.任务执行结束及卸载程序,在任务结束或任务执行时间超过设定时长后,卸载掉任务进程实例和容器实例;输出存储的构建产物。
33.具体实施例二本技术的一种web前端创建并运行构建任务的系统,包括前端、后处理端,后处理端包括建立产出稳定构建产物环境、建立任务调度器;前端包括界面,用于使用方输入用户任务请求;任务调度器在接收到用户任务请求后,将用户任务请求加入任务队列中等待,在任务进入进程后,基于建立好的构建产物环境,创建并启动任务容器,执行用户任务请求的用户自定义代码构建脚本,并实时输出执行信息,在执行完成后或执行时间超过设定时长后,卸载掉任务容器,输出存储的构建产物。
34.任务调度器包括主进程器、至少一个工作进程器、任务调度进程器,主进程器在接收到用户任务请求后,随机分配一个工作进程器处理,工作进程器将任务消息告知给任务调度进程器,任务调度进程器将该用户任务请求加入到任务队列中等待。
35.任务调度进程器以设定频率轮询执行任务中心的任务数量,如果任务数量饱和,则等待执行任务中心消化任务数量,在任务数量消化掉部分任务数量时,检测到执行任务中心的任务数量不饱和,将任务队列中排在第一名的用户任务请求推到执行任务中心的任务队列中,在执行任务中心重新排队,等待进入任务执行进程。这种排队方式,避免了用户任务的拥挤,防止构建任务数量过多、服务器资源被消耗殆尽,进而引起任务失败的现象出现。
36.当用户任务请求进入执行进程后,根据接收到的代码地址,去代码地址处下载项目代码,安装项目依赖的 npm 包,执行用户自定义的代码构建脚本,将构建产物进行压缩,存储在指定的持久化存储空间。在任务执行完成后,或任务执行时间超过设定时长后,卸载掉任务容器和进程实例,以减少资源占用。
37.系统的运行过程,如图1所示,创建任务的过程,使用方与websocket建立长连接通信,并在前端输入用户任务请求。
38.后处理端的主进程在接收到用户任务请求后,随机分配一个工作进程器进行处理,该工作进程器向任务调度进程器发出任务消息,任务调度进程器将用户任务请求加入任务队列中,同时轮询执行任务中心的任务数量,如果任务是饱和的,就等待;在任务出现不饱和时,把任务队列中排在第一的用户任务请求加入到执行任务中心的任务数量中,继续排队等候进入执行进程。
39.在用户请求进入执行进程后,任务调度进程器执行任务构建,创建任务容器并启动任务容器,执行用户自定义的代码构建脚本,将构建产物进行压缩并输出给该工作进程器,生成任务日志发送给该工作进程器,该工作进程器将任务创建结果发送给主进程,并将任务日志通过websocket(基于tcp的全双工通信协议)发送给用户。
40.主进程将任务创建结果输出给用户,用户再通过 websocket 获得该任务的日志。
41.终止任务的过程,与创建任务的过程相似,不同之处在于不会生成任务日志,因而也不用上报给用户。具体为:使用方与websocket建立长连接通信,并在前端输入用户任务请求。
42.后处理端的主进程在接收到用户请求终止构建任务后,随机分配一个工作进程器进行处理,该工作进程器向任务调度进程器发出任务消息,任务调度进程器将查询任务队列是否存在要终止的任务,如果存在但还未开始执行,则直接从任务队列中删除。如果正在执行,则强制终止并删除任务容器,卸载掉相关进程,并将终止结果输出给该工作进程器。
43.该工作进程器再将终止结果发送给主进程,主进程再将终止结果发送给用户。
44.基于服务镜像,每一个任务构建出各自的任务容器。每个任务都启动单独的 docker 容器运行,做到了完全构建隔离。自定义脚本的所有操作不会影响到其他任务容器中的项目。
45.容器限制了 cpu 使用数量,同时只部署在 8 core 的物理机下,确保任务不会创造过多的子进程,导致占用大量的 cpu 资源。容器限制了最大允许使用的内存为 5g,资源占用过多到达上限后,任务容器会直接杀死该任务,并退出任务容器。因此不会影响到整个服务的运行。
46.设定时长,如果构建任务执行的时间超过设定时长,则认为任务出错,退出并删除容器。
47.构建任务执行完即退出并删除容器,容器删除意味着容器内任务带来的副作用,例如多余的子进程,也都会跟随一起被删除。
48.每新开一个构建任务,都会新启动一个 docker 任务容器,在容器中新安装依赖,由于各个任务容器完全独立,每一个容器内都会有一个 npm 的全局缓存,所以也就避免了因为同一个 npm 全局缓存导致的各种问题。
49.在 egg 框架的多工作进程器(worker)进程模式下,使用任务调度进程器(agent)来管理任务队列,通过 agent 和 workers 间的通信,实现多 worker 共享一个队列的目的,任务数过多时会排队等待,任务结束后会自动启动排队中的任务。
50.用户如果误发了任务请求,或者配置错了任务参数,可立即发起请求终止当前的任务。
51.每个服务器能够支持并发4个任务,即同时能够存在4个任务容器,在任务容器中,执行web项目的构建任务。
52.本系统无状态节点,支持横向扩展,通过横向扩展节点,有效提升服务集群的任务处理能力,当服务器数量增加时,能够支持4倍速服务器数量的任务同时进行。
53.具体实施例三本技术的一种web前端创建并运行构建任务的系统终端设备,该实施例的终端设备包括:处理器、存储器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,例如创建并运行构建任务程序,所述处理器执行所述计算机程序时实现实施例1中的方法。
54.或者,所述处理器执行所述计算机程序时实现上述各装置实施例中各模块/单元的功能,例如:任务调度器模块、建立产出稳定构建产物环境模块。
55.示例性的,所述计算机程序可以被分割成一个或多个模块/单元,所述一个或多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述web前端创建并运行构建任务的系统终端设备中的执行过程。例如,所述计算机程序可以被分割成多个模块,各模块具体功能如下:1. 创建并运行构建任务模块,用于任务执行;2. 建立用于产出稳定构建产物环境模块,用于建立系统环境。
56.所述web前端创建并运行构建任务的系统终端设备可以是桌上型计算机、笔记本、掌上电脑及云端服务器等计算设备。所述web前端创建并运行构建任务的系统终端设备可包括,但不仅限于,处理器、存储器。本领域技术人员可以理解,所述上述示例仅仅是所述web前端创建并运行构建任务的系统终端设备的示例,并不构成对所述web前端创建并运行构建任务的系统终端设备的限定,可以包括比图示更多或更少的部件,或组合某些部件,或不同的部件,例如所述web前端创建并运行构建任务的系统终端设备还可以包括输入输出设备、网络接入设备、总线等。
57.所述处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数据信号处理器(digital signal processor,dsp) 、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等,所述处理器是所述一种web前端创建并运行构建任务的系统终端设备的控制中心,利用各种接口和线路连接整个所述一种web前端创建并运行构建任务的系统终端设备的各个部分。
58.所述存储器可用于存储所述计算机程序和/或模块,所述处理器通过运行或执行存储在所述存储器内的计算机程序和/或模块,以及调用存储在存储器内的数据,实现所述一种web前端创建并运行构建任务的系统终端设备的各种功能。所述存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据手机的使用所创建的数据(比如音频数据、电话本等)等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如硬盘、内存、插接式硬盘,智能存储卡(smart media card ,smc),安全数字(securedigital,sd)卡,闪存卡(flash card)、至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
59.本具体实施方式的实施例均为本发明的较佳实施例,并非依此限制本发明的保护范围,故:凡依本发明的结构、形状、原理所做的等效变化,均应涵盖于本发明的保护范围之内。
技术特征:1.一种web前端建立用于产出稳定构建产物环境的方法,其特征在于,包括建立服务镜像、任务调度程序、任务执行结束及卸载程序,建立服务镜像包括基于容器镜像文件,拉取基本运行环境、设置包管理器代理、设置包管理器私有源地址,任务调度程序用于基于建立好的服务镜像,创建并启动一个任务容器,执行用户自定义的代码构建脚本,并将实时任务信息传输出去,任务执行结束及卸载程序用于设置任务结束条件及在任务结束后卸载程序。2.根据权利要求1所述web前端建立用于产出稳定构建产物环境的方法,其特征在于,基本运行环境包括nodejs 运行环境,包管理器代理包括npm代理,设置包管理器代理用于使npm代理能够支持访问内外网接口,设置包管理器私有源地址用于对私有包设置地址,以便于在创建任务时能够正确安装私有包。3.根据权利要求1所述web前端建立用于产出稳定构建产物环境的方法,其特征在于,任务执行结束及卸载程序,用于在任务结束或任务执行超过设定时间后,自动执行强行终止程序,退出任务,删除掉任务容器。4.一种web前端创建并运行构建任务的方法,其特征在于,接收前端任务请求,对任务请求进行排队,对进入进程的任务,基于已建立的产出稳定构建产物的环境,创建任务容器并运行,在任务执行结束或执行时间超过设定时长后,退出任务并删除任务容器,输出构建产物。5.根据权利要求4所述web前端创建并运行构建任务的方法,其特征在于,用户任务请求包括调用平台名称、应用名、应用发布环境、应用代码仓库地址、代码分支名、构建脚本名。6.根据权利要求4所述web前端创建并运行构建任务的方法,其特征在于,任务请求中包括用户自定义的代码构建脚本,创建任务容器后运行时,执行用户自定义的代码构建脚本,包括基于前端任务请求,下载项目代码,安装项目依赖包,执行用户自定义构建脚本,压缩构建产物,存储在持久化存储空间。7.根据权利要求5所述web前端创建并运行构建任务的方法,其特征在于,安装项目依赖包时,从集中存储的数据库中拉取依赖缓存,如果数据库中没有依赖缓存,则重新安装依赖,并将安装产生的依赖缓存,存储在用于集中存储的数据库中,以供下一任务拉取。8.一种web前端创建并运行构建任务系统,其特征在于,包括前端、后处理端,前端用于输入用户任务请求,后处理端包括建立产出稳定构建产物环境、任务调度器,任务调度器用于接收用户任务请求,对用户任务请求排队,在任务进入进程后,基于建立好的构建产物环境,创建并启动任务容器,执行用户任务请求的用户自定义代码构建脚本,并实时输出执行信息,在执行完成后或执行时间超过设定时长后,卸载掉任务容器,输出存储的构建产物。9.根据权利要求8所述web前端创建并运行构建任务系统,其特征在于,任务调度器包括主进程器、至少一个工作进程器、任务调度进程器,主进程器用于接收用户任务请求,并随机分配给一个工作进程器处理,所述工作进程器将任务消息传送给任务调度进程器,任务调度进程器将所述任务消息加入任务队列,进行排队;任务调度进程器用于监测任务中心的任务数量,并及时补充任务。10.一种web前端创建并运行构建任务系统终端,包括存储器、处理器、以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于:所述处理器执行所述计算
机程序时实现如权利要求1-7任一所述方法。
技术总结本发明公开了一种web前端创建并运行构建任务的方法、系统和终端,包括建立用于产出稳定构建产物环境,建立服务镜像、任务调度程序、任务执行结束及卸载程序,建立服务镜像包括基于容器镜像文件,拉取基本运行环境、设置包管理器代理、设置包管理器私有源地址,基于建立好的服务镜像,接收前端任务请求,对任务请求进行排队,对进入进程的任务,基于已建立的产出稳定构建产物的环境,创建任务容器并运行,执行用户自定义的代码构建脚本,实时传输任务信息,在任务执行结束或执行时间超过设定时长后,删除任务容器,输出构建产物;减少了全局污染,节约了资源。节约了资源。节约了资源。
技术研发人员:李邦锐
受保护的技术使用者:观澜网络(杭州)有限公司 杭州联科美讯生物医药技术有限公司 杭州丁香健康管理有限公司
技术研发日:2022.07.23
技术公布日:2022/11/1