掌桥专利:专业的专利平台
掌桥专利
首页

一种应用发版方法、系统及计算机可读存储介质

文献发布时间:2023-06-19 10:24:22


一种应用发版方法、系统及计算机可读存储介质

技术领域

本发明涉及发版领域,主要涉及一种应用发版方法、系统及计算机可读存储介质。

背景技术

随着分布式架构和微服务架构的兴起,需要发版的应用越来越多,多达几十上百个应用,手动发版会带来很大风险,为了降低手动发版带来的不可控异常,本申请提供一种自动化、在线化、系统化应用发版方法和系统。

发明内容

本发明实施例中提供一种应用发版方法、系统及计算机可读存储介质,用以保证系统的稳定运行,提高了应用版本发布的安全性。

第一方面,本发明提供一种应用发版方法,所述应用发版方法应用于发版服务器,包括:

通过预先构建的主机流量切换脚本切换流量至主机;

通过预先构建的备机应用发版脚本在备机发版应用;

在验证备机应用发版功能正常的情况下,通过预先构建的备机流量切换脚本切换流量至备机;

通过预先构建的主机应用发版脚本在主机发版应用;

在验证主机应用发版功能正常的情况下,通过预先构建的负载均衡切换脚本将流量切换至主机和备机的负载均衡状态。

可选的,所述主机流量切换脚本的内容包含:远程更改反向代理的负载IP为主机IP配置,并热加载配置;

所述备机流量切换脚本的内容包含:远程更改反向代理的负载IP为备机IP配置,并热加载配置;

所述负载均衡切换脚本的内容包含:远程更改反向代理的负载IP为主机IP和备机IP共同负载配置,并热加载配置。

可选的,所述通过预先构建的主机流量切换脚本切换流量至主机之前,包括:

通过预先构建的清空已编译应用脚本清空预先创建的主机应用文件夹和备机应用文件夹中文件;

通过预先构建的更新应用代码脚本在发版服务器应用源码文件夹中更新源码;

通过预先构建的编译应用代码脚本对源码进行编译,并将编译生成的应用war包分别移动到主机应用文件夹和备机应用文件夹。

可选的,所述通过预先构建的更新应用代码脚本在发版服务器应用源码文件夹中更新源码之前,包括:

将源码从源码仓库克隆到发版服务器应用源码文件夹;

创建主机发版应用列表信息文件和备机发版应用列表信息文件。

可选的,所述通过预先构建的编译应用代码脚本对源码进行编译,并将编译生成的应用war包分别移动到主机应用文件夹和备机应用文件夹之后,包括:

通过预先构建的备份应用代码脚本将应用war包复制到预先创建的主机应用备份文件夹和备机应用备份文件夹。

可选的,所述应用发版脚本的内容包含:

判断备机应用文件夹是否有文件,如果没有则输出日志并结束,有则继续;

遍历备机应用文件夹,再嵌套循环备机发版应用列表信息文件;

判断备机发版应用列表信息文件名称的前6个字符与发版应用编号是否一样,不一样则继续循环遍历,一样则继续;

将备机发版应用列表信息文件中的应用war包复制到备机的应用服务器上临时文件目录;

通过远程执行命令方式获取应用服务进程ID,根据应用服务进程ID远程执行命令停止应用服务进程,等待5秒,删除应用服务下当前应用war包,将临时文件目录中的应用war包移动到应用服务下;

远程执行命令,强制停止应用服务;

远程执行命令启动应用服务;

输出临时文件目录中的应用war包名称、目标服务器ip及启动标识;

所述主机应用发版脚本的内容包含:

判断主机应用文件夹是否有文件,如果没有则输出日志并结束,有则继续;

遍历主机应用文件夹,再嵌套循环主机发版应用列表信息文件;

判断主机发版应用列表信息文件名称的前6个字符与发版应用编号是否一样,不一样则继续循环遍历,一样则继续;

将主机发版应用列表信息文件中的应用war包复制到应用服务器上的临时文件目录;

通过远程执行命令方式获取应用服务进程ID;

远程执行命令停止应用服务进程,等待5秒,删除应用服务下当前应用war包,将临时文件目录的应用war包移动到应用服务下;

远程执行命令,强制停止,应用服务;

远程执行命令启动应用服务;

