CN112463123A - 任务编译方法、装置、网络节点、***及存储介质 - Google Patents

任务编译方法、装置、网络节点、***及存储介质 Download PDF

Info

Publication number
CN112463123A
CN112463123A CN202011340140.5A CN202011340140A CN112463123A CN 112463123 A CN112463123 A CN 112463123A CN 202011340140 A CN202011340140 A CN 202011340140A CN 112463123 A CN112463123 A CN 112463123A
Authority
CN
China
Prior art keywords
task
compiling
target
target task
container
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.)
Granted
Application number
CN202011340140.5A
Other languages
English (en)
Other versions
CN112463123B (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.)
Beijing Zitiao Network Technology Co Ltd
Original Assignee
Beijing Zitiao Network 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 Beijing Zitiao Network Technology Co Ltd filed Critical Beijing Zitiao Network Technology Co Ltd
Priority to CN202011340140.5A priority Critical patent/CN112463123B/zh
Publication of CN112463123A publication Critical patent/CN112463123A/zh
Application granted granted Critical
Publication of CN112463123B publication Critical patent/CN112463123B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/20Software design
    • G06F8/24Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

本公开公开了任务编译方法、装置、网络节点、***及存储介质。所述方法包括:首先接收主节点派发的目标任务;然后根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;最后根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。该方法根据封装逻辑和标记变量信息,能够启动相应的编译环境并编译目标任务,无需针对不同的编译环境分别配置目标任务的运行逻辑,从而提高流水线任务逻辑对不同编译环境的适用性和运行的灵活性。

Description

