发明内容
本公开实施例至少提供一种启动方法、装置、计算机设备和存储介质。
第一方面,本公开实施例提供了一种启动方法,包括:
响应当前修改的代码分支满足目标条件,触发预构建功能;所述当前修改的代码分支为目标开发项目对应的代码分支;所述目标条件是指所述代码分支对在线集成开发环境WebIDE中容器的初始化过程存在影响;
按照预设代码拉取方式,获取所述目标开发项目对应的第一仓库代码;并按照所述当前修改的代码分支对应的代码版本信息,从所述第一仓库代码中,获取用于构建所述WebIDE对应的运行依赖的初始化任务代码;
执行所述初始化任务代码,得到并存储第一目标构建产物;其中,所述第一目标构建产物用于生成所述WebIDE中容器运行所需的运行依赖。
在一种可能的实施方式中,在得到并存储第一目标构建产物之后,还包括:
响应于针对所述目标开发项目中任一开发任务的启动请求,确定所述启动请求对应的待匹配代码版本信息,并在确定所述待匹配代码版本信息和所述第一目标构建产物对应的代码版本信息相匹配的情况下,启动执行所述任一开发任务的目标容器;
获取存储的所述第一目标构建产物,并将所述第一目标构建产物添加在所述目标容器对应的工作目录中;
基于所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面。
在一种可能的实施方式中,所述启动执行所述任一开发任务的目标容器,包括:
获取所述目标开发项目对应的第一仓库代码;
基于所述第一仓库代码,确定所述目标开发项目对应的启动任务中的第一执行任务;所述第一执行任务为默认的执行任务;
在启动所述目标容器的过程中,执行所述第一执行任务,以确定所述目标容器对应的端口信息。
在一种可能的实施方式中,所述基于所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面,包括:
基于所述第一仓库代码,确定所述目标开发项目对应的启动任务中的至少一个第二执行任务;所述第二执行任务为被选择的执行任务;
生成每个所述第二执行任务对应的第一任务插件;
基于每个所述第一任务插件和所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面,其中,所述WebIDE页面中包括每个所述第一任务插件分别对应的控件。
在一种可能的实施方式中,所述存储第一目标构建产物,包括:
将所述第一目标构建产物存储在用于进行数据持久存储的目标存储位置。
在一种可能的实施方式中,所述存储第一目标构建产物,包括:
生成用于表征所述第一目标构建产物生成完毕的通知信息,并将所述通知信息发送给所述目标开发项目对应的WebIDE调度器;
利用所述WebIDE调度器将所述第一目标构建产物存储在所述目标开发项目的每个项目节点对应的工作目录中,其中,一个项目节点对应于至少一个容器;
所述获取存储的所述第一目标构建产物,包括:
确定所述目标容器对应的目标项目节点,从所述目标项目节点对应的工作目录中获取所述第一目标构建产物。
在一种可能的实施方式中,在得到所述第一目标构建产物之后,还包括:
获取存储的每个已生成构建产物对应的容器关联记录;所述容器关联记录用于记录与对应的已生成构建产物匹配的容器数量;
在所述目标开发项目的每个项目节点对应的工作目录中,删除所述容器数量小于或等于预设数量的已生成构建产物。
在一种可能的实施方式中,所述方法还包括:
在确定所述任一开发任务执行完成的情况下,删除所述目标容器,并更新所述第一目标构建产物对应的所述容器数量。
在一种可能的实施方式中,所述当前修改的代码分支包括所述目标开发项目对应的主代码分支和每个与所述主代码分支存在更新关联关系的子代码分支;所述更新关联关系用于表征在所述子代码分支发生更新的情况下,所述主代码分支将同步更新。
在一种可能的实施方式中,所述方法还包括:
在确定所述待匹配代码版本信息和所述第一目标构建产物对应的代码版本信息不匹配的情况下,获取所述待匹配代码版本信息对应的第二仓库代码;
在所述目标容器中,执行所述第二仓库代码中的初始化任务代码,确定第二目标构建产物,并将所述第二目标构建产物添加在所述目标容器对应的工作目录中;
基于所述第二仓库代码,确定所述待匹配代码版本信息对应的至少一个第二执行任务,并生成每个所述第二执行任务对应的第二任务插件;所述第二执行任务为被选择的执行任务;
基于每个所述第二任务插件和所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面。
第二方面,本公开实施例还提供一种启动装置,包括:
触发模块,用于响应当前修改的代码分支满足目标条件,触发预构建功能;所述当前修改的代码分支为目标开发项目对应的代码分支;所述目标条件是指所述代码分支对在线集成开发环境WebIDE中容器的初始化过程存在影响;
获取模块,用于按照预设代码拉取方式,获取所述目标开发项目对应的第一仓库代码;并按照所述当前修改的代码分支对应的代码版本信息,从所述第一仓库代码中,获取用于构建所述WebIDE对应的运行依赖的初始化任务代码;
执行模块,用于执行所述初始化任务代码,得到并存储第一目标构建产物;其中,所述第一目标构建产物用于生成所述WebIDE中容器运行所需的运行依赖。
在一种可能的实施方式中,所述装置还包括:
启动模块,用于在得到并存储第一目标构建产物之后,响应于针对所述目标开发项目中任一开发任务的启动请求,确定所述启动请求对应的待匹配代码版本信息,并在确定所述待匹配代码版本信息和所述第一目标构建产物对应的代码版本信息相匹配的情况下,启动执行所述任一开发任务的目标容器;
获取存储的所述第一目标构建产物,并将所述第一目标构建产物添加在所述目标容器对应的工作目录中;
基于所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面。
在一种可能的实施方式中,所述启动模块,用于获取所述目标开发项目对应的第一仓库代码;
基于所述第一仓库代码,确定所述目标开发项目对应的启动任务中的第一执行任务;所述第一执行任务为默认的执行任务;
在启动所述目标容器的过程中,执行所述第一执行任务,以确定所述目标容器对应的端口信息。
在一种可能的实施方式中,所述启动模块,用于基于所述第一仓库代码,确定所述目标开发项目对应的启动任务中的至少一个第二执行任务;所述第二执行任务为被选择的执行任务;
生成每个所述第二执行任务对应的第一任务插件;
基于每个所述第一任务插件和所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面,其中,所述WebIDE页面中包括每个所述第一任务插件分别对应的控件。
在一种可能的实施方式中,所述执行模块,用于将所述第一目标构建产物存储在用于进行数据持久存储的目标存储位置。
在一种可能的实施方式中,所述执行模块,用于生成用于表征所述第一目标构建产物生成完毕的通知信息,并将所述通知信息发送给所述目标开发项目对应的WebIDE调度器;
利用所述WebIDE调度器将所述第一目标构建产物存储在所述目标开发项目的每个项目节点对应的工作目录中,其中,一个项目节点对应于至少一个容器;
所述启动模块,用于确定所述目标容器对应的目标项目节点,从所述目标项目节点对应的工作目录中获取所述第一目标构建产物。
在一种可能的实施方式中,所述执行模块,还用于在得到所述第一目标构建产物之后,获取存储的每个已生成构建产物对应的容器关联记录;所述容器关联记录用于记录与对应的已生成构建产物匹配的容器数量;
在所述目标开发项目的每个项目节点对应的工作目录中,删除所述容器数量小于或等于预设数量的已生成构建产物。
在一种可能的实施方式中,所述装置还包括:
删除模块,用于在确定所述任一开发任务执行完成的情况下,删除所述目标容器,并更新所述第一目标构建产物对应的所述容器数量。
在一种可能的实施方式中,所述当前修改的代码分支包括所述目标开发项目对应的主代码分支和每个与所述主代码分支存在更新关联关系的子代码分支;所述更新关联关系用于表征在所述子代码分支发生更新的情况下,所述主代码分支将同步更新。
在一种可能的实施方式中,所述启动模块,还用于在确定所述待匹配代码版本信息和所述第一目标构建产物对应的代码版本信息不匹配的情况下,获取所述待匹配代码版本信息对应的第二仓库代码;
在所述目标容器中,执行所述第二仓库代码中的初始化任务代码,确定第二目标构建产物,并将所述第二目标构建产物添加在所述目标容器对应的工作目录中;
基于所述第二仓库代码,确定所述待匹配代码版本信息对应的至少一个第二执行任务,并生成每个所述第二执行任务对应的第二任务插件;所述第二执行任务为被选择的执行任务;
基于每个所述第二任务插件和所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面。
第三方面,本公开可选实现方式还提供一种计算机设备,处理器、存储器,所述存储器存储有所述处理器可执行的机器可读指令,所述处理器用于执行所述存储器中存储的机器可读指令,所述机器可读指令被所述处理器执行时,所述机器可读指令被所述处理器执行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
第四方面,本公开可选实现方式还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被运行时执行上述第一方面,或第一方面中任一种可能的实施方式中的步骤。
关于上述启动装置、计算机设备、及计算机可读存储介质的效果描述参见上述启动方法的说明,这里不再赘述。
本公开实施例提供的启动方法、装置、计算机设备和存储介质,在确定当前修改的代码分支满足目标条件时,利用触发的预构建功能,获取第一仓库代码中、用于构建WebIDE对应的运行依赖的初始化任务代码,并在离线的状态下完成对初始化任务代码的执行,从而能够在离线的状态下,获取到用于生成WebIDE中容器运行所需的运行依赖的第一目标构建产物;相比现有技术中需要在启动WebIDE容器才可以执行初始化任务代码而言,基于预构建功能,提高了生成第一目标构建产物的灵活性和及时性。通过将第一目标存储产物存储的方式,后续在为新创建的容器创建运行依赖时,直接获取存储的第一目标存储产物并生成运行依赖,不需要用户通过人工的方式进行运行依赖的创建,提高了创建WebIDE容器对应的运行依赖的速度以及容器初始化的效率,进而提高了开发效率。
进一步的,本公开实施例提供的启动方法、装置、计算机设备和存储介质,每个第一任务插件与第一仓库代码对应的启动任务中的第二执行任务相关,通过在生成的任一开发任务对应的WebIDE页面中添加每个第一任务插件分别对应的控件,用户只需要选择对应的控件,就可以实现对控件对应的任务插件的加载,也即实现对控件对应的第二执行任务的执行,提高了执行第二执行任务的灵活性和便利性。
进一步的,本公开实施例提供的启动方法、装置、计算机设备和存储介质,在生成第一目标构建产物之后,还可以获取每个已生成构建产物的容器关联记录,并将容器关联记录对应的容器数量小于或等于预设数量的已生成构建产物,在目标开发项目的每个项目节点对应的工作目录中删除,实现了对缓存空间的释放,避免了缓存空间被占用而影响开发速度的问题。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
具体实施方式
为使本公开实施例的目的、技术方案和优点更加清楚,下面将结合本公开实施例中附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本公开一部分实施例,而不是全部的实施例。通常在此处描述和示出的本公开实施例的组件可以以各种不同的配置来布置和设计。因此,以下对本公开的实施例的详细描述并非旨在限制要求保护的本公开的范围,而是仅仅表示本公开的选定实施例。基于本公开的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本公开保护的范围。
另外,本公开实施例中的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。
在本文中提及的“多个或者若干个”是指两个或两个以上。“和/或”,描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。
经研究发现,用户在利用WebIDE进行子开发任务的开发时,需要在服务端为该子开发任务分配容器之后,以人工的方式,自主进行WebIDE中容器对应的运行依赖的创建,大大降低了开发效率。并且,各个子开发任务往往为从目标开发项目对应的主开发任务上切分得到,因此,各个子开发任务在容器中执行时,往往需要重复执行一个与主开发任务相关的初始化命令,进一步造成了开发资源的浪费。
综上,利用现有技术进行目标开发项目的开发,不仅开发效率较低,而且存在开发资源浪费的问题。
基于上述研究,本公开提供了一种启动方法、装置、计算机设备和存储介质,在确定当前修改的代码分支满足目标条件时,利用触发的预构建功能,获取第一仓库代码中、用于构建WebIDE对应的运行依赖的初始化任务代码,并在离线的状态下完成对初始化任务代码的执行,从而能够在离线的状态下,获取到用于生成WebIDE中容器运行所需的运行依赖的第一目标构建产物;相比现有技术中需要在启动WebIDE容器才可以执行初始化任务代码而言,基于预构建功能,提高了生成第一目标构建产物的灵活性和及时性。通过将第一目标存储产物存储的方式,后续在为新创建的容器创建运行依赖时,直接获取存储的第一目标存储产物并生成运行依赖,不需要用户通过人工的方式进行运行依赖的创建,提高了创建WebIDE容器对应的运行依赖的速度以及容器初始化的效率,进而提高了开发效率。
以及,通过利用WebIDE调度器将第一目标构建产物存储在目标开发项目的每个项目节点对应的工作目录中,可以保证在任一项目节点中新创建的容器,都可以直接在该项目节点获取第一目标构建产物,进而生成运行依赖,保证了第一目标构建产物的可使用性,避免了新创建的容器无法应用生成的第一目标构建产物的问题;每个新创建的容器均可以直接使用第一目标构建产物,不需要反复执行生成第一目标构建产物的步骤,有效避免了开发资源的浪费。
针对以上方案所存在的缺陷,均是发明人在经过实践并仔细研究后得出的结果,因此,上述问题的发现过程以及下文中本公开针对上述问题所提出的解决方案,都应该是发明人在本公开过程中对本公开做出的贡献。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。
需要说明的是,本公开实施例中所提到的特定名词包括:
WebIDE:一种针对编程开发人员的在线集成开发环境,其具有编程人员无需本地安装开发环境,只需打开浏览器就能立即开发的优越特性;
Git:是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理;
Monorepo:是管理大型前端项目代码的一个方式,指在一个项目仓库(repo)中管理多个模块/包(package),不同于常见的每个模块建一个repo。
Pod:可以由一个或多个容器组成,属于同一个Pod的多个容器应用之间相互访问时仅需要通过本地主机localhost就可以通信。
为便于对本实施例进行理解,首先对本公开实施例所公开的一种启动方法进行详细介绍,本公开实施例所提供的启动方法的执行主体一般为具有一定计算能力的计算机设备,在一些可能的实现方式中,该启动方法可以通过处理器调用存储器中存储的计算机可读指令的方式来实现。
下面以执行主体为服务端为例对本公开实施例提供的启动方法加以说明。
如图1所示,为本公开实施例提供的一种启动方法的流程图,可以包括以下步骤:
S101:响应当前修改的代码分支满足目标条件,触发预构建功能;当前修改的代码分支为目标开发项目对应的代码分支;目标条件是指代码分支对在线集成开发环境WebIDE中容器的初始化过程存在影响。
这里,目标开发项目为预先确定的开发项目,用于开发如目标程序、目标集成功能,通常情况下,目标开发项目可以为一个需要多用户协作的开发项目。
目标开发项目可以包括多个代码分支,每个代码分支可以对应于不同的功能,每个代码分支可以为从目标开发项目对应的主代码分支上切分得到的代码分支。在具体实施时,每个目标开发项目对应的代码分支的数量可以根据实际开发情况,由用户进行自适应修改。在目标开发项目的开发过程中,可以在任一时刻创建新的代码分支。
目标条件是指代码分支对WebIDE中容器的初始化过程存在影响,具体的,初始化过程可以包括加载代码分支对应的仓库代码,以及创建容器对应的运行依赖。其中,仓库代码可以为目标开发项目对应的整体代码,由用户开发并存储在目标仓库中,具体的,可以存储在git仓库中。运行依赖为容器运行所需要的执行环境。
代码分支对在线集成开发环境WebIDE中容器的初始化过程存在影响,具体的,可以为代码分支对WebIDE中新建的容器的初始化过程存在影响,这里,由于WebIDE中已经创建的容器已经完成初始化,且已经创建的容器在被删除之前其对应的运行依赖将固定,因此,当前修改的代码分支不会对已经创建的容器的初始化过程存在影响,只会对新建的容器的初始化过程存在影响。
WebIDE中的容器用于执行不同的代码分支对应的开发任务,不同的代码分支可以对应于不同的容器,目标开发项目可以对应于多个WebIDE容器,各个容器之间相互分离。目标开发项目对应的各个容器可以运行在用户对应的内网中,目标开发项目对应的仓库代码也可以挂载在内网对应的git仓库中。
预构建功能为预先设置的用于在离线的状态下,在WebIDE中创建目标构建产物的功能,具体的,预构建功能可以在离线的状态下,在WebIDE中创建容器,并在容器执行获取的目标开发项目对应的仓库代码中的初始化任务代码,得到目标构建产物。这里,不同的代码分支可以对应于不同的WebIDE分支,创建的容器对应于当前修改的代码分支,也即,预构建服务在满足目标条件的、当前修改的代码分支对应的WebIDE分支上执行的。并且,之所以需要创建容器在于执行初始化任务代码的步骤为在离线的状态下执行的,当前修改的代码分支对应的已创建的容器不可使用,从而需要创建新的容器执行初始化任务代码,但两个容器对应的WebIDE分支相同。
其中,目标构建产物用于为在WebIDE中,为目标开发项目对应的代码分支创建的新容器生成运行依赖。初始化任务为用户根据预先提供的配置文件自定义的、用于进行容器初始化的任务。配置文件可以挂载在目标开发项目对应的仓库代码的目录中。
对代码分支进行修改的操作,即为在仓库代码中对代码分支对应的子代码进行修改的操作。对代码分支进行修改的操作具体可以在例如本地的服务端进行,在Monorepo环境中进行,在Monorepo仓库对应的客户端、服务端进行等等,或者,也可以在WebIDE中进行,此处不进行限定。
具体实施时,在确定目标开发项目对应的预构建服务开启的情况下,如果确定的任一用户当前修改的代码分支满足目标条件,也即当前修改的代码分支对在线集成开发环境WebIDE中新建的容器的初始化过程存在影响,触发预构建功能,以用于后续生成目标构建产物。
S102:按照预设代码拉取方式,获取目标开发项目对应的第一仓库代码;并按照当前修改的代码分支对应的代码版本信息,从第一仓库代码中,获取用于构建WebIDE对应的运行依赖的初始化任务代码。
这里,第一仓库代码即为目标开发项目对应的仓库代码,为用户预先开发并存储在git仓库中的、与目标开发项目相关的全部代码。预设代码拉取方式可以为任一种能够从git仓库中拉取代码的方式,为预先设置的与预构建功能相匹配的代码拉取方式。
代码版本信息用于表征当前修改的代码分支对应的代码版本,例如,1.0版本、2.0版本等等。
初始化任务代码为用户基于配置文件定义的、用于构建WebIDE对应的运行依赖的初始化任务对应的代码,配置文件可以挂载在仓库代码对应的目录中,所以初始化任务代码也挂载在仓库代码对应的目录中。
第一仓库代码中存储有不同版本信息对应的初始化任务代码,每个初始化任务代码对应的初始化任务相同,其目的均是为了构建WebIDE对应的运行依赖。WebIDE对应的运行依赖,也就是新的代码分支对应的WebIDE中容器的运行依赖。
本步骤在具体实施时,触发预构建功能之后,可以按照预设的代码拉取方式,从挂载在内网的git仓库中,获取目标开发项目对应的第一仓库代码。然后,可以确定当前修改的代码分支对应的代码版本信息,具体的,代码版本信息可以用commit(提交)id表征。
根据当前修改的代码分支对应的commit id,从第一仓库代码中获取当前修改的代码分支对应的配置文件,再基于配置文件中确定用于构建WebIDE中容器对应的运行依赖的初始化任务代码,也即得到了配置文件中的初始化任务。
S103:执行初始化任务代码,得到并存储第一目标构建产物;其中,第一目标构建产物用于生成WebIDE中容器运行所需的运行依赖。
这里,在得到初始化任务之后,可以在离线的状态下,在WebIDE中创建容器,并利用创建的该容器执行初始化任务,得到该初始化任务对应的第一目标构建产物。
并且,可以将该第一目标构建产物存储,以用于后续在针对其他新的代码分支,启动WebIDE进行该新的代码分支的开发时,构建该新的代码分支对应的新创建的容器的运行依赖。
另外,在将得到的新的第一目标构建产物存储完成之后,可以将创建的用户执行初始化任务的容器删除,实现容器资源的释放。
这样,在确定当前修改的代码分支满足目标条件时,利用触发的预构建功能,获取第一仓库代码中、用于构建WebIDE对应的运行依赖的初始化任务代码,并在离线的状态下完成对初始化任务代码的执行,从而能够在离线的状态下,获取到用于生成WebIDE中容器运行所需的运行依赖的第一目标构建产物;相比现有技术中需要在启动WebIDE容器才可以执行初始化任务代码而言,基于预构建功能,提高了生成第一目标构建产物的灵活性和及时性。通过将第一目标存储产物存储的方式,后续在为新创建的容器创建运行依赖时,直接获取存储的第一目标存储产物并生成运行依赖,不需要用户通过人工的方式进行运行依赖的创建,提高了创建WebIDE容器对应的运行依赖的速度以及容器初始化的效率,进而提高了开发效率。
在一种实施例中,当前修改的代码分支包括目标开发项目对应的主代码分支和每个与主代码分支存在更新关联关系的子代码分支;更新关联关系用于表征在子代码分支发生更新的情况下,主代码分支将同步更新。
这里,由上述实施例可知,目标开发项目可以包括主代码分支以及从主代码分支上切分得到的多个代码分支。对WebIDE中容器的初始化过程存在影响的代码分支可以包括主代码分支,以及每个与主代码分支存在更新关联关系的子代码分支。
这里,在主代码分支发生改变的情况下,其对应的运行依赖也将发生改变,由于各个代码分支为从主代码分支上切分得到的,所以主代码分支的更改将会影响各个代码分支,因此,主代码分支发生改变,针对其对应的各个代码分支而言,每个代码分支对应的运行依赖也将发生改变,所以当前修改的代码分支可以包括主分支。
针对每个与主代码分支存在更新关联关系的子代码分支而言,在该子代码分支发生更新的情况下,将会影响主代码分支发生更新,进而,主代码分支的更新,将会影响其对应的各个子代码分支的运行依赖。所以,当前修改的代码分支还可以包括每个与主代码分支存在更新关联关系的子代码分支。
具体实施时,可以利用WebIDE对应的中心管理平台,设置目标条件。或者,在一种实施方式中,可以在中心管理平台设置匹配规则,该匹配规则用于触发预构建功能。具体的,匹配规则可以为:在利用中心管理平台确定当前修改的代码分支为主代码分支或每个与主代码分支存在更新关联关系的子代码分支的情况下,触发预构建功能;反之,则不触发。
在一种实施例中,针对存储第一目标构建产物的步骤,可以将得到的第一目标构建产物存储在用于进行数据持久存储的目标存储位置。具体的,可以对第一目标构建产物进行中心缓存持久化管理,将其存储在例如本地磁盘、远程数据库等目标存储位置。
在一种实施例中,针对存储第一目标构建产物的步骤,还可以在生成第一目标构建产物之后,生成用于表征第一目标构建产物生成完毕的通知信息。其中,通知信息中可以包括第一目标构建产物,或者,包括第一目标构建产物对应的位置。
之后,可以将该通知信息发送至WebIDE对应的WebIDE调度器。其中,WebIDE调度器用于对与目标开发项目相关的各个WebIDE容器对应的信息进行调度和传递。
目标开发项目可以对应于多个开发任务,不同的开发任务对应于不同的代码分支,不同的代码分支对应于不同的项目节点。一个目标开发项目对应的项目节点的数量固定,与该目标开发项目相关的各个代码分支对应的容器可以部署在目标开发项目对应的项目节点中,一个项目节点对应于一个pod,一个pod可以对应于至少一个容器。
在将通知信息发送至WebIDE调度器之后,在通知信息中包括第一目标构建产物的情况下,可以利用WebIDE调度器,将第一目标构建产物存储在目标开发项目的每个项目节点对应的工作目录中。在将第一目标构建产物存储在项目节点对应的工作目录中之后,在该项目节点下的每个容器在运行时,都可以按照该工作目录进行工作。
这样,将第一目标构建产物存储在项目节点对应的工作目录中之后,不仅可以保证在任一项目节点中新创建的容器,都可以直接在该项目节点获取第一目标构建产物,进而生成运行依赖,保证了第一目标构建产物的可使用性。并且,由于各个项目节点下对应的已创建的容器和/或新创建的容器,都与目标开发项目相关,将第一目标构建产物存储在目标开发项目对应的各个项目节点下,可以实现第一目标构建产物的共享。
在通知信息中包括第一目标构建产物对应的位置的情况下,可以先从该位置处获取第一目标构建产物,之后,可以将用WebIDE调度器,将第一目标构建产物存储在目标开发项目的每个项目节点对应的工作目录中。
此外,在具体实施时,还可以既对第一目标构建产物进行中心缓存持久化管理,也利用WebIDE调度器,将第一目标构建产物存储在每个项目节点对应的工作目录中。
如图2所示,为本公开实施例所提供的一种利用预构建功能生成第一目标构建产物的交互示意图,其中,中心管理平台用于设置匹配规则,并且中心管理平台在确定用户当前修改的代码分支为主代码分支或每个与主代码分支存在更新关联关系的子代码分支的情况下,触发预构建功能;此外,中心管理平台还可以用于获取git仓库权限,并利用git仓库权限获取第一仓库代码(将在后文进行介绍)。
预构建功能用于基于第一仓库代码,生成第一目标构建产物,然后生成并向WebIDE调度器发送通知信息,以使WebIDE调度器将第一目标构建产物存储在每个项目节点对应的工作目录中。预构建功能还用于在生成第一目标构建产物后,将其存储在目标存储位置(进行中心缓存持久化管理)。
并且,项目节点对应的每个容器也可以直接在目标存储位置处拉取目标构建产物(包括第一目标构建产物),以用于创建容器对应的运行依赖。
在一种实施例中,在存储第一目标构建产物之后,还可以应用第一目标构建产物,具体的,可以包括以下步骤:
步骤一、响应于针对目标开发项目中任一开发任务的启动请求,确定启动请求对应的待匹配代码版本信息,并在确定待匹配代码版本信息和第一目标构建产物对应的代码版本信息相匹配的情况下,启动执行任一开发任务的目标容器。
这里,任一开发任务对应于目标开发项目的一个代码分支,该代码分支可以为从目标开发项目对应的主代码分支中新切分得到的代码分支。启动请求为用户针对目标开发项目中任一开发任务发起的启动WebIDE的请求,具体的,启动请求为用户发起的首次启动任一开发任务对应的WebIDE分支的请求。基于启动请求,可以利用WebIDE为该启动请求对应的创建新的目标容器。
待匹配代码版本信息为开发任务对应的代码版本信息,不同的开发任务对应的代码版本信息不同,具体的,待匹配代码版本信息可以为开发任务对应的commit id。
具体实施时,服务端可以响应于用户发起的针对目标开发项目中任一开发任务的启动请求,基于该启动请求对应的开发任务,确定该启动请求对应的commit id,然后,可以将该启动请求对应的commit id和第一目标构建产物对应的代码版本信息(commit id)进行匹配。在确定两个commit id一致的情况下,启动执行任一开发任务的目标容器。
需要说明的是,在具体实施时,启动执行任一开发任务的目标容器的步骤和进行commit id匹配的步骤两者之间不存在严格的执行顺序。例如,也可以先启动执行任一开发任务的目标容器,再进行commit id匹配。
另外,在确定待匹配代码版本信息和第一目标构建产物对应的代码版本信息相匹配的情况下,还需要执行分支切换操作,将WebIDE对应的分支从第一目标构建产物对应的分支切换至该启动请求对应的代码分支。这样,通过分支切换操作,可以保证用户在进行WebIDE后在正确的分支上,即在启动请求对应的分支上。
步骤二、获取存储的第一目标构建产物,并将第一目标构建产物添加在目标容器对应的工作目录中。
这里,在确定待匹配代码版本信息和第一目标构建产物对应的代码版本信息相匹配的情况下,可以获取存储第一目标构建产物。具体的,可以从第一目标构建产物对应的目标存储位置处获取第一目标构建产物。例如,可以在本地磁盘、远程数据库等位置处获取第一目标构建产物,也可以在目标容器对应的项目节点的工作目录中获取。
另外,针对对启动请求对应的commit id进行匹配的步骤,可以将该启动请求对应的commit id分别和每个已生成构建产物的commit id进行匹配,确定是否存在commit id与该启动请求对应的commit id相匹配的已生成构建产物。这里,由于启动请求一定是在生成第一目标构建产物之后发起的,所以已生成构建产物可以包括第一目标构建产物。
步骤二在执行时,可以直接获取确定的commit id与该启动请求对应的commit id相匹配的已生成构建产物。
以获取第一目标构建产物为例进行说明,在获取到第一目标构建产物之后,可以将第一目标构建产物添加在目标容器对应的工作目录中。具体的,可以使用WebIDE中的mount-t overlay overlay-olowerdir=/lower,upperdir=/upper,workdir=/work/merged命令,将第一目标构建产物作为只读层(lower)信息映射到WebIDE的工作目录(merged)下,并将用户针对第一目标构建产物的写信息作为可写层(lower)信息映射到WebIDE的工作目录(merged)下。
另外,在确定待匹配代码版本信息和第一目标构建产物对应的代码版本信息相匹配的情况下,也可以直接获取第一目标构建产物对应的项目节点的缓存目录,将该缓存目录整体添加在目标容器对应的工作目录中。
步骤三、基于目标容器对应的工作目录,生成任一开发任务对应的WebIDE页面。
具体实施时,由于工作目录中包括第一目标构建产物,根据目标容器对应的工作目录进行运行,可以生成目标容器对应的运行依赖,再根据目标容器对应的工作目录中的其他目标信息运行,可以得到目标容器所需的全部信息,例如,代码信息、页面高度信息、页面样式信息等等。进而,基于目标容器所需的全部信息以及运行依赖,可以生成WebIDE页面。其中,WebIDE页面即为目标容器对应的开发页面。
在一种实施例中,针对步骤一中的启动执行任一开发任务的目标容器的步骤,可以按照以下步骤实施:
①:获取目标开发项目对应的第一仓库代码。
具体实施时,可以利用中心管理平台,获取用户预先授权的git权限,进而,可以利用该git权限,从git仓库中获取该任一开发任务对应的目标开发项目的第一仓库代码。
②:基于第一仓库代码,确定目标开发项目对应的启动任务中的第一执行任务;第一执行任务为默认的执行任务。
这里,由上述实施例可知,第一仓库代码中可以包括预先定义的配置文件。在具体实施时,配置文件处可以包括上述实施例中所提及的初始化任务代码以外,还可以包括用于用户自定义的启动任务对应的启动任务代码,启动任务为目标开发项目对应的任务,可以用于为目标开发项目对应的容器分配端口信息、以及可以用于生成容器对应的生成WebIDE页面。
启动任务中可以包括第一执行任务和第二执行任务,第二执行任务为默认执行的任务,第二执行任务为被选择的执行任务,具体的,可以为用户能够选择执行的任务。
本步骤在具体实施时,在获取第一仓库代码之后,可以从第一仓库代码中获取配置文件,再基于配置文件,确定用户自定义的启动任务。从启动任务中获取目标开发项目对应的第一执行任务代码,也即得到第一执行任务。
③:在启动目标容器的过程中,执行第一执行任务,以确定目标容器对应的端口信息。
具体实施时,在确定目标开发项目对应的第一执行任务之后,可以在启动目标容器的过程中,执行第一执行任务,从而,获取目标容器对应的端口信息。也即,启动任务中默认的执行任务可以在启动容器时执行。
在一种实施例中,针对上述步骤三,首先可以基于第一仓库代码,确定目标开发项目对应的启动任务中的至少一个第二执行任务;第二执行任务为被选择的执行任务。
具体实施时,可以从第一仓库代码对应的配置文件,确定获取用户自定义的启动任务,进而可以从启动任务中获取目标开发项目对应的第二执行任务代码,从而得到第二执行任务。
然后,针对得到的每个第二执行任务,可以生成每个第二执行任务对应的第一任务插件。
进一步的,可以基于每个第一任务插件和目标容器对应的工作目录,生成任一开发任务对应的WebIDE页面。其中,WebIDE页面中包括每个第一任务插件分别对应的控件。
这里,控件用于用户在WebIDE页面中对第一任务插件进行选择,例如,控件可支持用户进行点击第一任务插件对应的控件,选择第一任务插件。每个第一任务插件分别对应的控件可以以控制面板的形式展示在WebIDE页面。
在具体实施时,由上述实施例可知,根据目标容器对应的工作目录,可以生成目标容器对应的运行依赖,以及目标容器所需的全部信息。针对每个第一任务插件,可以先确定每个第一任务插件对应的控件,再基于确定的每个控件,确定可以展示的控制面板。之后,可以基于控制面板和目标容器所需的全部信息以及运行依赖,生成WebIDE页面。
其中,控制面板可以展示在WebIDE页面中的任一位置,例如,左上角位置、右上角位置等等,在用户点击控制面板中的控件,服务端可以执行该控件对应的第二执行任务,并将执行结果反馈给客户端。
在一种实施例中,在利用预构建功能得到第一目标构建产物之后,还可以获取存储的每个已生成构建产物对应的容器关联记录。其中,容器关联记录用于记录与对应的已生成构建产物匹配的容器数量。
这里,已生成构建产物包括在生成第一目标构建产物之前,利用预构建功能得到的各个目标构建产物,每个已生成构建产物可以存储在目标开发项目对应的各个项目节点上。各个已生成构建产物的容器关联记录对应的容器数量可以在对启动请求对应的commitid进行匹配时确定。具体的,针对每个已生成构建产物,当该已生成构建产物的commit id与用户发起的启动请求对应的commit id匹配时,可以将该已生成构建产物对应的容器关联记录中的容器数量加1。
然后,根据每个已生成构建产物对应的容器关联记录,可以确定每个已生成构建产物对应的容器数量,之后,可以从已生成构建产物中,筛选出对应的容器数量小于或等于预设数量(例如0)的已生成构建产物。进而,可以将筛选出已生成构建产物,在目标开发项目的每个项目节点对应的工作目录中删除。这样,实现了对缓存空间的释放,避免了缓存空间被占用而影响开发速度的问题。
并且,针对筛选出对应的容器数量小于或等于预设数量的已生成构建产物,仅将其在目标开发项目的每个项目节点对应的工作目录中删除,但不会在目标存储位置处删除。这样,可以保证后续如果需要该已生成构建产物,可以在目标存储位置处获取,不需要重新生成,有利于提高开发效率。
此外,针对刚生成的第一目标构建产物而言,其对应的容器数量为0,但由于第一目标构建产物为刚生成的构建产物,所以即使第一目标构建产物对应的容器数量小于或等于预设数量,此次也不会删除第一目标构建产物。
在一种实施例中,在确定目标开发项目对应的任一开发任务执行完成的情况下,可以删除该任一开发任务对应的容器,以及更新该容器对应于各个已生成目标构建产物(可以包括第一目标构建产物)对应的容器数量。
以任一开发任务对应的目标构建产物为第一目标构建产物为例,在该任一开发任务执行完成的情况下,可以删除该任一开发任务对应的目标容器。并且,在删除目标容器之后,可以更新第一目标构建产物对应的容器数量。具体的,可以将第一目标构建产物对应的容器关联记录中记录的容器数量减1。
在一种实施例中,针对上述步骤一,在确定待匹配代码版本信息和第一目标构建产物对应的代码版本信息不匹配的情况下,也即在确定启动请求对应的commit id和第一目标构建产物对应的commit id不同的情况下,还可以按照以下步骤生成开发任务对应的WebIDE页面:
P1:在确定待匹配代码版本信息和第一目标构建产物对应的代码版本信息不匹配的情况下,获取待匹配代码版本信息对应的第二仓库代码。
这里,第二仓库代码可以为与第一仓库代码不同的仓库代码,为用户编写的启动请求对应的仓库代码,为未执行过的仓库代码。具体的,第二仓库代码也为目标开发项目对应的仓库代码,例如,可以为修改后的第一仓库代码。
在确定启动请求对应的commit id和第一目标构建产物对应的commit id不同的情况下,以及,确定不存在任一已生成构建产物对应的commit id和启动请求对应的commitid相同的情况下,说明该启动请求对应的目标构建产物还未生成,因此可以先基于启动请求对应的待匹配代码版本信息,利用中心管理平台,从git仓库中拉取该待匹配代码版本信息对应的第二仓库代码。
P2:在目标容器中,执行第二仓库代码中的初始化任务代码,确定第二目标构建产物,并将第二目标构建产物添加在目标容器对应的工作目录中。
具体实施时,可以基于第二仓库代码,确定第二仓库代码对应的初始化任务代码,并执行初始化任务代码,得到第二目标构建产物,并将第二目标构建产物添加在目标容器对应的工作目录中,以用于创建目标容器对应运行依赖。
这里,生成的第二目标构建产物仅添加在目标容器对应的工作目录中,不会添加在目标开发项目对应的所有项目节点中,仅供目标容器使用。
P3:基于第二仓库代码,确定待匹配代码版本信息对应的至少一个第二执行任务,并生成每个第二执行任务对应的第二任务插件;第二执行任务为被选择的执行任务。
这里,基于第二仓库代码,可以先确定第二仓库代码对应的启动任务,进而,可以确定启动任务中的至少一个第二执行任务;之后,可以生成每个第二执行任务对应的第二任务插件。
P4:基于每个第二任务插件和目标容器对应的工作目录,生成任一开发任务对应的WebIDE页面。
这里,任一开发任务为启动请求对应的开发任务。
具体实施时,针对P4,可以参照上述实施例中的基于每个第一任务插件和目标容器对应的工作目录,生成任一开发任务对应的WebIDE页面的步骤,此处不再赘述。
关于上述P1~P4的具体实施步骤,可以参照上述各实施例,此处不再赘述。
另外,针对未开启预构建功能的情况下,在获取到针对目标开发项目中任一开发任务的启动请求之后,可以先获取第一仓库代码并开启目标容器。然后,在目标容器中,先执行第一仓库代码对应的初始化任务,再执行启动任务,最终得到开发任务对应的WebIDE页面。关于得到WebIDE页面的具体实施步骤,可以参照上述关于响应于针对目标开发项目中任一开发任务的启动请求的各实施例介绍,此处不再赘述。
其中,关于预构建功能的开启和关闭,可以利用中心管理平台进行控制。
此外,针对任一开发任务,在该开发任务对应的容器创建完成后,如果后续再次利用WebIDE启动该容器,都不会再执行该开发任务对应的初始化任务,只会执行该开发任务对应的启动任务。
本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
基于同一发明构思,本公开实施例中还提供了与启动方法对应的启动装置,由于本公开实施例中的装置解决问题的原理与本公开实施例上述启动方法相似,因此装置的实施可以参见方法的实施,重复之处不再赘述。
如图3所示,为本公开实施例提供的一种启动装置的示意图,包括:
触发模块301,用于响应当前修改的代码分支满足目标条件,触发预构建功能;所述当前修改的代码分支为目标开发项目对应的代码分支;所述目标条件是指所述代码分支对在线集成开发环境WebIDE中容器的初始化过程存在影响;
获取模块302,用于按照预设代码拉取方式,获取所述目标开发项目对应的第一仓库代码;并按照所述当前修改的代码分支对应的代码版本信息,从所述第一仓库代码中,获取用于构建所述WebIDE对应的运行依赖的初始化任务代码;
执行模块303,用于执行所述初始化任务代码,得到并存储第一目标构建产物;其中,所述第一目标构建产物用于生成所述WebIDE中容器运行所需的运行依赖。
在一种可能的实施方式中,所述装置还包括:
启动模块304,用于在得到并存储第一目标构建产物之后,响应于针对所述目标开发项目中任一开发任务的启动请求,确定所述启动请求对应的待匹配代码版本信息,并在确定所述待匹配代码版本信息和所述第一目标构建产物对应的代码版本信息相匹配的情况下,启动执行所述任一开发任务的目标容器;
获取存储的所述第一目标构建产物,并将所述第一目标构建产物添加在所述目标容器对应的工作目录中;
基于所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面。
在一种可能的实施方式中,所述启动模块304,用于获取所述目标开发项目对应的第一仓库代码;
基于所述第一仓库代码,确定所述目标开发项目对应的启动任务中的第一执行任务;所述第一执行任务为默认的执行任务;
在启动所述目标容器的过程中,执行所述第一执行任务,以确定所述目标容器对应的端口信息。
在一种可能的实施方式中,所述启动模块304,用于基于所述第一仓库代码,确定所述目标开发项目对应的启动任务中的至少一个第二执行任务;所述第二执行任务为被选择的执行任务;
生成每个所述第二执行任务对应的第一任务插件;
基于每个所述第一任务插件和所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面,其中,所述WebIDE页面中包括每个所述第一任务插件分别对应的控件。
在一种可能的实施方式中,所述执行模块303,用于将所述第一目标构建产物存储在用于进行数据持久存储的目标存储位置。
在一种可能的实施方式中,所述执行模块303,用于生成用于表征所述第一目标构建产物生成完毕的通知信息,并将所述通知信息发送给所述目标开发项目对应的WebIDE调度器;
利用所述WebIDE调度器将所述第一目标构建产物存储在所述目标开发项目的每个项目节点对应的工作目录中,其中,一个项目节点对应于至少一个容器;
所述启动模块304,用于确定所述目标容器对应的目标项目节点,从所述目标项目节点对应的工作目录中获取所述第一目标构建产物。
在一种可能的实施方式中,所述执行模块303,还用于在得到所述第一目标构建产物之后,获取存储的每个已生成构建产物对应的容器关联记录;所述容器关联记录用于记录与对应的已生成构建产物匹配的容器数量;
在所述目标开发项目的每个项目节点对应的工作目录中,删除所述容器数量小于或等于预设数量的已生成构建产物。
在一种可能的实施方式中,所述装置还包括:
删除模块305,用于在确定所述任一开发任务执行完成的情况下,删除所述目标容器,并更新所述第一目标构建产物对应的所述容器数量。
在一种可能的实施方式中,所述当前修改的代码分支包括所述目标开发项目对应的主代码分支和每个与所述主代码分支存在更新关联关系的子代码分支;所述更新关联关系用于表征在所述子代码分支发生更新的情况下,所述主代码分支将同步更新。
在一种可能的实施方式中,所述启动模块304,还用于在确定所述待匹配代码版本信息和所述第一目标构建产物对应的代码版本信息不匹配的情况下,获取所述待匹配代码版本信息对应的第二仓库代码;
在所述目标容器中,执行所述第二仓库代码中的初始化任务代码,确定第二目标构建产物,并将所述第二目标构建产物添加在所述目标容器对应的工作目录中;
基于所述第二仓库代码,确定所述待匹配代码版本信息对应的至少一个第二执行任务,并生成每个所述第二执行任务对应的第二任务插件;所述第二执行任务为被选择的执行任务;
基于每个所述第二任务插件和所述目标容器对应的工作目录,生成所述任一开发任务对应的WebIDE页面。
关于装置中的各模块的处理流程、以及各模块之间的交互流程的描述可以参照上述方法实施例中的相关说明,这里不再详述。
本公开实施例还提供了一种计算机设备,如图4所示,为本公开实施例提供的一种计算机设备结构示意图,包括:
处理器41和存储器42;所述存储器42存储有处理器41可执行的机器可读指令,处理器41用于执行存储器42中存储的机器可读指令,所述机器可读指令被处理器41执行时,处理器41执行下述步骤:S101:响应当前修改的代码分支满足目标条件,触发预构建功能;当前修改的代码分支为目标开发项目对应的代码分支;目标条件是指代码分支对在线集成开发环境WebIDE中容器的初始化过程存在影响;S102:按照预设代码拉取方式,获取目标开发项目对应的第一仓库代码;并按照当前修改的代码分支对应的代码版本信息,从第一仓库代码中,获取用于构建WebIDE对应的运行依赖的初始化任务代码以及S103:执行初始化任务代码,得到并存储第一目标构建产物;其中,第一目标构建产物用于生成WebIDE中容器运行所需的运行依赖。
上述存储器42包括内存421和外部存储器422;这里的内存421也称内存储器,用于暂时存放处理器41中的运算数据,以及与硬盘等外部存储器422交换的数据,处理器41通过内存421与外部存储器422进行数据交换。
上述指令的具体执行过程可以参考本公开实施例中所述的启动方法的步骤,此处不再赘述。
本公开实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法实施例中所述的启动方法的步骤。其中,该存储介质可以是易失性或非易失的计算机可读取存储介质。
本公开实施例所提供的启动方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行上述方法实施例中所述的启动方法的步骤,具体可参见上述方法实施例,在此不再赘述。
该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。在本公开所提供的几个实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,又例如,多个单元或组件可以结合,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些通信接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本公开各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本公开的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本公开各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-OnlyMemory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本公开的具体实施方式,用以说明本公开的技术方案,而非对其限制,本公开的保护范围并不局限于此,尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本公开揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本公开实施例技术方案的精神和范围,都应涵盖在本公开的保护范围之内。因此,本公开的保护范围应所述以权利要求的保护范围为准。