CN110213333A - 任务处理方法、装置、电子设备和计算机可读介质 - Google Patents
任务处理方法、装置、电子设备和计算机可读介质 Download PDFInfo
- Publication number
- CN110213333A CN110213333A CN201910364253.XA CN201910364253A CN110213333A CN 110213333 A CN110213333 A CN 110213333A CN 201910364253 A CN201910364253 A CN 201910364253A CN 110213333 A CN110213333 A CN 110213333A
- Authority
- CN
- China
- Prior art keywords
- task
- actuator
- stage
- data
- phase
- 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
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/06—Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer And Data Communications (AREA)
- Stored Programmes (AREA)
Abstract
本申请实施例公开了任务处理方法、装置、电子设备和计算机可读介质。该方法的实施例包括:接收包含多个任务阶段的代码集成任务;确定该代码集成任务中的第一任务阶段和第二任务阶段,其中,该第二任务阶段依赖该第一任务阶段产生的数据;通过代码持续集成工具分配第一执行器,使该第一执行器执行该第一任务阶段中的任务并构建文件服务器以存储该数据;通过代码持续集成工具分配第二执行器,使该第二执行器从该文件服务器中下载该数据,并基于该数据执行该第二任务阶段中的任务。该实施方式提高了代码集成任务的处理效率。
Description
技术领域
本申请实施例涉及计算机技术领域,具体涉及任务处理方法、装置、电子设备和计算机可读介质。
背景技术
持续集成(Continuous integration,CI)是一种软件开发实践,即团队中每个开发成员每天至少进行一次代码集成任务。通常,可以在服务器中安装代码持续集成工具(例如GitLab CI),以进行代码持续集成。其中,上述代码持续集成工具可以管理多个执行器(GitLab CI Runner),上述服务器可称为GitLab服务器。
在通过上述代码持续集成工具执行每一次代码集成任务的过程中,现有的任务处理流程,通常是代码持续集成工具所管理的执行器(GitLabCI Runner)每执行完一个任务(job)后,将执行该任务时所产生的数据(例如artifacts)上传到GitLab服务器。在后续任务执行过程中,若需使用该数据,则需要执行后续任务的执行器从GitLab服务器中下载。因而,这种方式需要在代码集成任务处理过程中进行多次网络传输,导致代码集成任务的处理效率较低。
发明内容
本申请实施例提出了任务处理方法、装置、电子设备和计算机可读介质,以解决现有技术中代码集成任务的处理效率较低的技术问题。
第一方面,本申请实施例提供了一种任务处理方法,应用于安装有代码持续集成工具的服务器,代码持续集成工具管理有多个用于执行任务的执行器,该方法包括:接收包含多个任务阶段的代码集成任务;确定代码集成任务中的第一任务阶段和第二任务阶段,其中,第二任务阶段依赖第一任务阶段产生的数据;通过代码持续集成工具分配第一执行器,使第一执行器执行第一任务阶段中的任务并构建文件服务器以存储数据;通过代码持续集成工具分配第二执行器,使第二执行器从文件服务器中下载数据,并基于数据执行第二任务阶段中的任务。
在一些实施例中,在通过代码持续集成工具分配第二执行器,使第二执行器从文件服务器中下载数据,并基于数据执行第二任务阶段中的任务之后,该方法还包括:确定第二任务阶段中的任务是否执行完毕;若是,设定第一执行器的工作状态为空闲状态。
在一些实施例中,确定代码集成任务中的第一任务阶段和第二任务阶段,包括:确定代码集成任务中的任务阶段之间的依赖关系;对于代码集成任务中的每个任务阶段,执行如下步骤:基于依赖关系,确定该任务阶段是否产生代码集成任务中的其余至少一个任务阶段所依赖的数据;若是,将该任务阶段确定为第一任务阶段,并将依赖第一任务阶段所产生的数据的任务阶段确定为第二任务阶段。
在一些实施例中,第一任务阶段包含至少一个任务;以及通过代码持续集成工具分配第一执行器,使第一执行器执行第一任务阶段中的任务并构建文件服务器以存储数据,包括:随机从多个执行器中选取空闲状态的执行器,作为第一执行器;使第一执行器执行如下步骤:创建容器以运行第一任务阶段中的各任务;并行执行第一任务阶段中的各任务;将容器作为文件服务器;将第一任务阶段所产生的数据存储至文件服务器;设定第一执行器的使用状态为非空闲状态。
在一些实施例中,第二任务阶段包含至少一个任务;以及通过代码持续集成工具分配第二执行器,使第二执行器从文件服务器中下载数据,并基于数据执行第二任务阶段中的任务,包括:随机从多个执行器中选取空闲状态的执行器,作为第二执行器;使第二执行器执行如下步骤:通过远程文件拷贝命令,从文件服务器中下载数据;基于数据,并行执行第二任务阶段中的各任务。
第二方面,本申请实施例提供了一种任务处理装置,应用于安装有代码持续集成工具的服务器,代码持续集成工具管理有多个用于执行任务的执行器,该装置包括:接收单元,被配置成接收包含多个任务阶段的代码集成任务;第一确定单元,被配置成确定代码集成任务中的第一任务阶段和第二任务阶段,其中,第二任务阶段依赖第一任务阶段产生的数据;第一执行单元,被配置成通过代码持续集成工具分配第一执行器,使第一执行器执行第一任务阶段中的任务并构建文件服务器以存储数据;第二执行单元,被配置成通过代码持续集成工具分配第二执行器,使第二执行器从文件服务器中下载数据,并基于数据执行第二任务阶段中的任务。
在一些实施例中,该装置还包括:第二确定单元,被配置成确定第二任务阶段中的任务是否执行完毕;设定单元,被配置成若是,设定第一执行器的工作状态为空闲状态。
在一些实施例中,第一确定单元,包括:第一确定模块,被配置成确定代码集成任务中的任务阶段之间的依赖关系;第二确定模块,被配置成对于代码集成任务中的每个任务阶段,执行如下步骤:基于依赖关系,确定该任务阶段是否产生代码集成任务中的其余至少一个任务阶段所依赖的数据;若是,将该任务阶段确定为第一任务阶段,并将依赖第一任务阶段所产生的数据的任务阶段确定为第二任务阶段。
在一些实施例中,第一执行器运行于容器中,第一任务阶段包含至少一个任务;以及第一执行单元,包括:第一选取模块,被配置成随机从多个执行器中选取空闲状态的执行器,作为第一执行器;第一执行模块,被配置成使第一执行器执行如下步骤:创建容器以运行第一任务阶段中的各任务;并行执行第一任务阶段中的各任务;将容器作为文件服务器;将第一任务阶段所产生的数据存储至文件服务器;设定模块,被配置成设定第一执行器的使用状态为非空闲状态。
在一些实施例中,第二任务阶段包含至少一个任务;以及第二执行单元,包括:第二选取模块,被配置成随机从多个执行器中选取空闲状态的执行器,作为第二执行器;第二执行模块,被配置成使第二执行器执行如下步骤:通过远程文件拷贝命令,从文件服务器中下载数据;基于数据,并行执行第二任务阶段中的各任务。
第三方面,本申请实施例提供了一种服务器,包括:一个或多个处理器;存储装置,其上存储有一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如上述第一方面中任一实施例的方法。
第四方面,本申请实施例提供了一种计算机可读介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面中任一实施例的方法。
本申请实施例提供的任务处理方法、装置、电子设备和计算机可读介质,通过接收包含多个任务阶段的代码集成任务,可以确定出代码集成任务中的第一任务阶段和第二任务阶段。其中,第二任务阶段依赖第一任务阶段产生的数据。而后,通过代码持续集成工具分配第一执行器,从而使第一执行器执行第一任务阶段中的任务并构建文件服务器以存储数据。之后,通过代码持续集成工具分配第二执行器,从而使第二执行器从文件服务器中下载数据,并基于数据执行第二任务阶段中的任务。由此,在第二任务阶段依赖第一任务阶段产生的数据的情况下,直接从第一执行器所构建的文件服务器下载该数据进行第二任务阶段中的任务处理,不需要第一执行器向服务器上传第一任务阶段产生的各项数据,从而节省了网络传输次数,提高了代码集成任务的处理效率。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请可以应用于其中的示例性系统架构图;
图2是根据本申请的任务处理方法的一个实施例的流程图;
图3是根据本申请的任务处理方法的又一个实施例的流程图;
图4是根据本申请的任务处理装置的一个实施例的结构示意图;
图5是适于用来实现本申请实施例的服务器的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的任务处理方法或任务处理装置的示例性系统架构100。
如图1所示,系统架构100可以包括服务器101,网络102和服务器、103、104、105。网络102用以在服务器101和服务器103、104、105之间提供通信链路的介质。网络102可以包括各种连接类型,例如有线、无线通信链路或者光纤电缆等等。
服务器101可以是可以安装有代码持续集成工具(例如GitLab CI)的GitLab服务器。上述代码持续集成工具能够进行代码持续集成操作。服务器101可以通过上述代码持续集成工具执行代码集成任务。其中,每一个代码集成任务可以包括多个任务阶段。上述代码持续集成工具管理有多个用于执行任务的执行器(例如GitLab CI Runner)。可以通过不同的执行器执行各任务阶段中的任务。
服务器103、104、105可以是运行有执行器的任务执行服务器。此处,一个任务执行服务器中可以运行有一个或多个执行器。实践中,任务执行服务器中可以构建容器(例如Docker容器),此时,执行器可以运行于容器中。实践中,Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。
需要说明的是,执行器还可以创建容器以运行任务。在执行完该容器中所运行的任务后,则可以将所创建的该容器销毁。
需要指出的是,执行器也可以运行于服务器101中(此时,上述系统架构100可以不包括上述服务器103、104、105和上述网络102)。或者,部分执行器运行于服务器101中,部分执行器运行于服务器103、104、105中。
需要说明的是,上述各服务器可以是硬件,也可以是软件。当服务器为硬件时,可以实现成多个服务器组成的分布式服务器集群,也可以实现成单个服务器。当服务器为软件时,可以实现成多个软件或软件模块(例如用来提供分布式服务),也可以实现成单个软件或软件模块。在此不做具体限定。
需要说明的是,本申请实施例所提供的任务处理方法一般由服务器101执行,相应地,任务处理装置一般设置于服务器101中。
应该理解,图1中的终端设备、网络和服务器的数目仅仅是示意性的。根据实现需要,可以具有任意数目的网络和服务器。
请参考图2,其示出了根据本申请的任务处理方法的一个实施例的流程200。该任务处理方法可以应用于安装有代码持续集成工具(例如GitLab CI)的服务器。上述代码持续集成工具管理有多个用于执行任务的执行器(GitLab CI Runner),该方法包括以下步骤:
步骤201,接收包含多个任务阶段的代码集成任务。
在本实施例中,任务处理方法的执行主体(即图1所示的服务器101,例如GitLab服务器)可以接收代码集成任务(在上述GitLab CI中可称为Pipeline)。其中,上述代码集成任务可以包含多个任务阶段(在上述GitLabCI中可称为stages)。此处,上述多个任务阶段可以包括但不限于编译、测试、交付、部署。实践中,各任务阶段(stage)按顺序执行,即当一个任务阶段中的任务执行完成后,将开始下一个任务阶段中的任务。各任务阶段可以包括一个或多个任务(job)。
需要说明的是,由于持续集成是一种软件开发实践,即团队中每个开发成员每天至少进行一次代码集成任务,因此,在持续集成过程中会处理多次代码集成任务。每一次代码集成任务,均可以采用本实施例所描述的流程进行操作。
步骤202,确定代码集成任务中的第一任务阶段和第二任务阶段。
在本实施例中,上述执行主体可以对上述代码集成任务中的各任务阶段所依赖的数据(例如上述GitLab CI中的artifacts等数据)的来源进行分析。当确定出某一任务阶段需要依赖另一任务阶段所产生的数据时,即可将上述某一任务阶段作为第一任务阶段,将上述另一任务阶段作为第二任务阶段。由此,可以确定出上述代码集成任务中的第一任务阶段和第二任务阶段,且可知第二任务阶段依赖第一任务阶段产生的数据。
在本实施例的一些可选的实现方式中,上述执行主体可以通过如下步骤确定上述代码集成任务中的第一任务阶段和第二任务阶段:
第一步,确定上述代码集成任务中的任务阶段之间的依赖关系。具体地,对于某一个任务阶段,若该任务阶段不依赖其他任务阶段所产生的数据,则可以确定该任务阶段与其他任务阶段不存在依赖关系。若该任务阶段依赖另一个任务阶段产生的数据,则可以认为该任务阶段对于上述另一个任务阶段存在依赖关系。
作为示例,上述代码集成任务包括编译任务阶段(可称为stage A)、测试任务阶段(可称为stage B)和部署任务阶段(可称为stage C)。若stage B和stage C均依赖于stageA所产生的数据,则stage B和stage C均对于stage A具有依赖关系。实践中,可以将用于表征该依赖关系的信息(例如图像、文本等形式的信息)存储至上述执行主体的内存中,以便于查询和读取。
第二步,对于上述代码集成任务中的每个任务阶段,基于上述依赖关系,确定该任务阶段是否产生上述代码集成任务中的其余至少一个任务阶段所依赖的数据;若是,将该任务阶段确定为第一任务阶段,并将依赖上述第一任务阶段所产生的数据的任务阶段确定为第二任务阶段。
继续上述示例,由于stage A产生有stage B和stage C所依赖的数据,则可以将stage A确定为第一任务阶段,将stage B和stage C确定为第二任务阶段。
步骤203,通过代码持续集成工具分配第一执行器,使第一执行器执行第一任务阶段中的任务并构建文件服务器以存储数据。
在本实施例中,由于上述执行主体所安装的代码持续集成工具(例如GitLab CI)可以管理有多个用于执行任务的执行器(GitLab CI Runner),因此,上述执行主体可以针对不同任务阶段进行执行器的分配。此处,上述执行主体可以通过上述代码持续集成工具分配一个执行器,作为第一执行器,使第一执行器执行第一任务阶段中的任务。
此外,上述执行主体还可以使上述第一执行器构建文件服务器以存储在执行第一任务阶段中的任务的过程中所产生的数据。作为示例,由于执行器可以运行于服务器中(如图1所示的服务器103、104、105),因而,可以直接将第一执行器所运行的服务器作为文件服务器。作为又一示例,在执行第一任务阶段中的任务时,第一执行器可以通过创建一个容器(例如Docker容器)来运行该任务阶段中的任务。所述第一执行器可以并行执行该任务阶段中的各任务,并将所创建的容器作为文件服务器,在该容器中存储在执行第一任务阶段中的任务的过程中所产生的数据。
在本实施例的一些可选的实现方式中,上述第一任务阶段可以包含至少一个任务。上述执行主体可以执行如下步骤:
第一步,随机从上述多个执行器中选取空闲状态的执行器,作为第一执行器。
第二步,使上述第一执行器执行如下步骤:创建容器(例如Docker容器)以运行上述第一任务阶段中的各任务;并行执行上述第一任务阶段中的各任务;将上述容器作为文件服务器;将上述第一任务阶段所产生的数据存储至上述文件服务器;
第三步,设定上述第一执行器的使用状态为非空闲状态。由于执行器一旦退出(即处于空闲状态),则其在任务处理过程中所生成的数据即被删除,由此,将第一执行器的使用状态设定为非空闲状态,可以使第一执行器执行完第一任务阶段中的任务后不退出,以便为执行后续任务阶段提供数据支持。
步骤204,通过代码持续集成工具分配第二执行器,使第二执行器从文件服务器中下载数据,并基于数据执行第二任务阶段中的任务。
在本实施例中,上述执行主体可以通过上述代码持续集成工具分配一个执行器,作为第二执行器,使第二执行器从文件服务器中下载数据,并基于数据执行第二任务阶段中的任务。需要说明的是,执行器执行的具体操作(例如在满足某条件下执行的下载数据操作、在满足某条件下执行的退出操作、在满足某条件下执行的存储文件操作等)可以预先在配置文件(例如GitLab CI中的.gitlab-ci.yml文件)中进行配置。
在本实施例的一些可选的实现方式中,上述第二任务阶段可以包含至少一个任务。上述执行主体可以执行如下步骤:
第一步,随机从上述多个执行器中选取空闲状态的执行器,作为第二执行器。
第二步,使上述第二执行器执行如下步骤:通过远程文件拷贝命令(secure copy,SCP),从上述文件服务器中下载上述数据(即第一执行器在执行第一任务阶段中的任务的过程中所产生的数据);基于上述数据,并行执行上述第二任务阶段中的各任务。实践中,上述SCP命令为linux系统下基于SSH(Secure Shell,安全外壳协议)登陆进行的远程文件拷贝命令。通过执行该远程文件拷贝命令,可以从上述文件服务器中下载数据。
在本实施例的一些可选的实现方式中,在使上述第二执行器下载上述容器中的数据,并基于所下载的数据执行上述第二任务阶段中的任务之后,上述执行主体可以确定上述第二任务阶段中的任务是否执行完毕。若确定第二任务阶段中的任务已执行完毕,上述执行主体可以设定上述第一执行器的工作状态为空闲状态,以便上述第一执行器继续参与到其他代码集成任务中。
本申请的上述实施例提供的方法,通过接收包含多个任务阶段的代码集成任务,可以确定出上述代码集成任务中的第一任务阶段和第二任务阶段。其中,第二任务阶段依赖上述第一任务阶段产生的数据。而后,通过代码持续集成工具分配第一执行器,从而使上述第一执行器执行上述第一任务阶段中的任务并构建文件服务器以存储上述数据。之后,通过代码持续集成工具分配第二执行器,从而使上述第二执行器从上述文件服务器中下载上述数据,并基于上述数据执行上述第二任务阶段中的任务。由此,在第二任务阶段依赖上述第一任务阶段产生的数据的情况下,直接从第一执行器所构建的文件服务器下载该数据进行第二任务阶段中的任务处理,一方面,不需要第一执行器向服务器(例如GitLab服务器)上传第一任务阶段产生的各项数据,从而节省了网络传输次数,提高了代码集成任务的处理效率。另一方面,服务器(例如GitLab服务器)不需要存储该数据,可以节省服务器的存储空间。
进一步参考图3,其示出了任务处理方法的又一个实施例的流程300。该任务处理方法的流程300,包括以下步骤:
步骤301,接收包含多个任务阶段的代码集成任务。
在本实施例中,任务处理方法的执行主体(图1所示的服务器101,例如GitLab服务器)可以接收代码集成任务。其中,上述代码集成任务可以包含多个任务阶段。
需要说明的是,步骤301的操作与上述步骤201的操作基本相同,此处不再赘述。
步骤302,确定代码集成任务中的任务阶段之间的依赖关系。
在本实施例中,上述执行主体可以确定上述代码集成任务中的任务阶段之间的依赖关系。具体地,对于某一个任务阶段,若该任务阶段不依赖其他任务阶段所产生的数据,则可以确定该任务阶段与其他任务阶段不存在依赖关系。若该任务阶段依赖另一个任务阶段产生的数据,则可以认为该任务阶段对于上述另一个任务阶段存在依赖关系。
作为示例,上述代码集成任务包括编译任务阶段(可称为stage A)、测试任务阶段(可称为stage B)和部署任务阶段(可称为stage C)。若stage B和stage C均依赖于stageA所产生的数据,则stage B和stage C均对于stage A具有依赖关系。实践中,可以将用于表征该依赖关系的信息(例如图像、文本等形式的信息)存储至上述执行主体的内存中,以便于查询和读取。
步骤303,对于代码集成任务中的每个任务阶段,基于依赖关系,确定该任务阶段是否产生代码集成任务中的其余至少一个任务阶段所依赖的数据。
在本实施例中,对于上述代码集成任务中的每一个任务阶段,上述执行主体可以基于上述依赖关系,确定该任务阶段是否产生上述代码集成任务中的其余至少一个任务阶段所依赖的数据。若是,可以执行步骤304。
步骤304,若是,将该任务阶段确定为第一任务阶段,并将依赖第一任务阶段所产生的数据的任务阶段确定为第二任务阶段。
在本实施例中,响应于确定该任务阶段产生上述代码集成任务中的其余至少一个任务阶段所依赖的数据,上述执行主体可以将该任务阶段确定为第一任务阶段,并将依赖上述第一任务阶段所产生的数据的任务阶段确定为第二任务阶段。
继续上述示例,由于stage A产生有stage B和stage C所依赖的数据,则可以将stage A确定为第一任务阶段,将stage B和stage C确定为第二任务阶段。
步骤305,通过代码持续集成工具分配第一执行器,使第一执行器执行第一任务阶段中的任务并构建文件服务器以存储数据。
在本实施例中,由于上述执行主体所安装的代码持续集成工具(例如GitLab CI)可以管理有多个用于执行任务的执行器(GitLab CIRunner),因此,上述执行主体可以针对不同任务阶段进行执行器的分配。此处,上述执行主体可以随机从上述多个执行器中选取空闲状态的执行器,作为第一执行器。
在本实施例中,上述执行主体可以在随机从上述多个执行器中选取空闲状态的执行器,作为第一执行器,并使上述第一执行器执行如下步骤:创建容器(例如Docker容器)以运行上述第一任务阶段中的各任务;并行执行上述第一任务阶段中的各任务;将上述容器作为文件服务器;将上述第一任务阶段所产生的数据存储至上述文件服务器。
在本实施例中,上述执行主体还可以设定上述第一执行器的使用状态为非空闲状态。由于执行器一旦退出,则其在任务处理过程中所生成的数据即被删除,由此,可以设定第一执行器执行完第一任务阶段中的任务后不退出,以便为执行后续任务阶段提供数据支持。
步骤306,通过代码持续集成工具分配第二执行器,使第二执行器从文件服务器中下载数据,并基于数据执行第二任务阶段中的任务。
在本实施例中,上述执行主体可以随机从上述多个执行器中选取空闲状态的执行器,作为第二执行器,并使上述第二执行器执行如下步骤:通过远程文件拷贝命令,从上述文件服务器中下载上述数据(即第一执行器在执行第一任务阶段中的任务的过程中所产生的数据);而后,基于上述数据,并行执行上述第二任务阶段中的各任务。需要说明的是,第二执行器也可以通过创建容器的方式执行第二任务阶段中的各任务,此处不作赘述。
步骤307,确定第二任务阶段中的任务是否执行完毕。
在本实施例中,在使上述第二执行器下载上述容器中的数据,并基于所下载的数据执行上述第二任务阶段中的任务之后,上述执行主体可以确定上述第二任务阶段中的任务是否执行完毕。
步骤308,响应于确定第二任务阶段中的任务执行完毕,设定第一执行器的工作状态为空闲状态。
在本实施例中,上述执行主体若确定第二任务阶段中的任务已执行完毕,可以设定上述第一执行器的工作状态为空闲状态,以便上述第一执行器继续参与到其他代码集成任务中。
从图3中可以看出,本实施例中的任务处理方法的流程300涉及了设定第一执行器执行完第一任务阶段中的任务后不退出的步骤。由于执行器一旦退出,则其在任务处理过程中所生成的数据即被删除,由此,设定第一执行器执行完第一任务阶段中的任务后不退出,便于为执行后续任务阶段提供数据支持。此外,还涉及了在上述第二任务阶段中的任务执行完毕后设定上述第一执行器的工作状态为空闲状态的步骤,由此,便于上述第一执行器继续参与到其他代码集成任务中。
进一步参考图4,作为对上述各图所示方法的实现,本申请提供了一种任务处理装置的一个实施例,该装置实施例与图1所示的方法实施例相对应,该装置具体可以应用于安装有代码持续集成工具的服务器,上述代码持续集成工具管理有多个用于执行任务的执行器。
如图4所示,本实施例所述的任务处理装置400包括:接收单元401,被配置成接收包含多个任务阶段的代码集成任务;第一确定单元402,被配置成确定上述代码集成任务中的第一任务阶段和第二任务阶段,其中,上述第二任务阶段依赖上述第一任务阶段产生的数据;第一执行单元403,被配置成通过上述代码持续集成工具分配第一执行器,使上述第一执行器执行上述第一任务阶段中的任务并构建文件服务器以存储上述数据;第二执行单元404,被配置成通过上述代码持续集成工具分配第二执行器,使上述第二执行器从上述文件服务器中下载上述数据,并基于上述数据执行上述第二任务阶段中的任务。
在本实施例的一些可选的实现方式中,该装置还可以包括第二确定单元。其中,上述第二确定单元可以被配置成确定上述第二任务阶段中的任务是否执行完毕;设定单元,被配置成若是,设定上述第一执行器的工作状态为空闲状态。
在本实施例的一些可选的实现方式中,上述第一确定单元402可以包括:第一确定模块,被配置成确定上述代码集成任务中的任务阶段之间的依赖关系;第二确定模块,被配置成对于上述代码集成任务中的每个任务阶段,执行如下步骤:基于上述依赖关系,确定该任务阶段是否产生上述代码集成任务中的其余至少一个任务阶段所依赖的数据;若是,将该任务阶段确定为第一任务阶段,并将依赖上述第一任务阶段所产生的数据的任务阶段确定为第二任务阶段。
在本实施例的一些可选的实现方式中,上述第一任务阶段包含至少一个任务。上述第一执行单元403可以包括:第一选取模块,被配置成随机从上述多个执行器中选取空闲状态的执行器,作为第一执行器;第一执行模块,被配置成使上述第一执行器执行如下步骤:创建容器以运行上述第一任务阶段中的各任务;并行执行上述第一任务阶段中的各任务;将上述容器作为文件服务器;将上述第一任务阶段所产生的数据存储至上述文件服务器;设定模块,被配置成设定上述第一执行器的使用状态为非空闲状态。
在本实施例的一些可选的实现方式中,上述第二任务阶段可以包含至少一个任务。上述第二执行单元404可以包括:第二选取模块,被配置成随机从上述多个执行器中选取空闲状态的执行器,作为第二执行器;第二执行模块,被配置成使上述第二执行器执行如下步骤:通过远程文件拷贝命令,从上述文件服务器中下载上述数据;基于上述数据,并行执行上述第二任务阶段中的各任务。
本申请的上述实施例提供的装置,通过接收单元401接收包含多个任务阶段的代码集成任务,可以使第一确定单元402确定出上述代码集成任务中的第一任务阶段和第二任务阶段。其中,第二任务阶段依赖上述第一任务阶段产生的数据。而后,第一执行单元403通过代码持续集成工具分配第一执行器,从而使上述第一执行器执行上述第一任务阶段中的任务并构建文件服务器以存储上述数据。之后,第一执行单元403通过代码持续集成工具分配第二执行器,从而使上述第二执行器从上述文件服务器中下载上述数据,并基于上述数据执行上述第二任务阶段中的任务。由此,在第二任务阶段依赖上述第一任务阶段产生的数据的情况下,直接从第一执行器所构建的文件服务器下载该数据进行第二任务阶段中的任务处理,一方面,不需要第一执行器向服务器(例如GitLab服务器)上传第一任务阶段产生的各项数据,从而节省了网络传输次数,提高了代码集成任务的处理效率。另一方面,服务器(例如GitLab服务器)不需要存储该数据,可以节省服务器的存储空间。
下面参考图5,其示出了适于用来实现本申请实施例的服务器的计算机系统500的结构示意图。图5示出的服务器仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图5所示,计算机系统500包括中央处理单元(CPU)501,其可以根据存储在只读存储器(ROM)502中的程序或者从存储部分508加载到随机访问存储器(RAM)503中的程序而执行各种适当的动作和处理。在RAM 503中,还存储有系统500操作所需的各种程序和数据。CPU 501、ROM 502以及RAM 503通过总线504彼此相连。输入/输出(I/O)接口505也连接至总线504。
以下部件连接至I/O接口505:包括键盘、鼠标等的输入部分506;包括诸如液晶显示器(LCD)等以及扬声器等的输出部分507;包括硬盘等的存储部分508;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分509。通信部分509经由诸如因特网的网络执行通信处理。驱动器510也根据需要连接至I/O接口505。可拆卸介质511,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器510上,以便于从其上读出的计算机程序根据需要被安装入存储部分508。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分509从网络上被下载和安装,和/或从可拆卸介质511被安装。在该计算机程序被中央处理单元(CPU)501执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,其中,这些单元的名称在某种情况下并不构成对该单元本身的限定。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:接收包含多个任务阶段的代码集成任务;确定该代码集成任务中的第一任务阶段和第二任务阶段,其中,该第二任务阶段依赖该第一任务阶段产生的数据;通过代码持续集成工具分配第一执行器,使该第一执行器执行该第一任务阶段中的任务并构建文件服务器以存储该数据;通过代码持续集成工具分配第二执行器,使该第二执行器从该文件服务器中下载该数据,并基于该数据执行该第二任务阶段中的任务。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (12)
1.一种任务处理方法,其特征在于,应用于安装有代码持续集成工具的服务器,所述代码持续集成工具管理有多个用于执行任务的执行器,所述方法包括:
接收包含多个任务阶段的代码集成任务;
确定所述代码集成任务中的第一任务阶段和第二任务阶段,其中,所述第二任务阶段依赖所述第一任务阶段产生的数据;
通过所述代码持续集成工具分配第一执行器,使所述第一执行器执行所述第一任务阶段中的任务并构建文件服务器以存储所述数据;
通过所述代码持续集成工具分配第二执行器,使所述第二执行器从所述文件服务器中下载所述数据,并基于所述数据执行所述第二任务阶段中的任务。
2.根据权利要求1所述的任务处理方法,其特征在于,在所述使所述第二执行器从所述文件服务器中下载所述数据,并基于所述数据执行所述第二任务阶段中的任务之后,所述方法还包括:
确定所述第二任务阶段中的任务是否执行完毕;
若是,设定所述第一执行器的工作状态为空闲状态。
3.根据权利要求1所述的任务处理方法,其特征在于,所述确定所述代码集成任务中的第一任务阶段和第二任务阶段,包括:
确定所述代码集成任务中的任务阶段之间的依赖关系;
对于所述代码集成任务中的每个任务阶段,执行如下步骤:
基于所述依赖关系,确定该任务阶段是否产生所述代码集成任务中的其余至少一个任务阶段所依赖的数据;
若是,将该任务阶段确定为第一任务阶段,并将依赖所述第一任务阶段所产生的数据的任务阶段确定为第二任务阶段。
4.根据权利要求1所述的任务处理方法,其特征在于,所述第一任务阶段包含至少一个任务;以及
所述通过所述代码持续集成工具分配第一执行器,使所述第一执行器执行所述第一任务阶段中的任务并构建文件服务器以存储所述数据,包括:
随机从所述多个执行器中选取空闲状态的执行器,作为第一执行器;
使所述第一执行器执行如下步骤:创建容器以运行所述第一任务阶段中的各任务;并行执行所述第一任务阶段中的各任务;将所述容器作为文件服务器;将所述第一任务阶段所产生的数据存储至所述文件服务器;
设定所述第一执行器的使用状态为非空闲状态。
5.根据权利要求4所述的任务处理方法,其特征在于,所述第二任务阶段包含至少一个任务;以及
所述通过所述代码持续集成工具分配第二执行器,使所述第二执行器从所述文件服务器中下载所述数据,并基于所述数据执行所述第二任务阶段中的任务,包括:
随机从所述多个执行器中选取空闲状态的执行器,作为第二执行器;
使所述第二执行器执行如下步骤:
通过远程文件拷贝命令,从所述文件服务器中下载所述数据;
基于所述数据,并行执行所述第二任务阶段中的各任务。
6.一种任务处理装置,其特征在于,应用于安装有代码持续集成工具的服务器,所述代码持续集成工具管理有多个用于执行任务的执行器,所述装置包括:
接收单元,被配置成接收包含多个任务阶段的代码集成任务;
第一确定单元,被配置成确定所述代码集成任务中的第一任务阶段和第二任务阶段,其中,所述第二任务阶段依赖所述第一任务阶段产生的数据;
第一执行单元,被配置成通过所述代码持续集成工具分配第一执行器,使所述第一执行器执行所述第一任务阶段中的任务并构建文件服务器以存储所述数据;
第二执行单元,被配置成通过所述代码持续集成工具分配第二执行器,使所述第二执行器从所述文件服务器中下载所述数据,并基于所述数据执行所述第二任务阶段中的任务。
7.根据权利要求6所述的任务处理装置,其特征在于,所述装置还包括:
第二确定单元,被配置成确定所述第二任务阶段中的任务是否执行完毕;
设定单元,被配置成若是,设定所述第一执行器的工作状态为空闲状态。
8.根据权利要求6所述的任务处理装置,其特征在于,所述第一确定单元,包括:
第一确定模块,被配置成确定所述代码集成任务中的任务阶段之间的依赖关系;
第二确定模块,被配置成对于所述代码集成任务中的每个任务阶段,执行如下步骤:
基于所述依赖关系,确定该任务阶段是否产生所述代码集成任务中的其余至少一个任务阶段所依赖的数据;
若是,将该任务阶段确定为第一任务阶段,并将依赖所述第一任务阶段所产生的数据的任务阶段确定为第二任务阶段。
9.根据权利要求6所述的任务处理装置,其特征在于,所述第一任务阶段包含至少一个任务;以及
所述第一执行单元,包括:
第一选取模块,被配置成随机从所述多个执行器中选取空闲状态的执行器,作为第一执行器;
第一执行模块,被配置成使所述第一执行器执行如下步骤:创建容器以运行所述第一任务阶段中的各任务;并行执行所述第一任务阶段中的各任务;将所述容器作为文件服务器;将所述第一任务阶段所产生的数据存储至所述文件服务器;
设定模块,被配置成设定所述第一执行器的使用状态为非空闲状态。
10.根据权利要求9所述的任务处理装置,其特征在于,所述第二任务阶段包含至少一个任务;以及
所述第二执行单元,包括:
第二选取模块,被配置成随机从所述多个执行器中选取空闲状态的执行器,作为第二执行器;
第二执行模块,被配置成使所述第二执行器执行如下步骤:
通过远程文件拷贝命令,从所述文件服务器中下载所述数据;
基于所述数据,并行执行所述第二任务阶段中的各任务。
11.一种服务器,其特征在于,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-5中任一所述的方法。
12.一种计算机可读介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-5中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910364253.XA CN110213333B (zh) | 2019-04-30 | 2019-04-30 | 任务处理方法、装置、电子设备和计算机可读介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910364253.XA CN110213333B (zh) | 2019-04-30 | 2019-04-30 | 任务处理方法、装置、电子设备和计算机可读介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110213333A true CN110213333A (zh) | 2019-09-06 |
CN110213333B CN110213333B (zh) | 2021-07-06 |
Family
ID=67786830
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910364253.XA Active CN110213333B (zh) | 2019-04-30 | 2019-04-30 | 任务处理方法、装置、电子设备和计算机可读介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110213333B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112085471A (zh) * | 2020-09-10 | 2020-12-15 | 北京百度网讯科技有限公司 | 任务分发方法、装置、电子设备及存储介质 |
CN112114859A (zh) * | 2020-09-17 | 2020-12-22 | 云账户技术(天津)有限公司 | 一种文件处理方法、装置及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030120700A1 (en) * | 2001-09-11 | 2003-06-26 | Sun Microsystems, Inc. | Task grouping in a distributed processing framework system and methods for implementing the same |
CN101515232A (zh) * | 2008-02-21 | 2009-08-26 | 卓望数码技术(深圳)有限公司 | 一种软件持续集成系统及方法 |
US20090248856A1 (en) * | 2008-04-01 | 2009-10-01 | International Business Machines Corporation | Staged Integration Of Distributed System And Publishing Of Remote Services |
CN104240166A (zh) * | 2013-06-19 | 2014-12-24 | 国际商业机器公司 | 在管理系统中共享信息的方法和装置 |
CN108182111A (zh) * | 2018-01-23 | 2018-06-19 | 百度在线网络技术(北京)有限公司 | 任务调度系统、方法和装置 |
-
2019
- 2019-04-30 CN CN201910364253.XA patent/CN110213333B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030120700A1 (en) * | 2001-09-11 | 2003-06-26 | Sun Microsystems, Inc. | Task grouping in a distributed processing framework system and methods for implementing the same |
CN101515232A (zh) * | 2008-02-21 | 2009-08-26 | 卓望数码技术(深圳)有限公司 | 一种软件持续集成系统及方法 |
US20090248856A1 (en) * | 2008-04-01 | 2009-10-01 | International Business Machines Corporation | Staged Integration Of Distributed System And Publishing Of Remote Services |
CN104240166A (zh) * | 2013-06-19 | 2014-12-24 | 国际商业机器公司 | 在管理系统中共享信息的方法和装置 |
CN108182111A (zh) * | 2018-01-23 | 2018-06-19 | 百度在线网络技术(北京)有限公司 | 任务调度系统、方法和装置 |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112085471A (zh) * | 2020-09-10 | 2020-12-15 | 北京百度网讯科技有限公司 | 任务分发方法、装置、电子设备及存储介质 |
CN112085471B (zh) * | 2020-09-10 | 2024-05-07 | 北京百度网讯科技有限公司 | 任务分发方法、装置、电子设备及存储介质 |
CN112114859A (zh) * | 2020-09-17 | 2020-12-22 | 云账户技术(天津)有限公司 | 一种文件处理方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110213333B (zh) | 2021-07-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108733476A (zh) | 一种执行多任务的方法和装置 | |
CN108182111A (zh) | 任务调度系统、方法和装置 | |
CN108694053A (zh) | 基于Ansible工具自动搭建Kubernetes主节点的方法及终端设备 | |
US7886292B2 (en) | Methodology of individualized software deployment for hardware-independent personal computer mass development | |
CN109144744A (zh) | 任务处理系统、方法和装置 | |
CN105593835A (zh) | 通过主云服务管理器管理多个二级云 | |
CN106843976B (zh) | 用于生成镜像文件的方法和装置 | |
CN108933822B (zh) | 用于处理信息的方法和装置 | |
CN108958992A (zh) | 测试方法和装置 | |
CN110096424A (zh) | 测试的处理方法、装置、电子设备及存储介质 | |
CN109947565A (zh) | 用于分配计算任务的方法和装置 | |
CN108958922A (zh) | 用于执行任务的方法和装置 | |
CN109783197A (zh) | 用于程序运行时环境的调度方法和装置 | |
CN110225082A (zh) | 任务处理方法、装置、电子设备和计算机可读介质 | |
CN110213333A (zh) | 任务处理方法、装置、电子设备和计算机可读介质 | |
WO2019029451A1 (zh) | 发布移动应用的方法和电子设备 | |
CN109766148A (zh) | 用于处理接口方法调用的方法和装置 | |
CN108733527B (zh) | 用于测试服务器功能的系统、方法和装置 | |
CN103109284B (zh) | 用于移动业务对象的参数值联结 | |
CN114296953B (zh) | 一种多云异构系统及任务处理方法 | |
CN111459506A (zh) | 深度学习平台集群的部署方法、装置、介质及电子设备 | |
CN109683992A (zh) | 用于管理对象的方法和装置 | |
CN108196943A (zh) | 虚拟机管理方法和装置 | |
CN112114816A (zh) | 一种分布式编译系统和方法 | |
CN116974716A (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 |