任务编译方法、装置、网络节点、***及存储介质
技术领域
本发明实施例涉及计算机技术领域,尤其涉及一种任务编译方法、装置、网络节点、***及存储介质。
背景技术
生产环境的Jenkins部署基本采用分布式架构,一个Jenkins主节点(Master)可以管理多个从节点(Slave)。从节点在操作***层级上,可能对应于Window操作***、Mac操作***或Linux操作***等。一类从节点(例如Window操作***、Mac操作***的从节点)可以直接在物理机的操作***层级编译任务,而另一类从节点(例如Linux***的从节点)需要启动拥有特定环境依赖的容器才能编译任务。由此,不同类型的从节点需要不同的编译环境。考虑这种差异,不同类型的从节点运行相关任务的逻辑不同,对于不同类型从节点的任务的派发和编译也需要有区别地分别进行配置,增加了开发过程的复杂度,任务配置的灵活性以及对不同类型从节点或不同编译环境的适用性低。
发明内容
本发明提供了一种任务编译方法、装置、网络节点、***及存储介质,以提高流水线任务逻辑对不同编译环境的适用性和运行的灵活性。
第一方面,本公开实施例提供了一种任务编译方法,应用于网络节点上的应用程序,包括:
接收主节点派发的目标任务;
根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;
根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
第二方面,本公开实施例还提供了一种任务编译装置,包括:
任务接收模块,用于接收主节点派发的目标任务;
调用模块,用于据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;
编译模块,用于根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
第三方面,本公开实施例还提供了一种网络节点,包括:
一个或多个处理装置;
存储装置,用于存储一个或多个程序;
所述一个或多个程序被所述一个或多个处理装置执行,使得所述一个或多个处理装置实现本公开实施例提供的方法。
第四方面,本公开实施例还提供了一种任务编译***,包括主节点以及至少一个如第三方面所述的网络节点;
主节点向各网络节点派发目标任务。
第五方面,本公开实施例还提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现本公开实施例提供的方法。
本公开实施例提供了任务编译方法、装置、网络节点、***及存储介质,首先接收主节点派发的目标任务;然后根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;最后根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。该方法根据封装逻辑和标记变量信息,能够启动相应的编译环境并编译目标任务,无需针对不同的编译环境分别配置目标任务的运行逻辑,从而提高流水线任务逻辑对不同编译环境的适用性和运行的灵活性。
附图说明
图1为本公开实施例一提供的一种任务编译方法的流程示意图;
图2为本公开实施例一提供的一种派发目标任务的示意图;
图3为本公开实施例二提供的一种任务编译方法的流程示意图;
图4为本公开实施例三提供的一种任务编译方法的流程示意图;
图5为本公开实施例三提供的一种任务编译过程的示意图;
图6为本公开实施例四提供的一种任务编译装置的结构示意图;
图7为本公开实施例五提供的一种任务编译***的结构示意图;
图8为本公开实施例六提供的一种网络节点的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。
应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。
本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”。
需要注意,本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。
本公开实施方式中的多个装置之间所交互的消息或者信息的名称仅用于说明性的目的,而并不是用于对这些消息或信息的范围进行限制。
下述各实施例中,每个实施例中同时提供了可选特征和示例,实施例中记载的各个特征可进行组合,形成多个可选方案,不应将每个编号的实施例仅视为一个技术方案。此外,在不冲突的情况下,本公开中的实施例及实施例中的特征可以相互组合。
实施例一
图1为本公开实施例一提供的一种任务编译方法的流程示意图,该方法可适用于Jenkins分布式架构下任意类型的网络节点编译目标任务的情况,具体的,通过在流水线任务的配置中增加封装逻辑并结合标记变量信息,实现在相应的编译环境中编译目标任务的情况。该方法可以由任务编译装置来执行,其中该装置可由软件和/或硬件实现,并一般集成在网络节点上,网络节点主要指Jenkins分布式架构中的从节点。
在本实施例中,通过在流水线任务的配置中增加封装逻辑并结合标记变量信息,可以屏蔽网络节点的底层操作***类型,即,Jenkins任务可以无差别派发到不同类型的网络节点,对于Window操作***、Linux操作***、Mac操作***等网络节点,无需分别配置任务的执行逻辑和代码,不同类型的网络节点都可以基于本实施例中所提供的任务编译方法,实现目标任务的编译。
如图1所示,本公开实施例一提供的一种任务编译方法,包括如下步骤:
S110、接收主节点派发的目标任务。
在本实施例中,Jenkins分布式架构中的主节点主要负责任务调度、从节点管理、任务执行状态监控、产物保存、提供Web服务接口等。主节点为网络节点派发任务(Task),Task表示一个Jenkins任务的创建和配置等。Task可以被配置为允许并发运行和非并发运行,允许并发运行即允许Task同时运行多个实例(Job),非并发运行即一次只能运行一个Job。派发至网络节点的任务,即为该网络节点待编译的目标任务。此处对于目标任务的具体类型不作限定,例如可以为定时任务、非定时任务、编译任务等。
在本实施例中,网络节点接收主节点派发的目标任务,并以流水线任务(PipelineTask)的模式执行,采用流水线的模式可以将多个任务串起来,例如,在目标任务1执行到第二阶段的同时,网络节点还可以接收目标任务2并执行目标任务2的第一阶段,从而提高任务编译效率。
图2为本公开实施例一提供的一种派发目标任务的示意图。如图2所示,在Jenkins分布式架构中,一个主节点可以管理多个网络节点。网络节点可通过网络接口向主节点注册(Register),通常不同的网络节点会打上不同的标签(Label),用以标识自身属于哪种类型的从节点,便于主节点进行任务调度和网络节点管理,使整个调度***运行条理化。
图2中以四个网络节点(Slave1-4)为例,在现有技术中,需要为四个网络节点分别打上标签(图2中以Mac操作***和Linux操作***的网络节点为例进行说明):Mac、Mac、Linux、Linux,每种标签均有两个网络节点。示例性的,主节点创建了两种Task任务:Task A和Task B,依据任务所执行细节的差异,限定Task A只能在标签为Mac的网络节点上执行,而Task B只能在标签为Linux的网络节点上执行;并且Task A允许并发执行,Task B不允许并发,只能串行执行。这种情况下,主节点会依据Task A和Task B所定义的标签的配置,分别为两个Task维护一个任务队列:Task A Queue和Task B Queue。由于Task A允许并发执行,Task A1和A2就会被派发至Slave 1和Slave 2节点开始执行;而Task B不允许并发,一次只能派发一个Task B给标签为Linux的网络节点,且只有当Task B1执行完毕时,才会继续派发Task B2,再次派发的候选节点仍然是Slave 3或者Slave 4。
然而,在本实施例中,Jenkins任务可以无差别派发到不同类型的网络节点,不同类型的网络节点都可以基于本实施例中所提供的任务编译方法,实现目标任务的编译。基于此,不同类型的网络节点可以具有相同的标签(Common-Label)。
需要说明的是,基于Mac操作***的网络节点(以下简称Mac网络节点)没有引入任何虚拟化技术,即从节点服务以后台进程形式常驻于Mac操作***的后台服务中,负责与主节点进行交互,并接收具体的目标任务。当有目标任务派发至Mac网络节点时,从节点服务直接在Mac操作***层级的物理机编译环境中运行该目标任务,此Mac网络节点需要预先为该目标任务配置好依赖的环境,例如各种软件开发工具包(Software Development Kit,SDK)。
而基于Linux操作***的网络节点(以下简称Linux网络节点)则引入了从节点服务容器,Linux网络节点运行一个常驻的从节点服务容器,以提供从节点服务。当有目标任务派发至Linux网络节点时,从节点服务容器将以流水线任务的模式运行该目标任务,当运行到在特定环境中才能执行的步骤时(例如执行build.sh),则需要再次启动另一个拥有特定环境依赖的容器(即编译容器)来运行此步骤,编译容器指代可以执行特殊任务或步骤的Docker容器,例如,编译容器可以是针对Android工程编译的编译容器或者dll/so动态库编译容器等。
Mac网络节点执行任务的逻辑相对比较简单,直接基于Mac操作***的资源即可实现编译,而Linux网络节点的情况相对复杂,需要启动至少两种容器:从节点服务器容器与编译容器,在编译过程中,从节点服务容器在Task进程中创建并运行编译容器以编译任务,从而一个Linux网络节点的任务接收与编译可以由单个常驻的从节点服务容器来协调,具体的任务编译由编译容器来确定,不同任务可以复用Linux网络节点,从而扩大Linux从节点的容量。
综上,在流水线任务的配置中,要调起预置的build.sh脚本,此build.sh依赖于相关的编译环境和SDK。对于Mac网络节点,已经预先配置好了各种编译依赖,因此可以直接调起build.sh开始编译;而对于Linux网络节点,sh内置指令的调用是在从节点服务容器中,此从节点服务容器不具备具体的Android编译依赖环境,因此还需要调用具体的编译容器。
本实施例中,通过在流水线任务的配置中增加封装逻辑,可屏蔽从节点的类型,使得Jenkins任务可以无差别派发到任意从节点,不同类型的网络节点都可以基于本实施例中所提供的任务编译方法,实现目标任务的编译。在此基础上,不同类型的网络节点定义相同的标签即可(如图2中的Label:common-slave)。
S120、根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数。
在本实施例中,在流水线任务的配置的基础上,增加了封装逻辑(Wrapper逻辑),Wrapper逻辑基于包裹好的代码,用于定义一个流水线任务的具体行为、针对需要在容器中编译目标任务的网络节点准备各项配置文件、定义一个流水线任务的具体行为等。
在一个实施例中,Wrapper逻辑采用Groovy语法定义,Wrapper逻辑主要包括以下几个部分:
1)定义执行Job的网络节点的标签,指定目标任务需要在特定标签的网络节点上运行,需要说明的是,本实施例中,不同类型的网络节点具有相同的标签,目标任务可以无差别地派发至任意一个标签的网络节点;
2)预定义该Job的环境变量;
3)定义该Job的不同执行阶段,便于从宏观上监控任务的编译进度,例如,第一阶段为Setup阶段,包括代码仓库的代码复制等,第二阶段为执行阶段,通过内置sh指令(build.sh)开始运行构建脚本(shell脚本或者python脚本,扩展名分别是sh和py)等。
本实施例中,在目标任务的实例Job启动时,确定每一个Job进程传递的环境变量,使得当前运行的目标任务在运行具体脚本时获知自己所处的环境,环境变量中包括了网络节点的标记变量信息,用以区分是否需要在容器中编译目标任务。
在一个实施例中,可以利用不同的标记变量信息区分不同类型网络节点所需的编译环境,例如,Mac网络节点采用第一标记变量,Linux网络节点采用第二标记变量,第一标记变量和第而标记变量的取值不同。或者,Mac网络节点具有标记变量信息,而Linux网络节点没有对应的标记变量信息,或者,标记变量信息为空等。此处对标记变量信息的具体形式或取值不作限定。
S130、根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
本实施例中,根据标记变量信息可以确定需要在目标容器中编译还是在非容器编译环境(即物理机编译环境)中编译目标任务。目标容器主要指与目标任务对应的Docker容器,Docker容器可以理解为对Linux容器的一种封装,并且提供了许多操作容器的接口,Docker容器将目标应用程序与其依赖环境打包在一个镜像文件中,运行此镜像文件就会生成一个虚拟的Docker容器,进而通过此Docker容器来运行相应的程序或者服务。物理机编译环境主要指基于操作***的编译环境,例如Mac操作***、Windows操作***等,在操作***的编译环境中已经配置好编译所需的工具,无需引入虚拟化技术。
在一个实施例中,如果网络节点为Linux网络节点,则在接收目标任务之前,该网络节点的Docker环境准备就绪,即,该网络节点已经安装Docker程序,且Docker服务处在正常运行状态。在该网络节点登陆后,通过执行特定指令可以罗列出可用的Docker镜像和正在运行的Docker容器。
在一实施例中,目标容器可以包括从节点服务容器和编译容器,其中,编译容器即Docker容器。
可选的,在确定目标任务的标记变量信息并调用启动函数之前,还包括:在托管在代码仓库中的流水线任务的配置中加载Wrapper逻辑,以提供编译过程的启动函数。在此基础上,通过Wrapper逻辑的配置,提供启动函数的接口和功能,实现在从节点相应的编译环境中编译目标任务,也提高了配置的可扩展性。
本实施例提供的一种任务编译方法,法包括:首先接收主节点派发的目标任务;然后根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;最后根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。该方法根据封装逻辑和标记变量信息,能够启动相应的编译环境并编译目标任务,无需针对不同的编译环境分别配置目标任务的运行逻辑,从而提高流水线任务逻辑对不同编译环境的适用性和运行的灵活性。
实施例二
图3为本公开实施例二提供的一种任务编译方法的流程示意图,本实施例二在实施例一中各个可选方案为基础进行具体化。在本实施例中,在确定目标任务的标记变量信息并调用启动函数之前,还包括:在托管在代码仓库中的流水线任务的配置中加载封装逻辑(即Wrapper逻辑),以提供编译过程的启动函数;其中,Wrapper逻辑封装于基于Groovy语言的逻辑配置文件中,逻辑配置文件与流水线任务的配置位于代码仓库的相同层级目录下。
本实施例中,目标任务的标记变量信息包括对应于目标容器的第一标记变量以及对应于非容器编译环境的第二标记信息。
本实施例中,将根据标记变量信息,通过启动函数在目标容器中或非容器编译环境中编译目标任务,具体化为:若标记变量信息为第一标记变量,则通过启动函数启动目标容器,并在目标容器中编译目标任务;若标记变量信息为第二标记信息,则通过启动函数在非容器编译环境中编译目标任务。
本实施例尚未详尽的内容请参考实施例一。
如图3所示,本公开实施例二提供的一种任务编译方法,包括如下步骤:
S210、在托管在代码仓库中的流水线任务的配置中加载封装逻辑,以提供编译过程的启动函数。
本实施例中,将流水线任务的配置托管在代码(Git)仓库中,并记录流水线任务的配置在Git仓库中的地址。在流水线任务的配置中,内置的sh指令用于在底层创建一个进程来执行对应的shell脚本或者shell脚本相关的可执行文件。通过在与流水线任务的配置对应的目录下增加一个基于Groovy语法的Wrapper逻辑的配置文件(Wrapper文件),以提供一个启动函数(DockerCallWrapper.Call),便于在接收到目标任务时调用。
在一个实施例中,在流水线任务的配置中加载Wrapper逻辑的过程包括:
在流水线任务的配置中,定义一个变量"DockerCallWrapper",用于提供启动函数的接口;
在执行Job的第一阶段,将托管在Git仓库中的流水线任务的配置的代码通过内置sh指令复制到当前Task工作目录中的groovy-tools文件夹中;
通过内置的Script块和加载(load)指令,将Wrapper逻辑的配置文件(即Wrapper文件)的接口放置于变量"DockerCallWrapper"中;
至此,完成了Wrapper逻辑的加载,实现了在流水线任务的配置中调用启动函数。需要说明的是,还需要将流水线任务的配置中内置的sh调用相应修改为对于启动函数的调用。
在一个实施例中,Wrapper逻辑封装于基于Groovy语言的逻辑配置文件中,逻辑配置文件与流水线任务的配置位于代码仓库的相同层级目录下。流水线任务的配置基于Groovy语法书写,Groovy是一种基于Java虚拟机的敏捷开发语言,能够与Java代码很好地结合,也能用于扩展现有代码。基于Groovy语言配置封装逻辑,可以提高封装逻辑的可扩展性。
在一个实施例中,流水线任务的配置中加载的Wrapper逻辑还用于提供一个删除函数(DockerCallWrapper.down),删除函数用于在目标任务编译完成后清除相关的编译环境,例如停止并删除目标容器。
S220、接收主节点派发的目标任务。
S230、标记变量信息为第一标记变量?若是,则执行S240;否则,执行S250。
本实施例中,可以在Linux网络节点中配置第一标记变量,从而在调用启动函数的过程中可以区分网络节点类型以及区分目标任务所需的编译环境。示例性的,在Linux网络节点的Jenkins本地后台配置中增加标记变量信息:第一标记变量(JENKINS_DOCKER_JOB),且其值为ture,第一标记变量以环境变量的形式注入到流水线任务的具体执行逻辑中,即,只要在此网络节点上运行的Task,其环境变量中都会存在“JENKINS_DOCKER_JOB==true”的状态。在此基础上,可以确定此网络节点需要在目标容器中编译目标任务。
在一实施例中,对于非Linux网络节点,可以不配置标记变量信息,即第一标记变量不存在,从而在调用启动函数的过程中区分网络节点类型以及区分目标任务所需的编译环境。或者也可以配置第二标记变量,例如,将JENKINS_DOCKER_JOB的取值配置为false。在此网络节点上运行的Task,其环境变量中不存在第一标记变量,即可确定该网络节点在非容器编译环境中编译目标任务。
在一个实施例中,通过读取流水线任务的配置内置的env对象,即可获取到执行目标任务的环境变量,其中包括标记变量信息且标记变量信息的取值为true,表示目标任务需要在目标容器中编译,而如果是非容器编译环境的运行模式,则标记变量不存在。
S240、通过启动函数启动目标容器,并在目标容器中编译目标任务。
本实施例中,如果标记变量信息为第一标记变量,则通过启动函数启动目标容器,在目标容器中编译目标任务。
S250、通过启动函数在非容器编译环境中编译目标任务。
本实施例中,如果标记变量信息不是第一标记变量,例如是第二变量或者为空,则通过启动函数直接调用内建的sh指令来运行流水线任务配置中的build.sh脚本,在非容器编译环境中编译目标任务即可。
本公开实施例二提供的一种任务编译方法,具体化了在流水线任务的配置中加载封装逻辑以提供编译过程的启动函数、通过启动函数根据标记变量确定是在目标容器中还是在非容器编译环境中编译目标任务,可以屏蔽对不同类型从节点的配置差异,便于任务的统一调度,进而提高任务调度和执行的效率;并且基于Groovy的封装逻辑,提高了流水线任务配置的可扩展性,提高流水线任务逻辑对不同编译环境的适用性和运行的灵活性。
实施例三
图4为本公开实施例三提供的一种任务编译方法的流程示意图。本实施例以上述实施例中各个可选方案为基础进行具体化。在本实施例中,在根据流水线任务的封装逻辑,确定目标任务的标记变量信息并调用启动函数之前,还包括:在托管在代码仓库中的流水线任务的配置的相同层级目录下配置模板配置文件,模板配置文件包括默认占位符。
本实施例中,将根据流水线任务的封装逻辑,确定目标任务的标记变量信息并调用启动函数,具体化为:读取模板配置文件,并根据启动函数的入参替换模板配置文件中的默认占位符;根据替换默认占位符后的模板配置文件生成目标任务的配置文件;根据环境变量配置文件确定标记变量信息;基于目标任务的配置文件和标记变量信息,调用启动函数。
本实施例中,还包括:在目标任务编译完成时,根据标记变量信息和流水线任务的封装逻辑调用删除函数;通过删除函数删除目标容器,或者清除目标任务的编译环境。
本实施例尚未详尽的内容请参考上述实施例。
如图4所示,本公开实施例三提供的一种任务编译方法,包括如下步骤:
S301、在托管在代码仓库中的流水线任务的配置中加载封装逻辑,以提供编译过程的启动函数。
S302、在托管在代码仓库中的流水线任务的配置的相同层级目录下配置模板配置文件,所述模板配置文件包括默认占位符。
在本实施例中,在Git仓库中流水线任务的配置的相同层级目录下还增加模板配置文件(docker_compose_tpl.yml),模板配置文件中包括默认占位符,例如默认的Job实例名(JOB_NAME)、调用编号(BUILD_NUMBER)、脚本执行器(SHELL_EXECUTOR)等,在生成目标任务的配置文件的过程中默认占位符会被替换掉,以生成目标任务的实际执行逻辑。
可选的,在模板配置文件中可以自定义环境变量、服务名称、容器的镜像文件、容器的运行实例的名称以及容器被调起时所要执行的具体指令或可执行文件的具体路径等。通过配置模板配置文件,使目标任务的编译自动化,提高任务编译效率。
S303、接收主节点派发的目标任务。
S304、读取模板配置文件,并根据启动函数的入参替换所述模板配置文件中的默认占位符。
本实施例中,读取模板配置文件并替换其中的默认占位符,将其中的JOB_NAME、BUILD_NUMBER、SHELL_EXECUTOR等替换成与目标任务对应的真实值,例如将JOB_NAME替换为“my_job”,将BUILD_NUMBER替换为“123”等。被替换为真实值的yml文件内容被保存在目标任务的临时配置文件中。
在一个实施例中,根据启动函数的入参替换模板配置文件中的默认占位符,为生成目标任务的配置文件、启动用于编译目标任务的目标容器提供依据,启动函数的入参包括:
targetComposeFile:即模板配置文件的具体路径;
writeComposeTarget:生成的目标任务的配置文件的具体名称;
cmdPlaceHolder:在目标任务的配置文件中,具体执行指令或脚本文件路径的参数的占位符;
dockerSwitchKey:目标任务的标记变量信息的键值,用于标记网络节点是否对应于Linux网络节点的标记变量信息的Key,通过此Key可以确定标记变量信息的具体取值,从而确定需要在目标容器中还是非容器编译环境中编译目标任务。
需要说明的是,通过流水线任务配置的封装逻辑还可提供删除函数,用于清除目标任务相关的编译环境,例如删除用于编译目标任务的目标容器,删除函数的入参与上述启动函数的入参一致。
S305、根据替换默认占位符后的模板配置文件生成所述目标任务的配置文件。
本实施例中,根据替换默认占位符后的模板配置文件可生成真实的目标任务的配置文件。
在S304中,目标任务的临时配置文件内容已经就绪,但是还未写入到真实的文件中;而在S305中,将其写入至当前的工作目录中,可以将临时配置文件中的时间占位符(Time)替换为网络节点当前的时间戳,并最终确定待写入的yml文件名称,在此基础上生成了完整的目标任务的配置文件的,即,在与模板配置文件同级的目录中,写入了一个具有目标任务对应的真实值的yml文件,根据该文件可以具体执行目标任务。
S306、根据环境变量配置文件确定标记变量信息。
本实施例中,通过env文件可以定义容器实例运行时,所要传递的环境变量,其中包括标记变量信息。在启动目标容器时,会载入此环境变量配置文件,并将此环境变量配置文件中定义的环境变量载入具体的脚本执行进程中。
在一个实施例中,根据环境变量配置文件确定所述标记变量信息,包括:
读取环境变量配置文件中传递的目标任务的环境变量,环境变量包括标记变量信息。
本实施例中,环境变量配置文件起到了环境变量透传的作用,通过提供标记变量信息,可以区分网络节点的类型和对应的编译环境。
在一个实施例中,环境变量配置文件中除了标记变量信息,还可以包括以下内置的环境变量:
构建任务的排队序号(单个Task可能允许并发构建,这种情况下存在任务构建队列);
构建任务的ID;
基于Web访问,当前正在运行的构建任务具体的Job地址;
基于Web访问,当前构建任务具体的Task地址。
在一个实施例中,通过流水线任务的配置也可以新增自定义的环境变量,此处对环境变量配置文件中包括的环境变量不作限定。
在一实施例中,载入环境变量配置文件的过程包括:
通过sh指令执行env命令并导出从节点服务容器中的环境变量;
过滤上述环境变量的敏感变量(例如可能会与目标任务的编译造成冲突的变量);
调用写入文件的内建函数将过滤后的环境变量写入.env文件。
在此基础上,针对启动函数,可以根据已经就绪的具有当前时间戳的yml文件和env文件来启动与此次Job运行所关联的目标容器,此处的启动可以通过内建的sh指令传递真实的目标任务的配置文件的路径,并传递环境变量参数,以启动目标容器来运行最终的./build.sh文件,实现目标任务的编译。
S307、基于目标任务的配置文件和标记变量信息,调用启动函数。
本实施例中,通过调用目标任务的配置文件,结合env文件传递的标记变量信息,可以调用启动函数,如果标记变量信息对应的是目标容器的编译环境,则在启动目标容器的时候,只需要调用模板配置文件,然后执行目标任务的配置文件中的各项指令,从而在网络节点安装完Docker的情况下,启动由docker_compose_yml文件所描述的Docker容器,并执行相关脚本或指令,完成目标任务的编译;如果标记变量信息对应的是非容器编译环境,则通过启动函数在物理机编译环境下编译目标任务即可。
S308、标记变量信息为第一标记变量?若是,则执行S309;若否,则执行S310。
S309、通过启动函数启动目标容器,并在目标容器中编译目标任务。
S310、通过启动函数在非容器编译环境中编译目标任务。
S311、在目标任务编译完成时,根据标记变量信息和流水线任务的封装逻辑调用删除函数。
本实施例中,通过删除函数(DockerCallWrapper.down)可以删除目标容器,清除目标任务的编译环境。具体的,在Jenkins Job运行完毕(可能是编译成功,也可能是编译失败)时,调用DockerCallWrapper.down函数来删除针对此Job而生成的目标容器的实例,避免其占用不必要的硬盘空间。
S312、通过删除函数删除目标容器,或者。
在一个实施例中,如果是在目标容器中编译目标任务,则通过删除函数删除针对目标任务而生成的目标容器的实例;如果是在非容器编译环境中编译目标任务,则删除函数可不执行任何操作。在此基础上可以清除编译环境。
图5为本公开实施例三提供的一种任务编译过程的示意图。如图5所示,通过在流水线任务的配置的基础上加载Wrapper逻辑,实现在相应编译环境中编译目标任务的过程包括:
确定env文件所传递的环境变量,其中包括标记变量信息,根据标记变量信息可以通过启动函数进入相应的编译环境。
如果标记变量为第一标记变量,则可以读取模板配置文件的内容,并确定目标任务的任务名称、执行编号等,填入模板配置文件;然后根据启动函数的入参替换模板配置文件中的占位符,得到临时配置文件;将临时配置文件中的时间占位符替换为网络节点当前的时间戳,生成真实的目标任务的配置文件,其中包括了编译目标任务应执行的具体逻辑和命令等;在env文件的环境变量准备就绪后,通过启动(Call)函数创建并运行目标容器,包括从节点服务容器(有容器服务端提供)以及编译容器(Docker容器,由容器构建器提供),在此基础上,基于Wrapper逻辑可在目标容器中编译目标任务;编译完成后,通过删除(Down)函数停止并删除目标容器,至此,完成在目标容器中对目标任务的编译。
如果标记变量为第二标记变量,则通过启动函数直接在物理机编译中运行源Shell脚本命令、对目标任务进行编译即可,这种情况下,删除函数可不执行任何操作。
本公开实施例三提供的一种任务编译方法,通过配置模板配置文件,根据模板配置文件以及启动函数的入参生成目标任务的配置文件,并确定标记变量信息,据此调用启动函数进入相应的编译环境,为目标任务的执行提供完整的逻辑,自动在相应编译环境中执行目标任务,提高任务执行效率以及灵活性。
实施例四
图6为本公开实施例四提供的一种任务编译装置的结构示意图,该装置可适用于对远程通话中的键盘声进行抑制的情况,具体的,用于对键盘声的目标帧进行分级抑制,以提高远程通话质量的情况,其中该装置可由软件和/或硬件实现,并一般集成在网络节点上。
如图6所示,该装置包括:任务接收模块410、调用模块420以及编译模块430;其中,
任务接收模块410,用于接收主节点派发的目标任务;
调用模块420,用于据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;
编译模块430,用于根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
在本实施例中,该装置首先通过任务接收模块410接收主节点派发的目标任务;然后通过调用模块420根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;最后通过编译模块430根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
本实施例提供了一种任务编译装置,根据封装逻辑和标记变量信息,能够启动相应的编译环境并编译目标任务,无需针对不同的编译环境分别配置目标任务的运行逻辑,从而提高流水线任务逻辑对不同编译环境的适用性和运行的灵活性。
在上述具体化的基础上,该装置还包括:
加载模块,用于在根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数之前,在托管在代码仓库中的流水线任务的配置中加载封装逻辑,以提供编译过程的启动函数;
其中,所述封装逻辑封装于基于Groovy语言的逻辑配置文件中,所述逻辑配置文件与所述流水线任务的配置位于所述代码仓库的相同层级目录下。
在上述具体化的基础上,所述目标任务的标记变量信息包括对应于目标容器的第一标记变量以及对应于非容器编译环境的第二标记信息。
在上述具体化的基础上,根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务,具体化为:
若所述标记变量信息为第一标记变量,则通过所述启动函数启动目标容器,并在所述目标容器中编译所述目标任务;
若所述标记变量信息为第二标记信息,则通过所述启动函数在非容器编译环境中编译所述目标任务。
在上述具体化的基础上,该装置还包括:
模板配置模块,用于在根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数之前,在托管在代码仓库中的流水线任务的配置的相同层级目录下配置模板配置文件,所述模板配置文件包括默认占位符。
在上述具体化的基础上,根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数,具体化为:
读取所述模板配置文件,并根据所述启动函数的入参替换所述模板配置文件中的默认占位符;
根据替换默认占位符后的模板配置文件生成所述目标任务的配置文件;
根据环境变量配置文件确定所述标记变量信息;
基于所述目标任务的配置文件和所述标记变量信息,调用所述启动函数。
在上述具体化的基础上,述启动函数的入参包括:
所述模板配置文件的路径,所述目标任务的配置文件的名称,所述目标任务的具体执行指令或脚本文件路径的参数的占位符,以及所述目标任务的标记变量信息的键值。
在上述具体化的基础上,根据环境变量配置文件确定所述标记变量信息,具体化为:
读取环境变量配置文件中传递的所述目标任务的环境变量,所述环境变量包括所述标记变量信息。
在上述具体化的基础上,该装置还包括:
删除模块,用于在所述目标任务编译完成时,根据所述标记变量信息和所述流水线任务的封装逻辑调用删除函数;
通过所述删除函数删除所述目标容器,或者清除所述目标任务的编译环境。
上述任务编译装置可执行本公开任意实施例所提供的任务编译方法,具备执行方法相应的功能模块和有益效果。
实施例五
图7为本公开实施例五提供的一种任务编译***的结构示意图。如图7所示,该任务编译***包括主节点510以及至少一个网络节点520,图7中以一个网络节点520为例。主节点510向各网络节点520派发目标任务。
本实施例中,网络节点520接收主节点510派发的目标任务,并根据流水线任务的封装逻辑,确定目标任务的标记变量信息并调用启动函数;根据标记变量信息,通过启动函数在目标容器中或非容器编译环境中编译目标任务。网络节点520根据封装逻辑和标记变量信息,能够启动相应的编译环境并编译目标任务,因此,无需针对不同的编译环境分别配置目标任务的运行逻辑,从而提高流水线任务逻辑对不同编译环境的适用性和运行的灵活性
本实施例中,网络节点520可以是基于Mac、Linux或Window操作***等,不同类型的网络节点520对应的标记变量信息不同,根据标记变量信息,可以确定是在目标容器中编译目标任务,或是在非容器编译环境中编译目标任务。
在一个实施例中,该任务编译***还包括代码仓库服务器,用于提供代码仓库,流水线任务的配置可托管在代码仓库中,并且在所述流水线任务的配置的相同层级目录下,还包括封装逻辑的逻辑配置文件,通过在托管在代码仓库中的流水线任务的配置中加载封装逻辑,可以提供编译过程的启动函数以及删除函数。
本实施例中的网络节点可执行本公开任意实施例所提供的任务编译方法,具备执行方法相应的功能模块和有益效果。
实施例六
图8为本公开实施例六提供的一种网络节点的结构示意图。图8示出了适于用来实现本公开实施例的网络节点600的结构示意图。本公开实施例中的网络节点600可以包括但不限于诸如移动电话、笔记本电脑、数字广播接收器、个人数字助理(Personal DigitalAssistant,PDA)、平板电脑(Portable Android Device,PAD)、便携式多媒体播放器(Portable Media Player,PMP)、车载终端(例如车载导航终端)等等的移动终端以及诸如数字TV、台式计算机等等的固定终端。图8示出的网络节点600仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。
如图8所示,网络节点600可以包括一个或多个处理装置(例如中央处理器、图形处理器等)601,其可以根据存储在只读存储器(ROM)602中的程序或者从存储装置608加载到随机访问存储器(RAM)603中的程序而执行各种适当的动作和处理。一个或多个处理装置601实现如本公开提供的方法。在RAM603中,还存储有网络节点600操作所需的各种程序和数据。处理装置601、ROM 602以及RAM603通过总线605彼此相连。输入/输出(I/O)接口604也连接至总线605。
通常,以下装置可以连接至I/O接口604:包括例如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等的输入装置606;包括例如液晶显示器(LCD)、扬声器、振动器等的输出装置607;包括例如磁带、硬盘等的存储装置608,存储装置608用于存储一个或多个程序;以及通信装置609。通信装置609可以允许网络节点600与其他设备进行无线或有线通信以交换数据。虽然图8示出了具有各种装置的网络节点600,但是应理解的是,并不要求实施或具备所有示出的装置。可以替代地实施或具备更多或更少的装置。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信装置609从网络上被下载和安装,或者从存储装置608被安装,或者从ROM602被安装。在该计算机程序被处理装置601执行时,执行本公开实施例的方法中限定的上述功能。
需要说明的是,本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质包括但不限于电、磁、光、电磁、红外线、或半导体的***、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行***、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行***、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、RF(射频)等等,或者上述的任意合适的组合。
上述计算机可读介质可以是上述网络节点600中所包含的;也可以是单独存在,而未装配入该网络节点600中。
上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该网络节点执行时,使得该网络节点600:接收主节点派发的目标任务;根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
可以以一种或多种程序设计语言或其组合来编写用于执行本公开的操作的计算机程序代码,上述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本公开各种实施例的***、方法和计算机程序产品的可能实现的体系架构、功能和操作。流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的***来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定。
本文中以上描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、片上***(SOC)、复杂可编程逻辑设备(CPLD)等等。
在本公开的上下文中,机器可读介质可以是有形的介质,其可以包含或存储以供指令执行***、装置或设备使用或与指令执行***、装置或设备结合地使用的程序。机器可读介质可以是机器可读信号介质或机器可读储存介质。机器可读介质可以包括但不限于电子的、磁性的、光学的、电磁的、红外的、或半导体***、装置或设备,或者上述内容的任何合适组合。机器可读存储介质的更具体示例会包括基于一个或多个线的电气连接、便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM或快闪存储器)、光纤、便捷式紧凑盘只读存储器(CD-ROM)、光学储存设备、磁储存设备、或上述内容的任何合适组合。
根据本公开的一个或多个实施例,示例1提供了一种任务编译方法,包括:
接收主节点派发的目标任务;
根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;
根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
根据本公开的一个或多个实施例,示例2根据示例1所述的方法,
在根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数之前,还包括:
在托管在代码仓库中的流水线任务的配置中加载封装逻辑,以提供编译过程的启动函数;
其中,所述封装逻辑封装于基于Groovy语言的逻辑配置文件中,所述逻辑配置文件与所述流水线任务的配置位于所述代码仓库的相同层级目录下。
根据本公开的一个或多个实施例,示例3根据示例1所述的方法,
所述目标任务的标记变量信息包括对应于目标容器的第一标记变量以及对应于非容器编译环境的第二标记信息。
根据本公开的一个或多个实施例,示例4根据示例3所述的方法,
根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务,包括:
若所述标记变量信息为第一标记变量,则通过所述启动函数启动目标容器,并在所述目标容器中编译所述目标任务;
若所述标记变量信息为第二标记信息,则通过所述启动函数在非容器编译环境中编译所述目标任务。
根据本公开的一个或多个实施例,示例5根据示例1所述的方法,
在根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数之前,还包括:
在托管在代码仓库中的流水线任务的配置的相同层级目录下配置模板配置文件,所述模板配置文件包括默认占位符。
根据本公开的一个或多个实施例,示例6根据示例5所述的方法,
根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数,包括:
读取所述模板配置文件,并根据所述启动函数的入参替换所述模板配置文件中的默认占位符;
根据替换默认占位符后的模板配置文件生成所述目标任务的配置文件;
根据环境变量配置文件确定所述标记变量信息;
基于所述目标任务的配置文件和所述标记变量信息,调用所述启动函数。
根据本公开的一个或多个实施例,示例7根据示例6所述的方法,
所述启动函数的入参包括:
所述模板配置文件的路径,所述目标任务的配置文件的名称,所述目标任务的具体执行指令或脚本文件路径的参数的占位符,以及所述目标任务的标记变量信息的键值。
根据本公开的一个或多个实施例,示例8根据示例6所述的方法,
根据环境变量配置文件确定所述标记变量信息,包括:
读取环境变量配置文件中传递的所述目标任务的环境变量,所述环境变量包括所述标记变量信息。
根据本公开的一个或多个实施例,示例9根据示例1-8任一项所述的方法,
还包括:
在所述目标任务编译完成时,根据所述标记变量信息和所述流水线任务的封装逻辑调用删除函数;
通过所述删除函数删除所述目标容器,或者清除所述目标任务的编译环境。
根据本公开的一个或多个实施例,示例10提供了一种任务编译装置,包括:
任务接收模块,用于接收主节点派发的目标任务;
调用模块,用于据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;
编译模块,用于根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
根据本公开的一个或多个实施例,示例11提供了一种网络节点,包括:
一个或多个处理装置;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理装置执行,使得所述一个或多个处理装置实现如示例1-9中任一所述的方法。
根据本公开的一个或多个实施例,示例12提供了一种任务编译***,包括:主节点以及至少一个如示例11所述的网络节点;
所述主节点向各所述网络节点派发目标任务。
根据本公开的一个或多个实施例,示例13提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理装置执行时实现如示例1-9中任一所述的方法。
以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。