输出临时文件目录中的应用war包名称、目标服务器ip及启动标识。

可选的,所述应用发版方法还包括:

通过预先构建的清除JS、CSS缓存脚本清除JS、CSS缓存的URL连接。

可选的,所述应用发版方法还包括:

通过预先搭建的开源软件Jenkins系统服务触发各个脚本执行。

第二方面,本发明还提供一种应用发版系统,所述应用发版系统包括:

存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序;

所述计算机程序被所述处理器执行时实现如上任一项所述的应用发版方法的步骤

第二方面,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有应用发版程序,所述应用发版程序被处理器执行时实现如上任一项所述的应用发版方法的步骤。

应用本发明的技术方案,保证系统的稳定运行,提高了应用版本发布的安全性。

附图说明

图1是根据本发明实施例的应用发版方法的流程图。

具体实施方式

本发明公开了一种应用发版方法、系统及计算机可读存储介质,本领域技术人员可以借鉴本文内容,适当改进工艺参数实现。需要特别指出的是,所有类似的替换和改动对本领域技术人员来说是显而易见的,它们都被视为包括在本发明,并且相关人员明显能在不脱离本发明内容、精神和范围的基础上对本文所述内容进行改动或适当变更与组合,来实现和应用本发明技术。

在本发明中,除非另有说明,否则本文中使用的科学和技术名词具有本领域技术人员所通常理解的含义。

为了使本领域的技术人员更好地理解本发明的技术方案,下面结合具体实施例对本发明作进一步的详细说明。

实施例一

本发明公开了一种应用发版方法。应用于一类系统服务的发版上,包括:源码更新、编译源码、应用备份、流量切换、应用发版、发版回退及防止JS/CSS缓存方法为一体的在线发版系统。

本发明实施例提供一种应用发版方法,如图1所示,所述应用发版方法应用于发版服务器,包括:

步骤1,通过预先构建的主机流量切换脚本切换流量至主机;

步骤2,通过预先构建的备机应用发版脚本在备机发版应用;

步骤3,在验证备机应用发版功能正常的情况下,通过预先构建的备机流量切换脚本切换流量至备机;

步骤4,通过预先构建的主机应用发版脚本在主机发版应用;

步骤5,在验证主机应用发版功能正常的情况下,通过预先构建的负载均衡切换脚本将流量切换至主机和备机的负载均衡状态。

可选的,所述主机流量切换脚本的内容包含:远程更改反向代理的负载IP为主机IP配置,并热加载配置;

所述备机流量切换脚本的内容包含:远程更改反向代理的负载IP为备机IP配置,并热加载配置;

所述负载均衡切换脚本的内容包含:远程更改反向代理的负载IP为主机IP和备机IP共同负载配置,并热加载配置。

本发明实施例在专用发版服务器上执行上述步骤,将发版操作命令转为脚本命令,有效提高发版效率,可不受时间限制,在线化操作;可自动分发访问流量;减少因发版带来的请求中断问题。

本发明实施例中的应用部署主要有主机和备机两套环境,这两套环境共用同一套代码和数据库,都能独立使用,且可负载均衡,这两套环境保证了版本的更新不影响用户的使用,用户在发版过程中不会有感受,保证系统的稳定运行,有效提高了版本发布的安全性,且发版过程简单易操作,方便人员进行管理。

主机和备机可以是多个tomcat服务器,也可以是一个,通过主机注册中心和备机注册中心,将多个服务器配置到不用的环境中,通过流量切换按钮,一键切换流量,可将流量一键切换到主机、或备机、或负载均衡状态。

在一些实施方式中,所述通过预先构建的主机流量切换脚本切换流量至主机之前,包括:

通过预先构建的清空已编译应用脚本清空预先创建的主机应用文件夹和备机应用文件夹中文件;

通过预先构建的更新应用代码脚本在发版服务器应用源码文件夹中更新源码;

通过预先构建的编译应用代码脚本对源码进行编译,并将编译生成的应用war包分别移动到主机应用文件夹和备机应用文件夹。

可选的,所述通过预先构建的编译应用代码脚本对源码进行编译,并将编译生成的应用war包分别移动到主机应用文件夹和备机应用文件夹之后,包括:

