首页 / 持续集成与部署方法、装置、计算机设备、可读存储介质

持续集成与部署方法、装置、计算机设备、可读存储介质公开 发明

技术领域

[0001] 本申请涉及云计算技术领域,特别是涉及一种持续集成与部署方法、装置、计算机设备、计算机可读存储介质。

相关背景技术

[0002] DevOps(Development和Operations的组合,即开发运维一体化)突出重视软件开发人员和运维人员的沟通合作,通过自动化流程来使得软件构建、测试、发布更加快捷、频繁和可靠。DevOps理念的践行基于自动化工具链,自动化工具链的核心是持续集成与部署装置,即流水线。但目前还缺乏通用的流水线装置。

具体实施方式

[0056] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0057] 本申请的持续集成与部署方法可以应用于流水线的控制调度器中,控制调度器可以是物理服务器、云服务器、虚拟机、容器或者函数服务等。
[0058] 在一个示例性的实施例中,如图1所示,提供了一种持续集成与部署方法,包括以下步骤102至步骤110。
[0059] 步骤102,定义并创建流水线数据模型。
[0060] 流水线数据模型中的实体包括流水线、流水线阶段和任务。其中,流水线包括多个按顺序编号的流水线阶段,流水线阶段包括至少一个任务。流水线、流水线阶段和任务都是自定义的数据结构类型。可以先定义一条或多条流水线,定义流水线的基本信息,例如流水线名称、流水线创建人、流水线的ID等。在每条流水线下可定义多个串行的流水线阶段,包括定义每个流水线阶段的阶段名称、阶段ID、以及其所属的流水线ID等信息,一条流水线下的多个流水线阶段按顺序编号。在每个流水线阶段下可定义多个并行的任务,需要定义每个任务的配置信息,包括任务名称、任务ID、任务执行所需参数名称以及该任务所属的流水线阶段ID等。定义流水线数据模型之后,即可调用控制调度器创建流水线数据模型的实例。
[0061] 示例性地,图2为一个简单的流水线数据模型实例,其中,流水线包括串行的编译阶段、镜像构建阶段和容器部署阶段,编辑阶段包括编译任务,镜像构建阶段包括n个可同时进行的镜像构建任务,容器部署阶段包括m个可同时进行的容器部署任务(m、n均为正整数)。其中,串行指在前一个流水线阶段完成后,才能进入下一个流水线阶段,以图2为例,在编译阶段完成后,才能进入镜像构建阶段,同样地,在镜像构建阶段完成之后,才能进入容器部署阶段。
[0062] 步骤104,根据流水线数据模型的运行数据,定义并生成每个实体对应的实体记录。
[0063] 实体记录用于记录流水线数据模型中对应的实体的运行数据和产生的中间结果文件等。控制调度器可根据流水线数据模型的运行数据,生成每个实体对应的实体记录,包括流水线记录、流水线阶段记录和任务记录。
[0064] 步骤106,在流水线数据模型运行的初始阶段,基于预设编排顺序,分别将流水线记录、流水线阶段记录、以及属于第一个流水线阶段的任务记录插入至流水线数据模型中。
[0065] 预设编排顺序与流水线数据模型中各实体的执行顺序相关,可以由用户提前设置。在流水线数据模型刚开始运行时,控制调度器可基于预设编排顺序,分别向流水线数据模型中插入流水线记录、流水线阶段记录以及属于第一个流水线阶段的任务记录。由于各流水线阶段时串行的,在流水线数据模型运行的初始阶段,在执行第一个流水线阶段下的任务时,剩余的流水线阶段下的任务并没有执行,自然也没有产生相应的任务记录,因此,这时只需要插入属于第一个流水线阶段的任务记录。
[0066] 步骤108,基于第一定时任务,查询是否存在待执行的任务记录,在确定存在待执行的任务记录的情况下,将待执行的任务记录对应的任务提交给执行器,并将待执行的任务记录更新为执行中。
[0067] 其中,第一定时任务的定时周期可由用户基于经验规则设置。待执行和执行中指的是任务记录中表示任务执行状态的字段的值。
[0068] 在流水线数据模型运行的整个过程中,控制调度器需要基于第一定时任务,定时查询是否存在待执行的任务记录。在确定存在待执行的任务记录的情况下,控制调度器将待执行的任务记录对应的任务提交给执行器,由执行器执行相应的任务,然后,控制调度器将待执行的任务记录更新为执行中。
[0069] 具体地,如图3所示,第一定时任务开始后,控制调度器查询是否存在待执行的任务记录。若不存在待执行的任务记录,则结束本次第一定时任务。若存在待执行的任务记录,控制调度器会记录待执行的任务记录的数量,并设置一个遍历编号taskindex_1,初始值为1,依次遍历全部待执行的任务记录。在taskindex_1不大于待执行的任务记录的数量的情况下,控制调度器会根据当前遍历到的待执行的任务记录,封装任务执行需要的参数信息,并将这些参数信息提交给执行器。如果任务提交成功,控制调度器将任务记录中的任务执行状态由待执行更新为执行中,并将taskindex_1的数值加1;如果任务提交失败,控制调度器将任务记录中的任务执行状态由待执行更新为执行失败,并将taskindex_1的数值加1。在taskindex_1大于待执行的任务记录的数量的情况下,结束本次第一定时任务。
[0070] 执行器接收到控制调度器提交的任务后,可通过调用常用的开源组件,例如持续集成软件Jenkins、制品管理软件Nexus、Git代码托管软件Gogs、对象存储软件Minio和镜像管理软件Harbor等执行相应的任务。示例性地,以图2的流水线系统为例,请参考图4,在执行编译任务时Jenkins从Gogs上拉取代码,从Nexus上获取编译包,进行编译,并将编译任务的产物,例如运行数据和中间结果文件等存储在Minio上。Jenkins在执行镜像构建任务后,将镜像构建任务的产物存储在系统Harbor中。在执行容器部署任务时,Jenkins将镜像构建的产物从系统Harbor拉取下来,推送到目标部署环境的Harbor上,然后调用容器控制台的接口完成容器部署。容器控制台下发指令到Kubernetes集群,Kubernetes集群从部署环境的Harbor拉取镜像,启动服务。
[0071] 步骤110,定时获取执行中的任务记录对应的任务实际执行状态,根据任务实际执行状态依次更新执行中的任务记录、目标流水线阶段记录和目标流水线记录。
[0072] 其中,目标流水线阶段记录为处于非完成状态的流水线阶段记录;目标流水线记录为处于非完成状态的流水线记录。非完成状态包括待执行和执行中。任务实际执行状态指的是执行器中记录的任务执行状态。可以理解,在流水线数据模型执行的整个过程中,控制调度器还需要调用执行器,定时获取执行中的任务记录对应的任务实际执行状态,以及时更新执行中的任务记录、目标流水线阶段记录和目标流水线记录。
[0073] 在本申请实施例中,定义并创建由流水线、流水线阶段和任务组成的三层流水线数据模型,其中,每条流水线下包括多个串行的流水线阶段,每个流水线阶段下包括多个并行的任务,流水线数据模型可以同时处理这些任务,提高了处理效率,并且,将数据处理过程划分成流水线、流水线阶段和任务,这种分层设计便于系统维护和管理;在流水线数据模型运行的初始阶段,基于预设编排顺序,分别将流水线记录、流水线阶段记录、以及属于第一个流水线阶段的任务记录插入至流水线数据模型中,在流水线数据模型运行的整个过程中,基于第一定时任务,查询是否存在待执行的任务记录,在确定存在待执行的任务记录的情况下,将待执行的任务记录对应的任务提交给执行器,并将待执行的任务记录更新为执行中,并且,还定时获取执行中的任务记录对应的任务实际执行状态,根据任务实际执行状态依次更新执行中的任务记录、目标流水线阶段记录和目标流水线记录,可以理解,通过任务记录、流水线阶段记录和流水线记录分别记录任务、流水线阶段和流水线的运行数据,并通过定时获取任务实际执行状态更新任务记录、流水线阶段记录和流水线记录,确保任务记录、流水线阶段记录和流水线记录中的数据的实时性和准确性,并且,还能及时发现和处理流水线数据模型运行过程中的异常问题。
[0074] 在一个实施例中,基于预设编排顺序,分别将流水线记录、流水线阶段记录、以及属于第一个流水线阶段的任务记录插入至流水线数据模型中,包括:获取流水线信息,根据流水线信息,向流水线数据模型中插入流水线记录;获取所有的流水线阶段信息,依次遍历每个流水线阶段,根据流水线阶段信息,向流水线数据模型中插入对应的流水线阶段记录,以及在遍历到的流水线阶段为第一个流水线阶段的情况下,获取第一个流水线阶段对应的任务信息,根据任务信息,向流水线数据模型中插入任务记录的步骤。
[0075] 其中,流水线信息包括流水线名称、流水线ID、流水线包含的流水线阶段ID等信息。流水线记录包括流水线状态,例如完成状态(包括执行成功和执行失败)、执行中状态、待执行状态等。流水线阶段信息包括每个流水线阶段的阶段名称、阶段ID、阶段所属任务数量、阶段所属任务的ID等。流水线阶段记录包括流水线阶段状态,例如执行失败、执行成功、执行中和待执行等状态。任务信息包括任务名称、任务ID、任务执行必需的配置参数等信息。任务记录包括任务执行状态,例如执行失败、执行成功、执行中和待执行等状态。
[0076] 具体地,如图5所示,控制调度器可先获取流水线信息,根据流水线信息,生成对应的流水线记录,并向流水线数据模型中插入流水线记录。在插入流水线记录之后,控制调度器可获取该流水线所属的所有流水线阶段信息,先根据流水线阶段信息获取流水线阶段的数量,在流水线阶段的数量大于0的情况下,定义流水线阶段的遍历编号stageindex_1,初始值为1。控制调度器会重复执行以下步骤,直至stageindex_1的值大于流水线阶段的数量:
[0077] (1)根据流水线阶段信息生成对应的流水线阶段记录,并将流水线阶段记录插入到流水线数据模型中;
[0078] (2)根据遍历编号stageindex_1判断当前流水线阶段是否为第一个流水线阶段;
[0079] (3)在确定遍历到的流水线阶段不是第一个流水线阶段的情况下,直接执行步骤(5);
[0080] (4)在确定遍历到的流水线阶段为第一个流水线阶段的情况下,获取第一个流水线阶段对应的任务信息,根据任务信息,生成对应的任务记录,并插入到流水线数据模型中;
[0081] (5)将stageindex_1的值加1。
[0082] 在一个实施例中,如图6所示,定时获取执行中的任务记录对应的任务实际执行状态,根据任务实际执行状态依次更新执行中的任务记录、目标流水线阶段记录和目标流水线记录,包括步骤602‑610。
[0083] 步骤602,基于第二定时任务,查询是否存在执行中的任务记录。
[0084] 其中,第二定时任务的定时周期可根据经验规则设置。第二定时任务用于触发查询执行中的任务记录的流程。控制调度器可基于第二定时任务,定时查询各任务记录,以确定在是否存在表示任务执行状态的字段的值为执行中的任务记录。
[0085] 步骤604,在确定存在执行中的任务记录的情况下,依次遍历每个执行中的任务记录。
[0086] 控制调度器在确定存在执行中的任务记录的情况下,会依次遍历每个执行中的任务记录。
[0087] 步骤606,针对每个执行中的任务记录,调用执行器获取任务实际执行状态,并根据任务实际执行状态,更新任务记录。
[0088] 控制调度器可通过调用执行器获取任务实际执行状态,根据任务实际执行状态,更新任务记录中表示任务执行状态的字段。
[0089] 具体地,如图7所示,第二定时任务触发后,控制调度器查询是否存在执行中的任务记录,如果不存在,直接结束本次第二定时任务。如果存在,获取执行中的任务记录的数量,定义任务记录遍历编号taskindex_2,初始值设为1。在taskindex_2的值不大于执行中的任务记录的数量的情况下,调用执行器获取任务实际执行状态。如果任务实际执行状态为执行中,则将taskindex_2的值加1,遍历下一个执行中的任务记录。如果任务实际执行状态为执行失败,将对应的任务记录中表示任务执行状态的字段由执行中更新为执行失败,并将taskindex_2的值加1,遍历下一个执行中的任务记录。如果任务实际执行状态为执行成功,将对应的任务记录中表示任务执行状态的字段由执行中更新为执行失败,将任务执行成功后产生的结果文件记录在任务记录中,并将taskindex_2的值加1,遍历下一个执行中的任务记录。
[0090] 步骤608,根据任务记录,更新目标流水线阶段记录。
[0091] 流水线阶段记录的状态和该流水线阶段对应的多个任务的任务执行状态有关,因此,可基于该流水线阶段对应的多个任务记录,获取多个任务的任务执行状态,从而对流水线阶段记录进行更新。
[0092] 具体地,控制调度器可先基于第三定时任务,查询是否存在目标流水线阶段记录。第三定时任务用于触发查询是否目标流水线阶段记录的流程,第三定时任务的定时周期可以根据经验规则设置。完成状态包括执行失败和执行成功,非完成状态包括执行中和待执行。控制调度器在确定存在目标流水线阶段记录的情况下,依次遍历每个目标流水线阶段记录。针对每个目标流水线阶段记录,控制调度器获取目标流水线阶段记录对应的任务记录。在全部任务记录均为完成状态的情况下,将目标流水线阶段记录更新为完成状态;在存在任务记录为非完成状态的情况下,目标流水线阶段记录保持不变。
[0093] 示例性地,如图8所示,控制调度器在确定存在目标流水线阶段记录的情况下,获取目标流水线阶段记录的数量,定义流水线阶段遍历编号stageindex_2,初始值设置1。在stageindex_2的值不大于目标流水线阶段记录的数量的情况下,获取当前遍历到的目标流水线阶段记录所属的全部任务记录,在全部任务记录均为完成状态的情况下,将目标流水线阶段记录更新为完成状态;在存在任务记录为非完成状态的情况下,目标流水线阶段记录保持不变。然后,控制调度器将stageindex_2的值加1,遍历下一个目标流水线阶段记录。
[0094] 步骤610,根据流水线阶段记录,更新目标流水线记录。
[0095] 流水线包含多个流水线阶段,流水线状态和其包含的多个流水线阶段的状态有关,因此,可基于流水线阶段记录获取流水线阶段的状态,从而对流水线记录进行更新。
[0096] 具体地,控制调度器可先基于第四定时任务,查询是否存在目标流水线记录。第四定时任务用于触发查询是否存在目标流水线记录的流程,第四定时任务的定时周期也可基于经验规则设置。在本实施例中,为减少资源浪费,可使第三定时任务的定时周期大于第二定时任务的定时周期,且小于第四定时任务的定时周期。在确定存在目标流水线记录的情况下,控制调度器依次遍历每个目标流水线记录。针对每个目标流水线记录,获取目标流水线记录对应的流水线阶段记录,在全部流水线阶段记录均为完成状态,或者,存在流水线阶段记录为执行失败的情况下,将目标流水线记录更新为完成状态;在存在流水线阶段记录为非完成状态的情况下,目标流水线记录的记录状态保持不变。可以理解,由于流水线包含的多个流水线阶段是串行执行的,在某一流水线阶段执行失败的情况下,后续的流水线阶段不会执行,此时,可认为流水线执行失败。
[0097] 示例性地,如图9所示,第四定时任务触发后,控制调度器查询是否存在目标流水线记录,如果不存在目标流水线记录,直接结束本次第四定时任务。如果存在目标流水线记录,获取目标流水线记录的数量,并定义流水线遍历编号index,初始值设为1。在index的值不大于目标流水线记录的数量的情况下,获取当前遍历到的目标流水线记录对应的全部流水线阶段记录,在全部流水线阶段记录均为完成状态的情况下,将目标流水线记录更新为执行成功;在存在流水线阶段记录为执行失败的情况下,将目标流水线记录更新为执行失败;在存在流水线阶段记录为非完成状态的情况下,目标流水线记录的记录状态保持不变。然后,控制调度器将index的值加1,遍历下一个目标流水线记录。
[0098] 在本申请实施例中,采用任务记录、流水线阶段记录和流水线记录分层维护的思想,通过第二定时任务,定时更新任务记录,通过第三定时任务,根据任务记录更新流水线阶段记录,通过第四定时任务,根据流水线阶段记录更新流水线记录,实现了对任务记录、流水线阶段记录和流水线记录的定时维护,保障各记录中数据的实时性和准确性。
[0099] 在一个实施例中,在基于预设编排顺序,分别将流水线记录、流水线阶段记录、以及属于第一个流水线阶段的任务记录插入至流水线数据模型中之后,本申请的持续继承与部署方法还包括:基于第五定时任务,查询是否存在满足预设条件的待插入的任务;在确定存在待插入的任务记录的情况下,根据待插入的任务生成待插入的任务记录,依次将待插入的任务记录加入至流水线数据模型中的步骤。
[0100] 满足预设条件指,该待插入的任务所属的流水线阶段记录为执行中,且,上一个流水线阶段记录为完成状态。第五定时任务用于触发查询是否存在满足预设条件的待插入的任务的流程,第五定时任务的任务周期也可基于经验规则设置。在流水线系统中,还定义了一个任务表,任务表可用于存放待插入的任务的配置信息。控制调度器可在该任务表中查询是否存在满足预设条件的待插入的任务。
[0101] 具体地,如图10所示,在第五定时任务触发后,控制调度器在任务表中查询是否存在满足预设条件的待插入的任务,如果不存在,直接结束本次第五定时任务。如果存在,获取待插入的任务的数量,定义任务遍历编号taskindex_3,初始值设为1。在taskindex_3的值不大于待插入的任务的数量的情况下,根据待插入的任务的配置信息,生成对应的任务记录,将任务记录插入至流水线数据模型中,并将taskindex_3的值加1,遍历下一个待插入的任务。在taskindex_3的值大于待插入的任务的数量的情况下,结束本次第五定时任务。
[0102] 应该理解的是,虽然如上的各实施例所涉及的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,如上的各实施例所涉及的流程图中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0103] 基于同样的发明构思,本申请实施例还提供了一种用于实现上述所涉及的持续集成与部署方法的持续集成与部署装置。该装置所提供的解决问题的实现方案与上述方法中所记载的实现方案相似,故下面所提供的一个或多个持续集成与部署装置实施例中的具体限定可以参见上文中对于持续集成与部署方法的限定,在此不再赘述。
[0104] 在一个示例性的实施例中,如图11所示,提供了一种持续集成与部署装置,包括:模型创建模块1102、记录生成模块1104、任务执行模块1106和记录维护模块1108,其中:
[0105] 模型创建模块1102,用于定义并创建流水线数据模型;流水线数据模型中的实体包括流水线、流水线阶段和任务,其中,流水线包括多个按顺序编号的流水线阶段,流水线阶段包括至少一个任务;
[0106] 记录生成模块1104,用于根据流水线数据模型的运行数据,定义并生成每个实体对应的实体记录;以及在流水线数据模型运行的初始阶段,基于预设编排顺序,分别将流水线记录、流水线阶段记录、以及属于第一个流水线阶段的任务记录插入至流水线数据模型中;
[0107] 任务执行模块1106,用于基于第一定时任务,查询是否存在待执行的任务记录,在确定存在待执行的任务记录的情况下,将待执行的任务记录对应的任务提交给执行器,并将待执行的任务记录更新为执行中;
[0108] 记录维护模块1108,用于定时获取执行中的任务记录对应的任务实际执行状态,根据任务实际执行状态依次更新执行中的任务记录、目标流水线阶段记录和目标流水线记录;其中,目标流水线阶段记录为处于非完成状态的流水线阶段记录;目标流水线记录为处于非完成状态的流水线记录。
[0109] 在一个实施例中,记录生成模块还用于获取流水线信息;根据流水线信息,向流水线数据模型中插入流水线记录;获取所有的流水线阶段信息;依次遍历每个流水线阶段,根据流水线阶段信息,向流水线数据模型中插入对应的流水线阶段记录;在遍历到的流水线阶段为第一个流水线阶段的情况下,获取第一个流水线阶段对应的任务信息,根据任务信息,向流水线数据模型中插入任务记录。
[0110] 在一个实施例中,记录维护模块还用于基于第二定时任务,查询是否存在执行中的任务记录;在确定存在执行中的任务记录的情况下,依次遍历每个执行中的任务记录;针对每个执行中的任务记录,调用执行器获取任务实际执行状态,并根据任务实际执行状态,更新任务记录;根据任务记录,更新目标流水线阶段记录;根据流水线阶段记录,更新目标流水线记录。
[0111] 在一个实施例中,记录维护模块还用于基于第三定时任务,查询是否存在目标流水线阶段记录;在确定存在目标流水线阶段记录的情况下,依次遍历每个目标流水线阶段记录;针对每个目标流水线阶段记录,获取目标流水线阶段记录对应的任务记录,在全部任务记录均为完成状态的情况下,将目标流水线阶段记录更新为完成状态;在存在任务记录为非完成状态的情况下,目标流水线阶段记录保持不变。
[0112] 在一个实施例中,记录维护模块还用于基于第四定时任务,查询是否存在目标流水线记录;在确定存在目标流水线记录的情况下,依次遍历每个目标流水线记录;针对每个目标流水线记录,获取目标流水线记录对应的流水线阶段记录,在全部流水线阶段记录均为完成状态,或者,存在流水线阶段记录为执行失败的情况下,将目标流水线记录更新为完成状态;在存在流水线阶段记录为非完成状态的情况下,目标流水线记录的记录状态保持不变。
[0113] 在一个实施例中,持续继承与部署装置还包括任务插入模块,用于基于第五定时任务,查询是否存在满足预设条件的待插入的任务;在确定存在待插入的任务的情况下,根据所述待插入的任务生成待插入的任务记录,依次将待插入的任务记录加入至流水线数据模型中。
[0114] 上述持续继承与部署装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0115] 在一个示例性的实施例中,提供了一种计算机设备,包括存储器和处理器,存储器中存储有计算机程序,该处理器执行计算机程序时实现上述任一实施例提供的持续继承与部署方法。
[0116] 在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述任一实施例提供的持续继承与部署方法。
[0117] 在一个实施例中,提供了一种计算机程序产品,包括计算机程序,该计算机程序被处理器执行时实现上述任一实施例提供的持续继承与部署方法。
[0118] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请提供的各实施例中所使用的对存储器、数据库或其它介质的任何引用,均可包括非易失性存储器和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read‑Only Memory,ROM)、磁带、软盘、闪存、光存储器、高密度嵌入式非易失性存储器、阻变存储器(Resistive Random Access Memory,ReRAM)、磁变存储器(Magnetoresistive Random Access Memory,MRAM)、铁电存储器(Ferroelectric Random Access Memory,FRAM)、相变存储器(Phase Change Memory,PCM)、石墨烯存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器等。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。本申请提供的各实施例中所涉及的数据库可包括关系型数据库和非关系型数据库中至少一种。非关系型数据库可包括基于区块链的分布式数据库等,不限于此。本申请提供的各实施例中所涉及的处理器可为通用处理器、中央处理器、图形处理器、数字信号处理器、可编程逻辑器、基于量子计算的数据处理逻辑器、人工智能(Artificial Intelligence,AI)处理器等,不限于此。
[0119] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本申请记载的范围。
[0120] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请的保护范围应以所附权利要求为准。

当前第1页 第1页 第2页 第3页
相关技术
持续集成相关技术
方法装置相关技术
杨睿发明人的其他相关专利技术