Claims (13)

1.一种任务编译方法,其特征在于,包括:
接收主节点派发的目标任务;
根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;
根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
2.根据权利要求1所述的方法,其特征在于,在根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数之前,还包括:
在托管在代码仓库中的流水线任务的配置中加载封装逻辑,以提供编译过程的启动函数;
其中,所述封装逻辑封装于基于Groovy语言的逻辑配置文件中,所述逻辑配置文件与所述流水线任务的配置位于所述代码仓库的相同层级目录下。
3.根据权利要求1所述的方法,其特征在于,所述目标任务的标记变量信息包括对应于目标容器的第一标记变量以及对应于非容器编译环境的第二标记信息。
4.根据权利要求3所述的方法,其特征在于,根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务,包括:
若所述标记变量信息为第一标记变量,则通过所述启动函数启动目标容器,并在所述目标容器中编译所述目标任务;
若所述标记变量信息为第二标记信息,则通过所述启动函数在非容器编译环境中编译所述目标任务。
5.根据权利要求1所述的方法,其特征在于,在根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数之前,还包括:
在托管在代码仓库中的流水线任务的配置的相同层级目录下配置模板配置文件,所述模板配置文件包括默认占位符。
6.根据权利要求5所述的方法,其特征在于,根据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数,包括:
读取所述模板配置文件,并根据所述启动函数的入参替换所述模板配置文件中的默认占位符;
根据替换默认占位符后的模板配置文件生成所述目标任务的配置文件;
根据环境变量配置文件确定所述标记变量信息;
基于所述目标任务的配置文件和所述标记变量信息,调用所述启动函数。
7.根据权利要求6所述的方法,其特征在于,所述启动函数的入参包括:
所述模板配置文件的路径,所述目标任务的配置文件的名称,所述目标任务的具体执行指令或脚本文件路径的参数的占位符,以及所述目标任务的标记变量信息的键值。
8.根据权利要求6所述的方法,其特征在于,根据环境变量配置文件确定所述标记变量信息,包括:
读取环境变量配置文件中传递的所述目标任务的环境变量,所述环境变量包括所述标记变量信息。
9.根据权利要求1-8任一项所述的方法,其特征在于,还包括:
在所述目标任务编译完成时,根据所述标记变量信息和所述流水线任务的封装逻辑调用删除函数;
通过所述删除函数删除所述目标容器,或者清除所述目标任务的编译环境。
10.一种任务编译装置,其特征在于,包括:
任务接收模块,用于接收主节点派发的目标任务;
调用模块,用于据流水线任务的封装逻辑,确定所述目标任务的标记变量信息并调用启动函数;
编译模块,用于根据所述标记变量信息,通过所述启动函数在目标容器中或非容器编译环境中编译所述目标任务。
11.一种网络节点,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-9中任一所述的任务编译方法。
12.一种任务编译***,其特征在于,包括:主节点以及至少一个如权利要求11所述的网络节点;
所述主节点向各所述网络节点派发目标任务。
13.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-9中任一所述的任务编译方法。
CN202011340140.5A 2020-11-25 2020-11-25 任务编译方法、装置、网络节点、***及存储介质 Active CN112463123B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011340140.5A CN112463123B (zh) 2020-11-25 2020-11-25 任务编译方法、装置、网络节点、***及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011340140.5A CN112463123B (zh) 2020-11-25 2020-11-25 任务编译方法、装置、网络节点、***及存储介质