通过预先构建的备份应用代码脚本将应用war包复制到预先创建的主机应用备份文件夹和备机应用备份文件夹。

可选的,所述应用发版脚本的内容包含:

判断备机应用文件夹是否有文件,如果没有则输出日志并结束,有则继续;

遍历备机应用文件夹,再嵌套循环备机发版应用列表信息文件;

判断备机发版应用列表信息文件名称的前6个字符与发版应用编号是否一样,不一样则继续循环遍历,一样则继续;

将备机发版应用列表信息文件中的应用war包复制到备机的应用服务器上临时文件目录;

通过远程执行命令方式获取应用服务进程ID,根据应用服务进程ID远程执行命令停止应用服务进程,等待5秒,删除应用服务下当前应用war包,将临时文件目录中的应用war包移动到应用服务下;

远程执行命令,强制停止应用服务;

远程执行命令启动应用服务;

输出临时文件目录中的应用war包名称、目标服务器ip及启动标识;

所述主机应用发版脚本的内容包含:

判断主机应用文件夹是否有文件,如果没有则输出日志并结束,有则继续;

遍历主机应用文件夹,再嵌套循环主机发版应用列表信息文件;

判断主机发版应用列表信息文件名称的前6个字符与发版应用编号是否一样,不一样则继续循环遍历,一样则继续;

将主机发版应用列表信息文件中的应用war包复制到应用服务器上的临时文件目录;

通过远程执行命令方式获取应用服务进程ID;

远程执行命令停止应用服务进程,等待5秒,删除应用服务下当前应用war包,将临时文件目录的应用war包移动到应用服务下;

远程执行命令,强制停止,应用服务;

远程执行命令启动应用服务;

输出临时文件目录中的应用war包名称、目标服务器ip及启动标识。

可选的,通过预先构建的清除JS、CSS缓存脚本清除JS、CSS缓存的URL连接。通过预先搭建的开源软件Jenkins系统服务触发各个脚本执行。

详细的,应用发版环境至少包括发版服务器、源码仓库、Jenkins系统、应用运行环境,一种应用发版方法包括以下步骤:

S1、构建执行清空已编译应用脚本;

S2、构建执行更新应用代码脚本;

S3、构建执行编译应用代码脚本;

S4、构建执行备份应用代码脚本;

S5、构建执行主机流量切换脚本切换流量至主机;

S6、构建执行备机第一批应用发版脚本在备机发版应用;

S7、构建执行备机第二批应用发版脚本在备机发版应用;

S8、在S7所述步骤完成后,根据测试是否通过,决定是否构建执行回退备机应用脚本;

S9、构建执行备机流量切换脚本切换流量至备机;

S10、构建执行主机第一批应用发版脚本在主机发版应用;

S11、构建执行主机第二批应用发版脚本在主机发版应用;

S12、在S11所述步骤完成后,根据测试是否通过,决定是否构建执行回退主机应用脚本;

S13、构建执行负载均衡切换脚本将流量切换至负载均衡状态;

S14、构建执行清除JS、CSS缓存脚本,根据发版需要决定是否执行。

其中,需要提前准备以下工作:将源码从源码仓库克隆到发版服务器应用源码文件夹;创建主机发版应用列表信息文件和备机发版应用列表信息文件。详细的包括:

S20、在发版服务器上安装版本控制客户端;

S21、在发版服务器生成SSH公私钥,主要命令是:

ssh-keygen–trsa;

S22、将S21所述生成的公钥在源码仓库进行密钥配置,建立安全连接;

S23、将应用代码从源码仓库克隆到发版服务器应用源码文件夹;

S24、将S21所述生成的公钥在应用运行环境中的所有服务器上进行免密码登录配置,建立安全连接;

S25、在发版服务器上创建发版文件夹;

S26、在S25所述发版文件夹下,创建主机应用文件夹;

S27、在S25所述发版文件夹下,创建备机应用文件夹;

S28、在S25所述发版文件夹下,创建主机最新应用文件夹,并将主机最新应用服务拷贝到此文件夹;

S29、在S25所述发版文件夹下,创建备机最新应用文件夹,并将备机最新应用服务拷贝到此文件夹;

S30、在S25所述发版文件夹下,创建主机应用历史发版文件夹;

S31、在S25所述发版文件夹下,创建备机应用历史发版文件夹;

