一种软件自动化部署方法及装置
技术领域
本申请涉及计算机软件技术领域,尤其涉及一种软件自动化部署方法及装置。
背景技术
Java是一种面向对象的编程语言,吸收了C++语言的各种优点,同时摒弃了C++中难以理解的多继承、指针等概念,具有简单、面向对象、分布式、健壮性、安全性、可移植性和多态性的特点。为了增强Java的可移植性,在软件部署过程中通常采用自动化部署的软件部署方式。软件部署是指将软件代码放到软件运行环境中让用户使用新部署程序的整个工作流程。在整个工作流程中包括代码检出、软件打包,软件上传、软件发布、环境参数修改和软件运行环境重新启动。软件自动化部署,是指在尽量使用工具、避免人工干预的前提下,实现软件部署。如果采用软件自动化部署方式进行软件部署,则能够增加软件的可预测性,提供软件的总体质量,同时提高部署软件的效能。
在现有技术中,一般基于Java的软件自动化部署通常是仅仅依据Jenkins工具和其相关插件完成。Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。基于Jenkins进行软件自动化部署,必须安装Jenkins工具否则无法进行软件部署工作。在使用Jenkins工具进行软件部署的过程中,不仅需要维护Jenkins工具本身,还需要维护Jenkins相关插件。一旦出现Jenkins相关插件无法实现的需求,软件自动化部署将无法实现。总之,基于Jenkins的软件自动化部署方式,具有维护成本高和灵活性差的缺点。
发明内容
本申请提供了一种软件自动化部署方法及装置,以解决现有技术中维护成本高和灵活性差的问题。
第一方面,本申请提供了一种软件自动化部署方法,该方法采用Ansible脚本进行编辑,该方法包括:获取目标软件的前端代码,所述前端代码包含至少一个前端代码模块;获取所述前端代码对应的后端代码;并行编译所述前端代码和所述后端代码,分别得到前端代码编译结果和后端代码编译结果;将所述前端代码编译结果和所述后端代码编译结果合并打包成归档压缩包;执行所述归档压缩包,部署所述目标软件。
结合第一方面,在第一方面第一种可能的实现方式中,所述获取目标软件的前端代码之前,所述方法还包括:构建用户操作界面,根据所述用户操作界面获取前端代码提交版本号、后端代码提交版本号、部署环境参数和部署操作参数。
结合第一方面,在第一方面的第二种可能的实现方式中,所述获取目标软件的前端代码包括:根据所述前端代码提交版本号获取目标软件的前端代码;相应的,所述获取所述前端代码对应的后端代码包括:根据所述后端代码提交版本号获取所述前端代码对应的后端代码;相应的,所述执行所述归档压缩包,部署所述目标软件包括:根据所述部署环境参数和所述部署操作参数执行所述归档压缩包,部署所述目标软件。
结合第一方面,在第一方面的第三种可能的实现方式中,所述部署环境参数包括网络互联协议IP地址、用户名、密码和预置存储位置;相应的,所述根据所述部署环境参数和所述部署操作参数执行所述归档压缩包,部署所述目标软件,包括:根据所述用户名和密码,将所述归档压缩包保存至所述IP地址对应的终端的所述预置存储位置;停止运行所述终端的网络环境,查找并删除所述归档压缩包对应的运行目录中的软件代码;将所述归档压缩包解压至所述运行目录;根据所述部署操作参数,修改所述终端的参数配置文件;重启所述网络环境,完成所述目标软件的部署。
结合第一方面,在第一方面的第四种可能的实现方式中,所述执行所述归档压缩包,部署所述目标软件之后,所述方法还包括:获取更新的前端代码;判断所述更新的前端代码是否能够独立编译;如果判断结果为是,则编译所述更新的前端代码,得到更新的前端代码编译结果;执行所述更新的前端代码编译结果,重新部署所述目标软件。
第二方面,本申请还提供了一种软件自动化部署装置,所述装置包括用于执行第一方面各种实现方式中方法步骤的模块。
第三方面,本申请还提供了一种终端,包括:处理器及存储器;所述处理器可以执行所述存储器中所存储的程序或指令,从而实现以第一方面各种实现方式所述软件自动化部署方法。
第四方面,本申请还提供了一种存储介质,该计算机存储介质可存储有程序,该程序执行时可实现包括本申请提供的软件自动化部署方法各实施例中的部分或全部步骤。
本申请提供的一种软件自动化部署方法及装置,采用Ansible脚本进行编辑,具体通过获取目标软件的前端代码,所述前端代码包含至少一个前端代码模块,然后获取前端代码对应的后端代码,再并行编译前端代码和后端代码,再将前端代码编译结果和后端代码编译结果合并打包成归档压缩包,最后执行归档压缩包,部署目标软件。与现有技术相比,在实现软件自动化部署的过程中,由于Ansible的支持任何语言编写的模块化特性,不需要加载相关插件,在编译过程中不受插件功能的限制,易于实现自动化部署,同时易于维护节省成本。前端代码和后端代码独立编译和部署,以及前端代码模块化独立编译和部署,缩小部署粒度,提高软件部署的灵活性。前端代码与后端代码独立并行编译,以及前端代码模块化并行编译,均提高了编译速度,也提高软件自动化部署的效率。
附图说明
为了更清楚地说明本申请的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请提供的一种软件自动化部署方法流程图;
图2为本申请提供的另一种软件自动化部署方法流程图;
图3为本申请提供的一种更新目标软件的方法流程图;
图4为本申请提供的一种软件自动化部署装置组成框图;
图5为本申请提供的另一种软件自动化部署装置组成框图。
具体实施方式
现有技术中自动化部署过程完全是仅仅由Jenkins相关插件来实现的,一旦出现插件无法实现的需求,自动化部署将无法实现。而Ansible基于Python开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。基于Ansible工具编译前端代码或后端代码的过程中,不需要再加载其他相关插件,能保证编译工作不受插件限制。在本申请中采用Ansible脚本进行编辑。参见图1,为本申请提供的一种软件自动化部署方法流程图。如图1所示,该方法包括:
101、获取目标软件的前端代码,所述前端代码包含至少一个前端代码模块。
前端是用户能看到能操作的软件界面。前端代码是实现软件界面的程序代码,该程序代码的编写语言为Java语言。软件自动化部署之前,已经编写好各个软件模块的代码。软件自动化部署就是将编写好的软件模块代码重新整合编译的过程。目标软件是自动化部署的最终目标。
目标软件的前端代码至少包括一个前端代码模块,前端的代码模块可以依据功能划分、可以依据代码编程人员划分,还可以依据软件界面的位置布局划分,在本申请实施例中对前端代码模块的划分依据不做限定。前端代码是依据目标软件的部署目的选取的,部署目的可以是发行目标软件、更新目标软件或测试目标软件。
本申请中,前端代码提交版本号是前端代码的标识信息,可以通过前端代码提交版本号获取目标软件的前端代码,即获取目标软件的前端代码的所有前端代码模块。
102、获取前端代码对应的后端代码。
后端是指用户操作软件前端界面后,在后面负责处理业务逻辑的软件部分。前端与后端,存在特定的对应关系。只有后端代码能够实现前端代码的界面,才能够实现软件部署,所以需要获取前端代码对应的后端代码。
本申请中,前端代码和后端代码相对应,后端代码也可以包含至少一个后端代码模块;当后端代码只有一个后端代码模块时,前端代码和后端代码的对应方式可以是无论目标软件的前端代码包括多少个前端代码模块都对应同一个后端代码。该后端代码也可以包含多个后端代码模块,前端代码和后端代码的对应方式可以是一个前端代码模块对应一个后端代码模块。
本申请中,后端代码提交版本号是后端代码的标识信息,可以通过后端代码提交版本号获取目标软件的后端代码。
103、并行编译所述前端代码和所述后端代码,分别得到前端代码编译结果和后端代码编译结果。
前端代码和后端代码采用并行方式分别编译,在编译过程中互不影响,以使得前端代码和后端代码能够单独部署,减小部署粒度,加快软件的更新和部署速度。前端代码包含的各个前端模块和后端代码同时并行方式编译。在编译过程中,不同代码模块并行编译,节省大量的代码编译时间。
104、将所述前端代码编译结果和所述后端代码编译结果合并打包成归档压缩包。
将前端代码编译结果和后端代码编译结果合并打包成归档压缩包,归档压缩包类型为war包。为了便于程序部署,将编译结果打包成归档压缩包,这个过程和Java类文件打包成JAR文件的过程类似,利用war归档文件,可以把相关的资源集中在一起发布,在这个过程中把war文件作为部署单元使用。
105、执行所述归档压缩包,部署所述目标软件。
部署目标软件,是将软件代码放到软件运行环境中让用户使用新部署程序的整个工作流程。执行归档压缩包,或者称之为运行归档压缩包,实现自动部署目标软件的目的。本申请中,前端代码的编译、后端代码的编译、将前后端编译结果合并打包以及部署都是通过对应的Ansible脚本命令来实现,完全脱离Jenkins来进行自动化部署。
本申请提供的一种软件自动化部署方法,采用Ansible脚本进行编辑,具体通过获取目标软件的前端代码,所述前端代码包含至少一个前端代码模块,然后获取前端代码对应的后端代码,再并行编译前端代码和后端代码,再将前端代码编译结果和后端代码编译结果合并打包成归档压缩包,最后执行归档压缩包,部署目标软件。与现有技术相比,在实现软件自动化部署的过程中,由于Ansible的支持任何语言编写的模块化特性,不需要加载相关插件,在编译过程中不受插件功能的限制,易于实现自动化部署,同时易于维护节省成本。前端代码和后端代码独立编译和部署,以及前端代码模块化独立编译和部署,缩小部署粒度,提高软件部署的灵活性。前端代码与后端代码独立并行编译,以及前端代码模块化并行编译,均提高了编译速度,也就提高软件自动化部署的效率。
参见图2,为本申请提供的另一种软件自动化部署方法流程图。如图2所示,该方包括:
201、构建用户操作界面,根据所述用户操作界面获取前端代码提交版本号、后端代码提交版本号、部署环境参数和部署操作参数。
用户操作界面,是指软件的人机交互、操作逻辑、界面美观的整体设计。用户操作界面是基于Jenkins构建的,为实现软件自动化部署提供构建平台。需要说明的是,本申请的用户操作界面,为了实现软件自动化部署而设计的参数选取界面,不是经自动化部署后形成的界面。
本申请中,用户操作界面包括前端代码选择菜单、后端代码选择菜单、代码分支选择菜单、环境选择菜单和操作选择菜单。根据用户操作界面能够获取前端代码提交版本号、后端代码提交版本号、部署环境参数和部署操作参数。
其中前端代码选择菜单用于选择前端代码提交版本号,前端代码提交版本号是前端代码的标识信息,后端代码选择菜单用于选择后端代码提交版本号,后端代码提交版本号是后端代码的标识信息。不同的前端模块和前端代码都具有不同的前端代码提交版本号,可以以此为依据查找前端代码内容。前端代码提交版本号,由版本控制系统控制。版本控制系统,可以记录代码文件的每次改动,并为每次改动添加前端代码提交版本号,这样根据前端代码提交版本号就能回溯到代码的任何一次改动。前端代码的版本控制系统的类型有Git,SVN等。
代码分支菜单用于选择代码分支,其中代码分支是通过Groovy脚本从Git版本库中获取所有分支信息。前端代码分支和后端代码分支是独立存储的,每个代码分支上都有多个节点,每个节点对应一个提交版本号。
本申请中,根据用户操作界面获取前端代码提交版本号包括以下方法:
第一种方法:根据用户操作界面的前端代码选择菜单获取前端代码提交版本号。
在用户操作界面上,直接选择前端代码选择菜单中的下拉选项获取前端代码提交版本号;每个前端代码提交版本号都是唯一的。
第二种方法:根据用户操作界面的前端代码选择菜单和代码分支菜单获取前端代码提交版本号。
在用户操作界面上,选择代码分支菜单中的代码分支后,该前端代码选择菜单中会默认选择最新版本前端代码提交版本号作为前端代码提交版本号。
或者,在用户操作界面上,选择代码分支菜单中的代码分支后,可以按照需求选择前端代码选择菜单中的一个前端代码提交版本号作为前端代码提交版本号。该前端代码提交版本号不是最新版本前端代码提交版本号。
后端代码选择菜单用于选择后端代码提交版本号,与前端代码类似,后端代码也具有不同的后端代码提交版本号,可以以此为依据查找后端代码。后端代码提交版本号,由版本控制系统控制。版本控制系统,可以记录代码文件的每次改动,并为每次改动添加后端代码提交版本号,这样根据后端代码提交版本号就能回溯到代码的任何一次改动。同样的,后端代码的版本控制系统的类型有Git,SVN等。
本申请中,根据用户操作界面获取后端代码提交版本号的方法与上述根据用户操作界面获取前端代码提交版本号的方法类似,具体请参将上述描述,在此不再赘述。
环境选择菜单用于选择部署环境参数,部署环境参数通过Groovy脚本从Ansible环境参数配置文件中获取。部署环境可以包括开发环境(简称dev)、测试环境(简称test)、准生产环境和生产环境(简称prod),从另一维度讲,部署环境还可以根据项目发生地或归属地分为xx开发环境、xx测试环境、xx准生产环境和xx生产环境等,在此不做具体限定。比如web_dev_北京,表示为北京开发环境,其中web是项目的简称,dev是开发环境的简称,北京是项目发生地或项目归属地。此外,测试环境简称test,生产环境简称prod。
操作选择菜单用于选择部署操作参数。
202、根据前端代码提交版本号获取目标软件的前端代码。
前端代码提交版本号,可以是版本控制系统最新的,也可以是由用户在用户操作界面上手动选择的。本申请中,根据前端代码提交版本号获取前端代码,其中,该前端代码为模块化设计,即该前端代码包含至少一个前端代码模块。
203、根据后端代码提交版本号获取所述前端代码对应的后端代码。
根据后端代码提交版本号获取该前端代码对应的后端代码。后端代码与前端代码相对应,后端代码也可以包含至少一个后端代码模块;当后端代码只有一个后端代码模块时,前端代码和后端代码的对应方式可以是无论目标软件的前端代码包括多少个前端代码模块都对应同一个后端代码。该后端代码也可以包含多个后端代码模块,前端代码和后端代码的对应方式可以是一个前端代码模块对应一个后端代码模块。
204、并行编译前端代码和后端代码,分别得到前端代码编译结果和后端代码编译结果。
前端代码和后端代码采用并行的方式进行编译,并且,前端代码中包含的各个前端代码模块也可以采用并行的方式进行编译,分别得到前端代码编译结果和后端代码编译结果,其中所述前端代码编译结果包含多个前端代码模块的编译结果。
如果所述后端代码也包含多个后端代码模块时,该各个后端代码模块也可以并行编译,得到后端代码的编译结果,该后端代码编译结果包含多个后端代码模块的编译结果。
前端代码与后端代码并行编译,以及代码模块化并行编译,均提高了编译速度,也就提高软件自动化部署的效率。
205、将前端代码编译结果和后端代码编译结果合并打包成归档压缩包。
本申请中,当前端代码模块为多个,后端代码模块为一个时,将前端代码编译结果和后端代码编译结果合并打包成归档压缩包具体为:
将多个前端代码模块对应的编译结果直接和后端代码编译结果合并打包成归档压缩包。
本申请中,当前端代码模块为N个,相应的后端代码模块也为N个时,将前端代码编译结果和后端代码编译结果合并打包成归档压缩包,N大于等于2具体为:
将第1个前端代码模块的编译结果和对应的第1个后端代码模块的编译结果进行合并打包,得到第1归档压缩包;
以此类推,将第N个前端代码模块的编译结果和对应的第N个后端代码模块的编译结果进行合并打包,得到第N归档压缩包。
206、根据部署环境参数和部署操作参数执行所述归档压缩包,部署所述目标软件。
部署环境通过Groovy脚本从Ansible环境参数文件获取。使用Groovy该种语言不必编写过多的代码,同时又具有闭包和动态语言中的其他特性。部署环境参数还包括各环境机器的IP地址、用户名、密码和预置存储位置等信息,这样用户部署时不用去记具体部署机器的IP地址,而只用选择部署环境参数就可以了。这在同一个部署环境里有多台机器时尤为方便。具体包括:根据所述用户名和密码,将所述归档压缩包保存至所述IP地址对应的终端的所述预置存储位置;停止运行所述终端的网络环境,查找并删除所述归档压缩包对应的运行目录中的软件代码;将所述归档压缩包解压至所述运行目录;根据所述部署操作参数,修改所述终端的参数配置文件;重启所述网络环境,完成所述目标软件的部署。最后在目标IP地址对应的终端上,成功部署目标软件。
本申请中可以实现部署环境的统一配置,在实现部署环境参数的过程中,从配置文件中读取配置参数(例如web_dev,web_test,web_prod)用来动态生成部署环境参数。在部署时不用去记具体部署机器的IP地址,而只用选择部署环境参数就可以了。这在一个部署环境里有多台机器时尤为方便。例如web_prod环境下就有两台机器。
软件部署是指将软件代码放到软件运行环境中让用户使用新部署程序的的整个工作流程。在整个工作流程中按照执行顺序通常包括代码检出、软件打包、软件上传、软件发布、环境参数修改和软件运行环境重新启动。部署操作可以是整个工作流程中的任一步骤。代码检出是将软件代码从版本控制系统中下载下来,软件代码可以是最新的代码,也可以根据版本号下载某个特定版本的软件代码。软件打包是将软件代码按照软件运行环境的要求打包成特定格式的软件包,在本申请中打包成war格式。软件上传是将软件包复制到软件运行环境所在的机器上。软件发布是将新软件包放入软件运行环境中。本文中软件运行环境使用的是Tomcat容器,那么首先要停止Tomcat容器,删除Tomcat目录下webapps目录中旧的软件包,然后将新的软件包放到Tomcat目录下的webapps目录中。环境参数修改,可以修改Tomcat配置文件,也可以修改机器IP地址,不是每次部署都需要修改,需要根据实际情况来设置。软件运行环境重新启动是指重启软件运行环境。本文中需要重启Tomcat容器,好让Tomcat重新载入软件代码,以便用户访问和使用软件。根据软件部署的步骤,对应生成操作选择菜单的所有菜单选项。用户可以根据实际需求,选择部署操作。
本申请提供的一种软件自动化部署方法,采用Ansible脚本进行编辑,具体通过获取目标软件的前端代码,所述前端代码包含至少一个前端代码模块,然后获取前端代码对应的后端代码,再并行编译前端代码和后端代码,再将前端代码编译结果和后端代码编译结果合并打包成归档压缩包,最后执行归档压缩包,部署目标软件。与现有技术相比,在实现软件自动化部署的过程中,由于Ansible的支持任何语言编写的模块化特性,不需要加载相关插件,在编译过程中不受插件功能的限制,易于实现自动化部署,同时易于维护节省成本。前端代码和后端代码独立编译和部署,以及前端代码模块化独立编译和部署,缩小部署粒度,提高软件部署的灵活性。前端代码与后端代码并行编译,以及前端代码模块化并行编译,均提高了编译速度,也就提高软件自动化部署的效率。
在图1或2所示方法的基础上,在目标软件部署结束后,还可能对目标软件进行更新。参见图3,为本申请提供的一种更新目标软件的方法流程图。如图3所示,执行归档压缩包,部署目标软件之后,该方法还包括:
301、获取更新的前端代码。
更新前端代码,可以指所有的前端代码,也可以指一个或几个前端代码模块。
302、编译更新的前端代码,得到更新的前端代码编译结果。
303、执行所述更新的前端代码编译结果,重新部署所述目标软件。
与执行所述归档压缩包,部署所述目标软件类似,具体的执行所述更新的前端代码编译结果,重新部署所述目标软件包括:将所述更新的前端代码编译结果保存至所述预置存储位置;停止运行所述终端的网络环境,查找并删除所述前端代码对应的运行目录中的软件代码;将所述更新的前端代码的编译结果保存至所述运行目录;根据所述部署操作参数,修改所述终端的参数配置文件;重启所述网络环境,完成所述目标软件的部署。
只编译更新的前端代码,得到更新的前端代码编译结果,该编译结果内容较少,不需要压缩后重新部署目标软件。这种只编译更新的前端代码部署方式,就是前端代码的单独部署。在前端代码的单独编译和单独部署的过程中,不需要重新编译后端代码,能够节省编译时间,也节省终端下载更新代码的时间,也不需要压缩与解压,总之能够节省时间提高效率。前端代码实现单独部署,减小部署粒度,提供软件自动化部署的灵活性。
参见图4,为本申请提供的一种软件自动化部署装置组成框图。参见图5,为本申请提供的另一种软件自动化部署装置组成框图。作为图1和图2所示方法的具体实现上,本申请提供的软件自动化部署装置,如图4所示,该装置采用Ansible脚本进行编辑该装置包括:
第一获取单元41,用于获取目标软件的前端代码,所述前端代码包含至少一个前端代码模块;
第二获取单元42,用于获取所述前端代码对应的后端代码;
第一编译单元43,用于并行编译所述前端代码和所述后端代码,分别得到前端代码编译结果和后端代码编译结果;
第一打包单元44,用于将所述前端代码编译结果和所述后端代码编译结果合并打包成归档压缩包;
第一部署单元45,用于执行所述归档压缩包,部署所述目标软件。
进一步地,如图5所示,该装置还包括:
构建单元46,用于所述获取目标软件的前端代码之前,构建用户操作界面,根据所述用户操作界面获取前端代码提交版本号、后端代码提交版本号、部署环境参数和部署操作参数。
进一步地,如图5所示,所述第一获取单元41包括:
第一获取子单元411,用于根据所述前端代码提交版本号获取目标软件的前端代码;
相应的,所述第二获取单元42包括:
第二获取子单元421,用于根据所述后端代码提交版本号获取所述前端代码对应的后端代码;
所述第一部署单元45包括:
第一部署子单元451,用于根据所述部署环境参数和所述部署操作参数执行所述归档压缩包,部署所述目标软件。
进一步地,如图5所示,所述部署环境参数包括网络互连协议IP地址、用户名、密码和预置存储位置;
相应的,所述第一部署子单元451包括:
保存模块4511,用于根据所述用户名和密码,将所述归档压缩包保存至所述IP地址对应的终端的所述预置存储位置;
停止模块4512,用于停止运行所述终端的网络环境,查找并删除所述归档压缩包对应的运行目录中的软件代码;
解压模块4513,用于将所述归档压缩包解压至所述运行目录;
修改模块4514,用于根据所述部署操作参数,修改所述终端的参数配置文件;
重启模块4515,用于重启所述网络环境,完成所述目标软件的部署。
进一步地,如图5所示,所述装置还包括:
第三获取单元47,用于所述执行所述归档压缩包,部署所述目标软件之后,获取更新的前端代码;
第二编译单元48,用于编译所述更新的前端代码,得到更新的前端代码编译结果;
第二部署单元49,用于执行所述更新归档压缩包,部署所述更新的前端代码。
本申请提供的一种软件自动化部署方法,采用Ansible脚本进行编辑,具体通过获取目标软件的前端代码,所述前端代码包含至少一个前端代码模块,然后获取前端代码对应的后端代码,再并行编译前端代码和后端代码,再将前端代码编译结果和后端代码编译结果合并打包成归档压缩包,最后执行归档压缩包,部署目标软件。与现有技术相比,在实现软件自动化部署的过程中,由于Ansible的支持任何语言编写的模块化特性,不需要加载相关插件,在编译过程中不受插件功能的限制,易于实现自动化部署,同时易于维护节省成本。前端代码和后端代码独立编译和部署,以及前端代码模块化独立编译和部署,缩小部署粒度,提高软件部署的灵活性。前端代码与后端代码并行编译,以及前端代码模块化并行编译,均提高了编译速度,也就提高软件自动化部署的效率。
具体实现中,本发明还提供了一种终端,包括:处理器及存储器;所述处理器可以执行所述存储器中所存储的程序或指令,从而实现本发明提供的软件自动化部署方法的各实施例中的部分或全部步骤。
具体实现中,本发明还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本发明提供的软件自动化部署方法的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体(英文:read-only memory,简称:ROM)或随机存储记忆体(英文:random access memory,简称:RAM)等。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。以上所述的本发明实施方式并不构成对本发明保护范围的限定。