Publications (2)

Publication Number Publication Date
CN112463123A true CN112463123A (zh) 2021-03-09
CN112463123B CN112463123B (zh) 2023-07-14

Family

ID=74808131

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011340140.5A Active CN112463123B (zh) 2020-11-25 2020-11-25 任务编译方法、装置、网络节点、***及存储介质

Country Status (1)

Country Link
CN (1) CN112463123B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113391814A (zh) * 2021-06-02 2021-09-14 中电金信软件有限公司 任务处理方法、装置、***及存储介质
CN113568755A (zh) * 2021-08-04 2021-10-29 上海易景信息科技有限公司 一种分布式编译***及分布式编译方法
CN113608744A (zh) * 2021-08-04 2021-11-05 上海易景信息科技有限公司 一种用于执行分布式编译的环境构建单元的建立方法及分布式编译***
CN113721917A (zh) * 2021-08-03 2021-11-30 北京科东电力控制***有限责任公司 基于国产芯片的电网调度控制***自动编译方法及装置
CN116541018A (zh) * 2023-06-19 2023-08-04 之江实验室 一种分布式模型编译***、方法、装置、介质及设备

Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9569180B1 (en) * 2015-10-29 2017-02-14 International Business Machines Corporation Application development in cloud based environment
CN106559438A (zh) * 2015-09-24 2017-04-05 阿里巴巴集团控股有限公司 一种基于目标网络平台的程序上传方法和装置
CN107153540A (zh) * 2017-04-19 2017-09-12 畅捷通信息技术股份有限公司 增量构建方法及装置
CN108027740A (zh) * 2015-09-24 2018-05-11 慧与发展有限责任合伙企业 进程和线程启动特征
US20180276020A1 (en) * 2017-03-24 2018-09-27 Fuji Xerox Co., Ltd. Information processing system and virtual machine
CN109508178A (zh) * 2018-09-27 2019-03-22 咪咕文化科技有限公司 一种程序开发方法及装置
CN110333872A (zh) * 2019-07-09 2019-10-15 广州虎牙科技有限公司 一种应用的处理方法、装置、设备和介质
CN110489126A (zh) * 2019-08-08 2019-11-22 腾讯科技(深圳)有限公司 编译任务的执行方法和装置、存储介质及电子装置
CN110515625A (zh) * 2019-08-02 2019-11-29 苏州浪潮智能科技有限公司 任务构建方法、装置、设备及计算机可读存储介质
CN110554876A (zh) * 2018-05-31 2019-12-10 北京京东尚科信息技术有限公司 用于编译安卓工程的方法和装置
CN111221541A (zh) * 2019-12-26 2020-06-02 曙光信息产业(北京)有限公司 集群并行程序部署方法以及装置
CN111506657A (zh) * 2020-04-17 2020-08-07 腾讯科技(深圳)有限公司 一种区块链节点设备部署的方法
CN111552508A (zh) * 2020-04-29 2020-08-18 杭州数梦工场科技有限公司 应用程序版本构建方法、装置、电子设备
CN111984294A (zh) * 2020-08-20 2020-11-24 中国银行股份有限公司 基于Groovy动态加载技术的业务***更新方法及装置

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106559438A (zh) * 2015-09-24 2017-04-05 阿里巴巴集团控股有限公司 一种基于目标网络平台的程序上传方法和装置
CN108027740A (zh) * 2015-09-24 2018-05-11 慧与发展有限责任合伙企业 进程和线程启动特征
US9569180B1 (en) * 2015-10-29 2017-02-14 International Business Machines Corporation Application development in cloud based environment
US20180276020A1 (en) * 2017-03-24 2018-09-27 Fuji Xerox Co., Ltd. Information processing system and virtual machine
CN107153540A (zh) * 2017-04-19 2017-09-12 畅捷通信息技术股份有限公司 增量构建方法及装置
CN110554876A (zh) * 2018-05-31 2019-12-10 北京京东尚科信息技术有限公司 用于编译安卓工程的方法和装置
CN109508178A (zh) * 2018-09-27 2019-03-22 咪咕文化科技有限公司 一种程序开发方法及装置
CN110333872A (zh) * 2019-07-09 2019-10-15 广州虎牙科技有限公司 一种应用的处理方法、装置、设备和介质
CN110515625A (zh) * 2019-08-02 2019-11-29 苏州浪潮智能科技有限公司 任务构建方法、装置、设备及计算机可读存储介质
CN110489126A (zh) * 2019-08-08 2019-11-22 腾讯科技(深圳)有限公司 编译任务的执行方法和装置、存储介质及电子装置
CN111221541A (zh) * 2019-12-26 2020-06-02 曙光信息产业(北京)有限公司 集群并行程序部署方法以及装置
CN111506657A (zh) * 2020-04-17 2020-08-07 腾讯科技(深圳)有限公司 一种区块链节点设备部署的方法
CN111552508A (zh) * 2020-04-29 2020-08-18 杭州数梦工场科技有限公司 应用程序版本构建方法、装置、电子设备
CN111984294A (zh) * 2020-08-20 2020-11-24 中国银行股份有限公司 基于Groovy动态加载技术的业务***更新方法及装置

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
周跃: "面向自动化生产线的控制终端设计", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 01, pages 140 - 866 *
蒙毅为: "微服务应用交付***的设计与实现", 《中国优秀硕士学位论文全文数据库 信息科技辑》, no. 05, pages 138 - 780 *
飞雪无情: "Android Gradle 入门", pages 1 - 16, Retrieved from the Internet <URL:《https://cloud.tencent.com/developer/article/1196565》> *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113391814A (zh) * 2021-06-02 2021-09-14 中电金信软件有限公司 任务处理方法、装置、***及存储介质
CN113721917A (zh) * 2021-08-03 2021-11-30 北京科东电力控制***有限责任公司 基于国产芯片的电网调度控制***自动编译方法及装置
CN113568755A (zh) * 2021-08-04 2021-10-29 上海易景信息科技有限公司 一种分布式编译***及分布式编译方法
CN113608744A (zh) * 2021-08-04 2021-11-05 上海易景信息科技有限公司 一种用于执行分布式编译的环境构建单元的建立方法及分布式编译***
CN113568755B (zh) * 2021-08-04 2023-11-17 上海易景信息科技有限公司 一种分布式编译***及分布式编译方法
CN113608744B (zh) * 2021-08-04 2024-02-23 上海易景信息科技有限公司 一种用于执行分布式编译的环境构建单元的建立方法及分布式编译***
CN116541018A (zh) * 2023-06-19 2023-08-04 之江实验室 一种分布式模型编译***、方法、装置、介质及设备
CN116541018B (zh) * 2023-06-19 2023-09-15 之江实验室 一种分布式模型编译***、方法、装置、介质及设备
US11934887B1 (en) 2023-06-19 2024-03-19 Zhejiang Lab Distributed model compilation