S32、在S25所述发版文件夹下,创建主机应用备份文件夹;

S33、在S25所述发版文件夹下,创建备机应用备份文件夹;

S34、在S25所述发版文件夹下,创建主机第一批发版应用列表信息文件,内容有应用编号、应用服务器IP、应用war名称、tomcat服务路径、tomcat服务名称,并以空格字符分割;

S35、在S25所述发版文件夹下,创建主机第二批发版应用列表信息文件,内容有应用编号、应用服务器IP、应用war名称、tomcat服务路径、tomcat服务名称,并以空格字符分割;

S36、在S25所述发版文件夹下,创建备机第一批发版应用列表信息文件,内容有应用编号、应用服务器IP、应用war名称、tomcat服务路径、tomcat服务名称,并以空格字符分割;

S37、在S25所述发版文件夹下,创建备机第二批发版应用列表信息文件,内容有应用编号、应用服务器IP、应用war名称、tomcat服务路径、tomcat服务名称,并以空格字符分割;

S38、搭建开源软件Jenkins系统服务;

其中,所述步骤S1具体包括:

S40、所述脚本存储在S25所述发版文件夹下;

S41、所述脚本内容有a)删除S26所述主机应用文件夹下所有文件命令b)删除S27所述备机应用文件夹下所有文件命令;

S42、所述脚本是可执行文件;

S43、所述脚本是通过S38所述JENKINS系统触发执行;

其中所述步骤S2具体包括:

S44、所述脚本存储在S25所述发版文件夹下;

S45、所述脚本内容有a)进入S23所述应用源码文件夹下,b)执行源码更新命令;

S46、所述脚本是可执行文件;

S47、所述脚本是通过S38所述JENKINS系统触发执行;

其中所述步骤S3具体包括:

S44、所述脚本存储在S25所述发版文件夹下;

S45、所述脚本内容有a)进入S23所述应用源码文件夹下,b)执行源码主机编译命令,并将生成的war包移动到S26所述主机应用文件夹下,c)执行源码备机编译命令,并将生成的war包移动到S27所述备机应用文件夹下;

S46、所述脚本是可执行文件;

S47、所述脚本是通过S38所述JENKINS系统触发执行;

其中,所述步骤S4具体包括:

S48、所述脚本存储在S25所述发版文件夹下;

S49、所述脚本内容有a)判断S26所述主机应用文件夹是否存在文件,存在则继续,不存在则结束,b)删除S32所述文件夹下所有文件,c)遍历S26所述主机应用文件夹,再嵌套循环S28所述主机最新应用文件夹,根据S26与S28所述主机最新应用文件夹名前6个字符判断是否一致,一致则将S28所述主机最新应用文件夹夹下当前文件复制到S32所述文件夹下,并输出文件名称日志,不一致则继续;d)待遍历完成后,再判断S27所述备机应用文件夹是否存在文件,存在则继续,不存在则结束,e)删除S33所述文件夹下所有文件,f)遍历S27所述文件,再嵌套循环S29所述文件,根据S27与S29所述文件名前6个字符判断是否一致,一致则将S29所述文件夹下当前文件复制到S33所述文件夹下,并输出文件名称日志,不一致则继续;

S50、所述脚本是可执行文件;

S51、所述脚本是通过S38所述JENKINS系统触发执行;

其中,所述步骤S5具体包括:

S52、所述脚本存储在S25所述发版文件夹下;

S53、所述脚本内容有远程更改反向代理的负载IP为主机IP配置,并热加载配置;

S54、所述脚本是可执行文件;

S55、所述脚本是通过S38所述JENKINS系统触发执行;

其中,所述步骤S6具体包括:

S56、所述脚本存储在S25所述发版文件夹下;

S57、所述脚本内容有a)判断S27所述备机应用文件夹是否有文件,如果没有则输出日志并结束,有则继续,b)遍历S27所述文件,再嵌套循环S36所述文件,c)判断当前文件名称的前6个字符与应用编号判断,不一样则继续循环遍历,一样则进行d及后续命令,d)将当前文件用scp命令复制到应用服务器上的临时文件目录;e)通过远程执行命令方式获取应用服务进程ID,f)远程执行命令停止应用服务进程,等待5秒,删除现有应用war包,将新的应用war包从临时目录移动到应用服务下,g)远程执行命令kill-9$PID强制停止,h)远程执行命令启动应用服务,i)输出应用war名称、目标服务器ip及启动标识;

S58、所述脚本是可执行文件;

S59、所述脚本是通过S38所述JENKINS系统触发执行;

其中,所述步骤S7具体包括:

S60、所述脚本存储在S25所述发版文件夹下;

S61、所述脚本内容有a)判断S27所述备机应用文件夹是否有文件,如果没有则输出日志并结束,有则继续,b)遍历S27所述文件,再嵌套循环S37所述文件,c)判断当前文件名称的前6个字符与应用编号判断,不一样则继续循环遍历,一样则进行d及后续命令,d)将当前文件用scp命令复制到应用服务器上的临时文件目录;e)通过远程执行命令方式获取应用服务进程ID,f)远程执行命令停止应用服务进程,等待5秒,删除现有应用war包,将新的应用war包从临时目录移动到应用服务下,g)远程执行命令kill-9$PID强制停止,h)远程执行命令启动应用服务,i)输出应用war名称、目标服务器ip及启动标识;j)待遍历循环结束后,将S27所述所有文件用\cp命令复制并覆盖到S29所述文件夹下,k)将S27所述所有文件用mv命令移动到S31所述文件夹下,并以当前时间命名文件夹;

S62、所述脚本是可执行文件;

S63、所述脚本是通过S38所述JENKINS系统触发执行;

可选的,所述步骤S8具体包括:

S64、经过验证发版系统功能是否通过,通过则无需执行此操作,不通过则操作;

S65、所述脚本存储在S25所述发版文件夹下;

S66、所述脚本内容有a)判断S33所述文件夹里是否有文件,没有则输出日志并结束,有则继续,b)删除S27所述备机应用文件夹下所有文件,c)将S33所述所有文件移动到S27所述备机应用文件夹下;

S67、所述脚本是可执行文件;

S68、所述脚本是通过S38所述JENKINS系统触发执行;

可选的,所述步骤S9具体包括:

S69、所述脚本存储在S25所述发版文件夹下;

S70、所述脚本内容有远程更改反向代理的负载IP为备机IP配置,并热加载配置;

S71、所述脚本是可执行文件;

S72、所述脚本是通过S38所述JENKINS系统触发执行;

可选的,所述步骤S10具体包括:

S73、所述脚本存储在S25所述发版文件夹下;

S74、所述脚本内容有a)判断S26所述主机应用文件夹是否有文件,如果没有则输出日志并结束,有则继续,b)遍历S26所述文件,再嵌套循环S34所述文件,c)判断当前文件名称的前6个字符与应用编号判断,不一样则继续循环遍历,一样则进行d及后续命令,d)将当前文件用scp命令复制到应用服务器上的临时文件目录;e)通过远程执行命令方式获取应用服务进程ID,f)远程执行命令停止应用服务进程,等待5秒,删除现有应用war包,将新的应用war包从临时目录移动到应用服务下,g)远程执行命令kill-9$PID强制停止,h)远程执行命令启动应用服务,i)输出应用war名称、目标服务器ip及启动标识;

S75、所述脚本是可执行文件;

S76、所述脚本是通过S38所述JENKINS系统触发执行;

其中,所述步骤S11具体包括:

S77、所述脚本存储在S25所述发版文件夹下;

S78、所述脚本内容有a)判断S26所述主机应用文件夹是否有文件,如果没有则输出日志并结束,有则继续,b)遍历S26所述文件,再嵌套循环S35所述文件,c)判断当前文件名称的前6个字符与应用编号判断,不一样则继续循环遍历,一样则进行d及后续命令,d)将当前文件用scp命令复制到应用服务器上的临时文件目录;e)通过远程执行命令方式获取应用服务进程ID,f)远程执行命令停止应用服务进程,等待5秒,删除现有应用war包,将新的应用war包从临时目录移动到应用服务下,g)远程执行命令kill-9$PID强制停止,h)远程执行命令启动应用服务,i)输出应用war名称、目标服务器ip及启动标识;j)待遍历循环结束后,将S26所述所有文件用\cp命令复制并覆盖到S28所述主机最新应用文件夹夹下,k)将S26所述所有文件用mv命令移动到S30所述文件夹下,并以当前时间命名文件夹;