Also Published As

Publication number Publication date
CN112463123B (zh) 2023-07-14

Similar Documents

Publication Publication Date Title
CN112463123B (zh) 任务编译方法、装置、网络节点、***及存储介质
CN110673853B (zh) 一种编译方法、装置及***
CN114077462A (zh) 软件操作***调用Android HIDL接口的方法、装置、设备及介质
CN105242962A (zh) 基于异构众核的轻量级线程快速触发方法
CN111796860A (zh) 微前端方案实现方法及装置
CN111651219A (zh) 一种多模块项目配置文件管理的方法及设备
CN114168111A (zh) 组件化路由实现方法、设备、产品及存储介质
CN110659104B (zh) 一种业务监控方法及相关设备
CN110221840B (zh) 应用程序的功能实现方法及装置、设备及存储介质
CN109343970B (zh) 基于应用程序的操作方法、装置、电子设备及计算机介质
CN111414152B (zh) 业务逻辑的实现方法、***、可读介质和电子设备
CN112835587A (zh) 一种编译集成方法及装置
CN110955415A (zh) 一种投影多平台服务适配的方法
CN116382713A (zh) 构建应用镜像的方法、***、设备和存储介质
CN111796865B (zh) 一种字节码文件修改方法、装置、终端设备及介质
CN113448585B (zh) 一种线程池的编译方法、装置、电子设备和存储介质
CN114791884A (zh) 测试环境的构建方法、装置、存储介质及电子设备
CN114510334A (zh) 类实例的调用方法、装置、电子设备及自动驾驶车辆
CN114547604A (zh) 一种应用检测方法、装置、存储介质及电子设备
CN112612460A (zh) 接口的封装和调用方法、电子设备、及存储介质
CN114296742B (zh) 安装包创建方法、装置、设备及介质
CN113553040B (zh) 可见即可说识别功能的注册实现方法、装置、设备及介质
CN117170738B (zh) Python与Fortran互调用的方法、***、设备及存储介质
US20230359440A1 (en) Externally-initiated runtime type extension
CN109933334B (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