S79、所述脚本是可执行文件;

S80、所述脚本是通过S38所述JENKINS系统触发执行;

其中,所述步骤S12具体包括:

S81、经过验证发版系统功能是否通过,通过则无需执行此操作,不通过则操作;

S82、所述脚本存储在S25所述发版文件夹下;

S83、所述脚本内容有a)判断S32所述文件夹里是否有文件,没有则输出日志并结束,有则继续,b)删除S26所述主机应用文件夹下所有文件,c)将S32所述所有文件移动到S26所述主机应用文件夹下;

S84、所述脚本是可执行文件;

S85、所述脚本是通过S38所述JENKINS系统触发执行;

其中,所述步骤S13具体包括:

S86、所述脚本存储在S25所述发版文件夹下;

S87、所述脚本内容有远程更改反向代理的负载IP为主机和备机IP共同负载配置,并热加载配置;

S88、所述脚本是可执行文件;

S89、所述脚本是通过S38所述JENKINS系统触发执行;

其中,所述步骤S13具体包括:

S90、所述脚本存储在S25所述发版文件夹下;

S91、所述脚本内容有远程更改反向代理的负载IP为主机和备机IP共同负载配置,并热加载配置;

S92、所述脚本是可执行文件;

S93、所述脚本是通过S38所述JENKINS系统触发执行;

其中,所述步骤S14具体包括:

S94、所述脚本存储在S25所述发版文件夹下;

S95、所述脚本内容访问web项目提供的清除JS、CSS缓存的URL连接;

S96、所述脚本是可执行文件;

S97、所述脚本是通过S38所述JENKINS系统触发执行;

本申请提供的一种应用发版方法的流程图,应用于发版发布和更新,主要包含以下步骤。

首先,清空已编译war包,确保本次发版要更新的内容的纯粹性,避免未经允许的内容发布到服务器;

更新最新的源码,对项目进行编译和构建,构建失败可提示构建失败的原因,构建成功后进行下一步操作;

使用本发明实现的一键切流量方法,将所有使用系统的用户流量切换到主机,确保备机无人使用后,点击deploy,一键更新所有的war包,并重启服务器;

验证备机发版功能是否正常,测试不通过则可直接回退代码或等待开发人员修改代码提交后重新发版备机,再次进行验证测试;

备机发版验证通过后将所有流量切换到备机环境,确定无异常后发版主机;

主机发布后验证;

验证通过则可将流量切换到负载均衡状态;

代码更新内容如果有涉及静态文件,如js、css等文件的修改,则点击“jscss”按钮,一键更新版本号,此时版本发布完毕。所述的“jscss”按钮,实现一键更新静态文件的版本号,前提是在代码编写时,为每个静态文件设置版本号,版本更新后,用户只需要刷新界面,系统就会自动加载最新的版本号,有效避免由于浏览器缓存未更新引起的系统异常。

本发明实施例主要针对多应用多目标服务器发版;在线化、系统化操作发版;发版时请求中断问题;静态文件被浏览缓存;本发明实施例提供专用发版服务器;配置发版服务器与所有应用服务器SSH免密登录;将发版操作命令转为脚本命令;引入发版备份机制;引入发版回退机制;引入开源软件Jenkins系统;本发明实施例提高发版效率,可不受时间限制,在线化操作;可自动分发访问流量;减少因发版带来的请求中断问题;可回退发版之前一版本;更新JS/CSS缓存问题,解决发版后不立即生效问题。

实施例二

本发明实施例提供一种应用发版系统,所述应用发版系统包括:

存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序;

所述计算机程序被所述处理器执行时实现如实施例一中任一项所述的应用发版方法的步骤。

实施例三

本发明实施例提供一种计算机可读存储介质,所述计算机可读存储介质上存储有应用发版程序,所述应用发版程序被处理器执行时实现如实施例一中任一项所述的应用发版方法的步骤。

实施例二和实施例三在具体实现过程中,可以参阅实施例一,具有相应的技术效果。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

相关技术
  • 一种应用发版方法、系统及计算机可读存储介质
  • 一种应用程序重装测试方法、系统及计算机可读存储介质
技术分类

06120112533797