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

一种调用远程脚本的方法、装置以及系统

文献发布时间:2023-06-19 19:07:35


一种调用远程脚本的方法、装置以及系统

技术领域

本发明涉及软件编译技术领域,尤其涉及一种调用远程脚本的方法、装置以及系统。

背景技术

Gradle是一个基于Apache Ant(一个将软件编译、测试、部署等步骤联系在一起加以自动化的工具)和Apache Maven(一个使用Maven对Java项目进行构建、依赖管理的工具)概念的项目自动化构建开源工具。由于Gradle使用了基于Groovy(一种基于Java虚拟机的敏捷开发语言)的特定领域语言(Domain-Specific Language,DSL)来声明项目设置,抛弃了基于可扩展标记语言(Extensible Markup Language,XML)的各种繁琐配置,因此Gradle被广泛应用于项目构建。

目前,Gradle已支持远程调用脚本。基于Gradle对远程调用脚本的支持,开发人员可以将脚本部署在远端的脚本服务器中,在进行工程文件的编译时,编译端设备可以根据需要调用的脚本的地址信息,从脚本服务器中下载需要调用的脚本,从而实现在本地编译工程中使用部署在脚本服务器的脚本。这种将脚本部署在脚本服务器中,编译端设备进行远程调用方式,极大的方便了开发人员进行脚本的升级和修改,尤其是对于对多个工程生效的脚本,通过这种调用远程脚本的方式,只需要修改脚本服务器中的脚本,既可以使修改后的脚本在每一个工程文件中生效,实现一处修改,多处生效,极大的提升了工程的编译效率。然而,这种将脚本部署在脚本服务器中,编译端设备进行远程调用方式也产生了很多的弊端,其中一个弊端为:增加了编译期对脚本服务器的网络依赖,容易因为脚本服务器的网络故障而阻断所有工程的编译。

发明内容

有鉴于此,本发明提供了一种调用远程脚本的方法、装置以及系统,用于解决将脚本部署在脚本服务器中,编译端设备进行远程调用方式,会增加编译期对脚本服务器的网络依赖的问题。

为了实现上述目的,本发明实施例提供技术方案如下:

第一方面,本发明的实施例提供了一种调用远程脚本的方法,包括:

第一服务器向第二服务器发送工程文件,所述工程文件为所述第一服务器以预设时长为周期,周期性的获取第一脚本集合,并对所述第一脚本集合中的各个远程脚本进行插件化生成的文件,所述第一脚本集合包括至少一个部署在脚本服务器上的远程脚本,所述工程文件与所述第一服务器上一周期获取的工程文件不同;

所述第二服务器生成所述工程文件对应的固化插件和所述固化插件的版本号,并向第三服务器发送所述固化插件和所述固化插件的版本号;

所述第三服务器存储所述固化插件,并根据所述固化插件的版本号对所述固化插件的版本索引进行更新;

编译端设备向所述第三服务器发送请求信息,所述请求信息用于请求最新版本的所述固化插件,接收所述第三服务器发送的最新版本的所述固化插件,以及根据最新版本的所述固化插件进行远程脚本的调用。

作为本发明实施例一种可选的实施方式,所述第二服务器生成所述工程文件对应的固化插件和所述固化插件的版本号,包括:

所述第二服务器生成所述工程文件对应的固化插件,并根据当前时间生成所述固化插件的版本号。

作为本发明实施例一种可选的实施方式,所述编译端设备根据最新版本的所述固化插件进行远程脚本的调用,包括:

所述编译端设备在需要调用远程脚本时,调用所述远程脚本对应的插件,并通过所述远程脚本对应的插件从所述固化插件中读取和调用所述远程脚本。

第二方面,本发明的实施例提供了一种调用远程脚本的方法,应用于第一服务器,所述方法包括:

以预设时长为周期,周期性的获取第一脚本集合,所述第一脚本集合包括至少一个部署在脚本服务器上的远程脚本;

对所述第一脚本集合中的各个远程脚本进行插件化处理,生成工程文件;

在所述工程文件与上一周期获取的工程文件不同的情况下,向第二服务器发送所述工程文件,以便所述第二服务器生成所述工程文件对应的固化插件,以及编译端设备获取所述固化插件。

作为本发明实施例一种可选的实施方式,所述对所述第一脚本集合中的各个远程脚本进行插件化处理,生成工程文件,包括:

根据所述第一脚本集合生成第二脚本集合,所述第二脚本集合包括所述第一脚本集合中的各个远程脚本以及所述第一脚本集合中的远程脚本的嵌套脚本;

将所述第二脚本集合中的各个远程脚本对嵌套脚本的调用,修改为对嵌套脚本对应的插件的调用,生成第三脚本集合;

根据所述第三脚本集合生成所述工程文件。

作为本发明实施例一种可选的实施方式,所述根据所述第三脚本集合生成所述工程文件,包括:

获取所述第三脚本集合中的每一个远程脚本对应的插件,生成插件集合;所述任一远程脚本对应的插件用于调用该远程脚本;

根据所述第三脚本集合和所述插件集合,生成所述工程文件。

作为本发明实施例一种可选的实施方式,所述根据所述第一脚本集合生成第二脚本集合,包括:

生成脚本地址队列,所述脚本地址队列包括所述第一脚本集合中各个远程脚本的脚本地址;

从所述脚本地址队列中的第一个脚本地址开始,逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否包含嵌套脚本;

若所述脚本中包含嵌套脚本,则判断所述嵌套脚本的脚本地址是否在所述脚本地址队列中;

若否,则将所述嵌套脚本的脚本地址添加到所述脚本地址队列的尾端,并判断所述脚本地址队列中的下一个脚本地址对应的脚本中是否包含嵌套脚本,直至所述脚本地址队列中的最后一个脚本地址对应的脚本中不包含嵌套脚本时结束;

获取所述脚本地址队列中每一个脚本地址对应的脚本,生成所述第二脚本集合。

作为本发明实施例一种可选的实施方式,所述逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否包含嵌套脚本,包括:

逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否具有与预设正则表达式匹配的字符串,所述预设正则表达式为根据远程脚本的地址的特征设置的表达式;

若任一程脚本地址对应的脚本中具有至少一个与所述预设正则表达式匹配的字符串,则确定该脚本地址对应的脚本中包含嵌套脚本。

作为本发明实施例一种可选的实施方式,所述将所述第二脚本集合中的各个远程脚本对嵌套脚本的调用,修改为对嵌套脚本对应的插件的调用,生成第三脚本集合,包括:

将所述第二脚本集合中的各个远程脚本中的第一函数修改为第二函数;

其中,所述第一函数为用于调用所述嵌套脚本的函数,所述第二函数用于判断运行时传入的脚本地址是否为远程脚本地址,以及在传入的脚本地址为远程脚本地址时调用脚本地址对应的插件,在传入的脚本地址不为远程脚本地址时调用脚本地址对应的脚本。

第三方面,本发明的实施例提供了一种服务器,包括:

获取单元,用于以预设时长为周期,周期性的获取第一脚本集合,所述第一脚本集合包括至少一个部署在脚本服务器上的远程脚本;

处理单元,用于对所述第一脚本集合中的各个远程脚本进行插件化处理,生成工程文件;

发送单元,用于在所述工程文件与上一周期获取的工程文件不同的情况下,向第二服务器发送所述工程文件,以便所述第二服务器生成所述工程文件对应的固化插件,以及编译端设备获取所述固化插件。

作为本发明实施例一种可选的实施方式,所述处理单元,具体用于根据所述第一脚本集合生成第二脚本集合,所述第二脚本集合包括所述第一脚本集合中的各个远程脚本以及所述第一脚本集合中的远程脚本的嵌套脚本;将所述第二脚本集合中的各个远程脚本对嵌套脚本的调用,修改为对嵌套脚本对应的插件的调用,生成第三脚本集合;根据所述第三脚本集合生成所述工程文件。

作为本发明实施例一种可选的实施方式,所述处理单元,具体用于获取所述第三脚本集合中的每一个远程脚本对应的插件,生成插件集合;根据所述第三脚本集合和所述插件集合,生成所述工程文件;其中所述任一远程脚本对应的插件用于调用该远程脚本。

作为本发明实施例一种可选的实施方式,所述处理单元,具体用于生成脚本地址队列,所述脚本地址队列包括所述第一脚本集合中各个远程脚本的脚本地址;从所述脚本地址队列中的第一个脚本地址开始,逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否包含嵌套脚本;若所述脚本中包含嵌套脚本,则判断所述嵌套脚本的脚本地址是否在所述脚本地址队列中;若否,则将所述嵌套脚本的脚本地址添加到所述脚本地址队列的尾端,并判断所述脚本地址队列中的下一个脚本地址对应的脚本中是否包含嵌套脚本,直至所述脚本地址队列中的最后一个脚本地址对应的脚本中不包含嵌套脚本时结束;获取所述脚本地址队列中每一个脚本地址对应的脚本,生成所述第二脚本集合。

作为本发明实施例一种可选的实施方式,所述处理单元,具体用于逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否具有与预设正则表达式匹配的字符串,所述预设正则表达式为根据远程脚本的地址的特征设置的表达式;若任一程脚本地址对应的脚本中具有至少一个与所述预设正则表达式匹配的字符串,则确定该脚本地址对应的脚本中包含嵌套脚本。

作为本发明实施例一种可选的实施方式,所述处理单元,具体用于将所述第二脚本集合中的各个远程脚本中的第一函数修改为第二函数;

其中,所述第一函数为用于调用所述嵌套脚本的函数,所述第二函数用于判断运行时传入的脚本地址是否为远程脚本地址,以及在传入的脚本地址为远程脚本地址时调用脚本地址对应的插件,在传入的脚本地址不为远程脚本地址时调用脚本地址对应的脚本。

第四方面,本发明实施例提供了一种调用远程脚本的系统,包括:

第一服务器,用于向第二服务器发送工程文件,所述工程文件为所述第一服务器以预设时长为周期,周期性的获取第一脚本集合,并对所述第一脚本集合中的各个远程脚本进行插件化生成的文件,所述第一脚本集合包括至少一个部署在脚本服务器上的远程脚本,所述工程文件与所述第一服务器上一周期获取的工程文件不同;

所述第二服务器,用于生成所述工程文件对应的固化插件和所述固化插件的版本号,并向所述第三服务器发送所述固化插件和所述固化插件的版本号;

所述第三服务器,用于存储所述固化插件,并根据所述固化插件的版本号对所述固化插件的版本索引进行更新;

编译端设备,用于向所述第三服务器发送请求信息,所述请求信息用于请求最新版本的所述固化插件,接收所述第三服务器发送的最新版本的所述固化插件,以及根据最新版本的所述固化插件进行远程脚本的调用。

作为本发明实施例一种可选的实施方式,所述第二服务器,具体用于生成所述工程文件对应的固化插件,并根据当前时间生成所述固化插件的版本号。

作为本发明实施例一种可选的实施方式,所述编译端设备,具体用于在需要调用远程脚本时,调用所述远程脚本对应的插件,并通过所述远程脚本对应的插件从所述固化插件中读取和调用所述远程脚本。

第五方面,本发明实施例提供一种电子设备,包括:存储器和处理器,所述存储器用于存储计算机程序;所述处理器用于在调用计算机程序时,使得所述电子设备实现第一方面或第一方面任一种可选的实施方式所述的调用远程脚本的方法。

第六方面,本发明实施例提供一种计算机可读存储介质,当所述计算机程序被计算设备执行时,使得所述计算设备实现第一方面或第一方面任一种可选的实施方式所述的调用远程脚本的方法。

第七方面,本发明实施例提供一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算机实现第一方面或第一方面任一种可选的实施方式所述的调用远程脚本的方法。

本发明实施例提供的调用远程脚本的方法首先以预设时长为周期,周期性的获取至少一个部署在脚本服务器上的远程脚本组成的第一脚本集合,然后对所述第一脚本集合中的各个远程脚本进行插件化处理,生成工程文件,最后在所述工程文件与上一周期获取的工程文件不同的情况下,向第二服务器发送所述工程文件,以便所述第二服务器生成所述工程文件对应的固化插件,以及编译端设备获取所述固化插件。由于本发明实施例提供的调用远程脚本的方法可以将部署在脚本服务器上的远程脚本插件化生成工程文件,并生成所述工程文件对应的固化插件以及使编译端设备获取所述固化插件,因此编译端设备在需要调用部署于脚本服务器上的远程脚本时,可以通过本地的固化插件获取远程脚本,而无需从脚本服务器中获取远程脚本,因此本发明实施例提供的调用远程脚本的方法可以避免编译期对脚本服务器的网络依赖进而解决将脚本部署在脚本服务器中,编译端设备进行远程调用方式,会增加编译期对脚本服务器的网络依赖的问题。

附图说明

此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的调用远程脚本的方法的场景架构图;

图2为本发明实施例提供的调用远程脚本的方法的步骤流程图之一;

图3为本发明实施例提供的调用远程脚本的方法的步骤流程图之二;

图4为本发明实施例提供的服务器的结构示意示意图;

图5为本发明实施例提供的电子设备的硬件结构示意图。

具体实施方式

为了能够更清楚地理解本发明的上述目的、特征和优点,下面将对本发明的方案进行进一步描述。需要说明的是,在不冲突的情况下,本发明的实施例及实施例中的特征可以相互组合。

在下面的描述中阐述了很多具体细节以便于充分理解本发明,但本发明还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本发明的一部分实施例,而不是全部的实施例。

在本发明实施例中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本发明实施例中被描述为“示例性的”或者“例如”的任何实施例或设计方案不应被解释为比其它实施例或设计方案更优选或更具优势。确切而言,使用“示例性的”或者“例如”等词旨在以具体方式呈现相关概念。此外,在本发明实施例的描述中,除非另有说明,“多个”的含义是指两个或两个以上。

以下首先对本发明实施例提供的调用远程脚本的方法的场景架构进行说明。

参照图1所示,本发明实施例提供的调用远程脚本的方法的场景架构包括:

至少一个脚本服务器11(图1中以包括3个脚本服务器为例示出)、第一服务器12、第二服务器13、第三服务器14以及编译端设备15。

其中,脚本服务器11用于存储开发人员部署的远程脚本,并根据其它设备的下载请求返回对应的远程脚本。第一服务器12用于以预设时长为周期,周期性的获取部署在各个脚本服务器11中各个远程脚本,并对获取的远程脚本进行插件化处理生成工程文件,以及在所述工程文件与上一周期获取的工程文件不同的情况下,将所述工程文件推送至第二服务器。第二服务器13用于对第一服务器12推送的工程文件进行打包,生成包含所有远程脚本和远程脚本对应的插件的固化插件,并将所述固化插件发送至第三服务器14,第三服务器14用于存储第二服务器13发送的固化插件。编译端设备15用于根据远程脚本调用需求,从第三服务器14中下载最新版本的固化插件以及基于最新版本的固化插件进行远程脚本的调用。

基于上述场景架构,本发明实施例提供了一种应用于第一服务器的调用远程脚本的方法,参照图2所示,该调用远程脚本的方法包括如下步骤:

S201、以预设时长为周期,周期性的获取第一脚本集合。

其中,所述第一脚本集合包括至少一个部署在脚本服务器上的远程脚本。

具体的,第一服务器可以获取包括所有注册的远程脚本的脚本清单,并以预设时长为周期,轮询从脚本服务器中下载该脚本清单中的每一个远程脚本,以获取第一脚本集合。

示例性的,预设时长可以为3分钟。当预设时长还可以为其它时长,例如:5分钟、10分钟等,本发明实施例对此不做限定。

S202、对所述第一脚本集合中的各个远程脚本进行插件化处理,生成工程文件。

作为本发明实施例一种可选的实施方式,上述步骤S102(对所述第一脚本集合中的各个远程脚本进行插件化处理,生成工程文件)的实现方式可以包括如下步骤a至步骤c:

步骤a、根据所述第一脚本集合生成第二脚本集合。

其中,所述第二脚本集合包括所述第一脚本集合中的各个远程脚本以及所述第一脚本集合中的远程脚本的嵌套脚本。

需要说明的是,本发明实施例中的第二脚本集合不仅包括第一脚本集合中的远程脚本直接调用的嵌套脚本,而且还包括第一脚本集合中的远程脚本直调用的嵌套脚本所调用的嵌套脚本。例如:第一脚本集合包括:script1.gradle和script2.gradle,script1.gradle中调用了script3.gradle和script4.gradle,script2.gradle中调用了script5.gradle,script3.gradle中调用了script6.gradle,则第二脚本集合包括:script1.gradle、script2.gradle、script3.gradle、script4.gradle、script5.gradle以及script6.gradle。

可选的,上述步骤a(根据所述第一脚本集合生成第二脚本集合)的实现方式可以包括如下步骤a1至a5:

步骤a1、生成脚本地址队列。

其中,所述脚本地址队列包括所述第一脚本集合中各个远程脚本的脚本地址。

示例性的,第一脚本集合中包括两个脚本,且两个脚本的脚本地址分别为:http://a.com/script1.gradle、http://a.com/script2.gradle,则生成的脚本队列可以如下所示:

http://a.com/script1.gradle

http://a.com/script2.gradle

步骤a2、从所述脚本地址队列中的第一个脚本地址开始,逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否包含嵌套脚本。

可选的,逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否包含嵌套脚本的实现方式可以包括:

逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否具有与预设正则表达式匹配的字符串;

若任一程脚本地址对应的脚本中具有至少一个与所述预设正则表达式匹配的字符串,则确定该脚本地址对应的脚本中包含嵌套脚本。

其中,所述预设正则表达式为根据远程脚本的地址的特征设置的表达式。

具体的,远程脚本的地址一般以http:开头、.gradle结尾,因此预设正则表达式可以为:http:*/.gradle。

在上述步骤a2中,若所述脚本中包含嵌套脚本,则执行如下步骤a3,而若脚本中不包含嵌套脚本,则返回步骤a2判断所述脚本地址队列中的下一个脚本地址对应的脚本中是否包含嵌套脚本。

步骤a3、判断所述嵌套脚本的脚本地址是否在所述脚本地址队列中。

即,判断原脚本地址队列中是否已经包含了脚本的嵌套脚本的脚本地址。

在上述步骤a3中,若嵌套脚本的脚本地址不在所述脚本地址队列中,则执行如下步骤a4。

步骤a4、将所述嵌套脚本的脚本地址添加到所述脚本地址队列的尾端,并判断所述脚本地址队列中的下一个脚本地址对应的脚本中是否包含嵌套脚本。

循环执行上述步骤a1至a4,直至所述脚本地址队列中的最后一个脚本地址对应的脚本中不包含嵌套脚本时结束。

脚本地址队列中的最后一个脚本地址对应的脚本中不包含嵌套脚本时,脚本地址队里中包含了第一脚本集合中的每一个脚本以及所述第一脚本集合中的远程脚本的每一个嵌套脚本。

以下对上述实施例的实现过程进行举例说明。

示例性的,第一脚本集合中包括2个远程脚本,该两个远程脚本的脚本地址分别为:http://a.com/script1.gradle、http://a.com/script2.gradle,则首先生成的脚本地址队列为:

http://a.com/script1.gradle

http://a.com/script2.gradle

其次,判断第一个脚本地址http://a.com/script1.gradle对应的脚本中是否包含嵌套脚本。

示例性的,http://a.com/script1.gradle对应的脚本如下所示:

由于脚本地址http://a.com/script1.gradle对应的脚本中包含嵌套脚本(脚本地址http://a.com/script3.gradle对应的脚本),因此判断脚本地址http://a.com/script3.gradle是否在所述脚本地址队列中。如上所示,脚本地址队列中并不包含脚本地址http://a.com/script3.gradle,因此将http://a.com/script3.gradle添加到所述脚本地址队列的尾端,此时脚本地址队列变化为:

http://a.com/script1.gradle

http://a.com/script2.gradle

http://a.com/script3.gradle

进一步,判断所述脚本地址队列中的下一个脚本地址http://a.com/script2.gradle对应的脚本中是否包含嵌套脚本,直至所述脚本地址队列中的最后一个脚本地址对应的脚本中不包含嵌套脚本时结束。

a5、获取所述脚本地址队列中每一个脚本地址对应的脚本,生成所述第二脚本集合。

上述实施例生成的第二脚本集合中包括第一脚本集合中的每一个远程脚本以及所述第一脚本集合中的远程脚本的每一个嵌套脚本,因此对第二集合中的脚本进行插件化处理后,可以避免调用第一脚本集合中的脚本时需要从脚本服务器中相应的嵌套脚本,进而完全避免编译时依赖脚本服务器的网络。

步骤b、将所述第二脚本集合中的各个远程脚本对嵌套脚本的调用,修改为对嵌套脚本对应的插件的调用,生成第三脚本集合。

可选的,上述步骤b(将所述第二脚本集合中的各个远程脚本对嵌套脚本的调用,修改为对嵌套脚本对应的插件的调用,生成第三脚本集合)包括:

将所述第二脚本集合中的各个远程脚本中的第一函数修改为第二函数;

其中,所述第一函数为用于调用所述嵌套脚本的函数,所述第二函数用于判断运行时传入的脚本地址是否为远程脚本地址,以及在传入的脚本地址为远程脚本地址时调用脚本地址对应的插件,在传入的脚本地址不为远程脚本地址时调用脚本地址对应的脚本。

一般情况下,用于调用所述嵌套脚本的函数为apply from,因此可以将第二脚本集合中的各个远程脚本中的apply from修改为第二函数。示例性的,第二函数可以为hackApply。

示例性的,第二函数的内容可以如下所示:

由于嵌套脚本可能通过拼接字符串产生地址,因此静态分析可能无法识别并将其替换成对嵌套脚本对应的插件的调用。上述实施例将各个远程脚本中用于对嵌套脚本的调用的第一函数(apply from)修改为第二函数(hackApply),因此可以在运行时通过传入的脚本地址准确的判断各个第一函数是否为用于调用远程脚本的函数,避免将调用本地脚本的第一函数替换为对脚本对应的插件的调用,进而避免编译异常。

步骤c、根据所述第三脚本集合生成所述工程文件。

可选的,上述步骤c(根据所述第三脚本集合生成所述工程文件)的实现方式可以包括如下步骤c1和步骤c2:

步骤c1、获取所述第三脚本集合中的每一个远程脚本对应的插件,生成插件集合。

其中,所述任一远程脚本对应的插件用于调用该远程脚本。

以下脚本地址http://a.com/script1.gradle对应的脚本为script1,且生成script1对应的的插件为例对上述步骤c1进行说明。

示例性的,生成script1.gradle对应的的插件的过程可以包括:首先将script1.gradle(若有将对嵌套脚本的调用修改为对嵌套脚本对应的插件的调用,则使用修改后的script1.gradle)放置在固化插件的java/resource(资源文件)目录下,然后在java/src目录下生成一个名为Script1Gradle.kt的容器文件,内容如下:

由于编译流程中固化插件的jar包会被加入编译的classpath中,而资源文件在编译jar包时默认会被添加到jar包中,同时编译过程中可以通过获取jar包运行环境的classLoader读取所有资源文件,因此编译端设备可以通过插件remote.script.script1间接读取script1.gradle、进而调用保存在固化插件资源文件目录下的处理后的远程脚本。

步骤c2、根据所述第三脚本集合和所述插件集合,生成所述工程文件。

即,生成一个包括所述第三脚本集合中的每一个脚本以及每一个脚本对应的插件的工程文件。

S203、在所述工程文件与上一周期获取的工程文件不同的情况下,向第二服务器发送所述工程文件,以便所述第二服务器生成所述工程文件对应的固化插件,以及编译端设备获取所述固化插件。

对应的,第二服务器接收所述第一服务器发送的所述工程文件。

即,第一服务器在获取工程文件后,首先判断工程文件与上一周期获取的工程文件是否相同,若本周期获取的工程文件与上一周期获取的工程文件相同,则流程返回步骤S101(以预设时长为周期,周期性的获取第一脚本集合),而若本周期获取的工程文件与上一周期获取的工程文件不同,则向第二服务器发送所述工程文件。

具体的,由于git具有去重机制(在文件未发生改变的情况下,提示无变化终止发送流程,避免重复发送,在文件发生改变的情况下,将文件推送至远程git仓库),因此本发明实施例中第一服务器可以使用git将生成的工程文件向第二服务器推送,第二服务器可以通过git仓库实现第一服务器发送的工程文件的接收。

本发明实施例提供的调用远程脚本的方法首先以预设时长为周期,周期性的获取至少一个部署在脚本服务器上的远程脚本组成的第一脚本集合,然后对所述第一脚本集合中的各个远程脚本进行插件化处理,生成工程文件,最后在所述工程文件与上一周期获取的工程文件不同的情况下,向第二服务器发送所述工程文件,以便所述第二服务器生成所述工程文件对应的固化插件,以及编译端设备获取所述固化插件。由于本发明实施例提供的调用远程脚本的方法可以将部署在脚本服务器上的远程脚本插件化生成工程文件,并生成所述工程文件对应的固化插件以及使编译端设备获取所述固化插件,因此编译端设备在需要调用部署于脚本服务器上的远程脚本时,可以通过本地的固化插件获取远程脚本,而无需从脚本服务器中获取远程脚本,因此本发明实施例提供的调用远程脚本的方法可以避免编译期对脚本服务器的网络依赖进而解决将脚本部署在脚本服务器中,编译端设备进行远程调用方式,会增加编译期对脚本服务器的网络依赖的问题。

本发明实施例提供了另一种调用远程脚本的方法,参照图3所示,该调用远程脚本的方法包括:

S301、第一服务器向第二服务器发送工程文件。

其中,所述工程文件为所述第一服务器以预设时长为周期,周期性的获取第一脚本集合,并对所述第一脚本集合中的各个远程脚本进行插件化生成的文件,所述第一脚本集合包括至少一个部署在脚本服务器上的远程脚本,所述工程文件与所述第一服务器上一周期获取的工程文件不同。

对应的,第二服务器接收所述第一服务器发送的所述工程文件。

第一服务器生成所述工程文的实现方式可以参考上述实施例,在此不再赘述。

S302、第二服务器生成所述工程文件对应的固化插件和所述固化插件的版本号。

可选的,第二服务器生成所述工程文件对应的固化插件和所述固化插件的版本号,包括:

所述第二服务器生成所述工程文件对应的固化插件,并根据当前时间生成所述固化插件的版本号。

即,第二服务器将当前时间作为固化插件的版本号。

S303、第二服务器将向第三服务器发送所述固化插件和所述固化插件的版本号。

对应的,第三服务器接收所述第二服务器发送的所述固化插件和所述固化插件的版本号。

示例性的,第三服务器可以为Maven服务器。

S304、第三服务器存储所述固化插件,并根据所述固化插件的版本号对所述固化插件的版本索引进行更新。

S305、编译端设备向第三服务器发送请求信息。

对应的,第三服务器接收所述编译端设备发送的请求信息。

其中,所述请求信息用于请求最新版本的所述固化插件。

由于Gradle的ChangeVersion能力支持通过使用"+"版本号表示该依赖始终使用最新版本,因此编译端设备只需要在编译期像引用正常插件一样,将脚本固化插件引入classpath中,并使用"+"版本号,即可在每次编译使用到最新发布出的固化插件。并且每次检测到文件固化插件具有更新都会重新发布,因此该固化插件中始终包含最新版本的远程脚本。

S306、第三服务器向编译端设备发送最新版本的所述固化插件。

对应的,编译端设备接收所述第三服务器发送的最新版本的所述固化插件。

S307、编译端设备根据最新版本的所述固化插件进行远程脚本的调用。

作为本发明实施例一种可选的实施方式,上述步骤S307(编译端设备根据最新版本的所述固化插件进行远程脚本的调用)包括:

所述编译端设备在需要调用远程脚本时,调用所述远程脚本对应的插件,并通过所述远程脚本对应的插件从所述固化插件中读取和调用所述远程脚本。

示例性的,将编译内容中调用远程脚本的函数apply from:"http://a.com/script1.gradle"修改为apply plugin:"remote.script.script1",从而在需要调用远程脚本时,实现调用所述远程脚本对应的插件,并通过所述远程脚本对应的插件从所述固化插件中读取和调用所述远程脚本。

本实施例提供的调用远程脚本的方法的实现原理与技术效果与上述实施例提供的调用远程脚本的方法的实现原理与技术效果类似,此处不再赘述。

需要说明的是,目前很多脚本部署在存储服务器上,这些存储服务器可能并不具有版本控制能力,若脚本升级修改后存在错误,则无法及时溯源和更正。上述实施例中第三服务器会存储各个版本的固化插件,因此在脚本升级修改后存在错误的情况下,可以根据第三服务器中存储的其它版本的固化插件及时溯源和更正。

还需要说明的是,现有技术中在使用将脚本部署在脚本服务器中,编译端设备进行远程调用方式时,常常会将脚本部署在脚本服务器的不同存储位置,甚至部署在不同服务上,这种将脚本部署在各处的方式在需要切换域名或者统一更改地址或者配置多个域名选路时非常麻烦,难以进行统一管理。上述实施例将包含全部远程脚本的固化插件存储在第三服务器上,在需要切换域名或者统一更改地址或者配置多个域名选路时,只需要在第三服务器上进行相应处理,无需确定每一个远程脚本的存储位置,并对每一个远程脚本的存储位置进行处理,因此上述实施例还可以简化远程脚本的统一管理。

基于同一发明构思,作为对上述方法的实现,本发明实施例还提供了一种服务器和调用远程脚本调用系统,该实施例与前述方法实施例对应,为便于阅读,本实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例中的全部内容。

本发明实施例提供了一种服务器,图4为该服务器的结构示意图,如图4所示,该服务器400包括:

获取单元41,用于以预设时长为周期,周期性的获取第一脚本集合,所述第一脚本集合包括至少一个部署在脚本服务器上的远程脚本;

处理单元42,用于对所述第一脚本集合中的各个远程脚本进行插件化处理,生成工程文件;

发送单元43,用于在所述工程文件与上一周期获取的工程文件不同的情况下,向第二服务器发送所述工程文件,以便所述第二服务器生成所述工程文件对应的固化插件,以及编译端设备获取所述固化插件。

作为本发明实施例一种可选的实施方式,所述处理单元42,具体用于根据所述第一脚本集合生成第二脚本集合,所述第二脚本集合包括所述第一脚本集合中的各个远程脚本以及所述第一脚本集合中的远程脚本的嵌套脚本;将所述第二脚本集合中的各个远程脚本对嵌套脚本的调用,修改为对嵌套脚本对应的插件的调用,生成第三脚本集合;根据所述第三脚本集合获取所述工程文件。

作为本发明实施例一种可选的实施方式,所述处理单元42,具体用于获取所述第三脚本集合中的每一个远程脚本对应的插件,生成插件集合;根据所述第三脚本集合和所述插件集合,生成所述工程文件;其中,所述任一远程脚本对应的插件用于调用该远程脚本。

作为本发明实施例一种可选的实施方式,所述处理单元42,具体用于生成脚本地址队列,所述脚本地址队列包括所述第一脚本集合中各个远程脚本的脚本地址;从所述脚本地址队列中的第一个脚本地址开始,逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否包含嵌套脚本;若所述脚本中包含嵌套脚本,则判断所述嵌套脚本的脚本地址是否在所述脚本地址队列中;若否,则将所述嵌套脚本的脚本地址添加到所述脚本地址队列的尾端,并判断所述脚本地址队列中的下一个脚本地址对应的脚本中是否包含嵌套脚本,直至所述脚本地址队列中的最后一个脚本地址对应的脚本中不包含嵌套脚本时结束;获取所述脚本地址队列中每一个脚本地址对应的脚本,生成所述第二脚本集合。

作为本发明实施例一种可选的实施方式,所述处理单元42,具体用于逐一判断所述脚本地址队列中的脚本地址对应的脚本中是否具有与预设正则表达式匹配的字符串,所述预设正则表达式为根据远程脚本的地址的特征设置的表达式;若任一程脚本地址对应的脚本中具有至少一个与所述预设正则表达式匹配的字符串,则确定该脚本地址对应的脚本中包含嵌套脚本。

作为本发明实施例一种可选的实施方式,所述处理单元42,具体用于将所述第二脚本集合中的各个远程脚本中的第一函数修改为第二函数;

其中,所述第一函数为用于调用所述嵌套脚本的函数,所述第二函数用于判断运行时传入的脚本地址是否为远程脚本地址,以及在传入的脚本地址为远程脚本地址时调用脚本地址对应的插件,在传入的脚本地址不为远程脚本地址时调用脚本地址对应的脚本。

本实施例提供的服务器可以执行上述方法实施例提供的调用远程脚本的方法,其实现原理与技术效果类似,此处不再赘述。

本发明实施例提供了一种调用远程脚本的系统,参照图1所示,该调用远程脚本的系统包括:

第一服务器12,用于向第二服务器13发送工程文件,所述工程文件为所述第一服务器以预设时长为周期,周期性的获取第一脚本集合,并对所述第一脚本集合中的各个远程脚本进行插件化生成的文件,所述第一脚本集合包括至少一个部署在脚本服务器上的远程脚本,所述工程文件与所述第一服务器上一周期获取的工程文件不同;

所述第二服务器13,用于生成所述工程文件对应的固化插件和所述固化插件的版本号,并向所述第三服务器14发送所述固化插件和所述固化插件的版本号;

所述第三服务器14,用于存储所述固化插件,并根据所述固化插件的版本号对所述固化插件的版本索引进行更新;

编译端设备15,用于向所述第三服务器14发送请求信息,所述请求信息用于请求最新版本的所述固化插件,接收所述第三服务器14发送的最新版本的所述固化插件,以及根据最新版本的所述固化插件进行远程脚本的调用。

作为本发明实施例一种可选的实施方式,所述第二服务器12,具体用于生成所述工程文件对应的固化插件,并根据当前时间生成所述固化插件的版本号。

作为本发明实施例一种可选的实施方式,所述编译端设备15,具体用于在需要调用远程脚本时,调用所述远程脚本对应的插件,并通过所述远程脚本对应的插件从所述固化插件中读取和调用所述远程脚本。

本实施例提供的调用远程脚本的系统可以执行上述方法实施例提供的调用远程脚本的方法,其实现原理与技术效果类似,此处不再赘述。

基于同一发明构思,本发明实施例还提供了一种电子设备。图5为本发明实施例提供的电子设备的结构示意图,如图5所示,本实施例提供的电子设备包括:存储器501和处理器502,所述存储器501用于存储计算机程序;所述处理器502用于在调用计算机程序时执行上述实施例提供的调用远程脚本的方法。

基于同一发明构思,本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,当计算机程序被处理器执行时,使得所述计算设备实现上述实施例提供的调用远程脚本的方法。

基于同一发明构思,本发明实施例还提供了一种计算机程序产品,当所述计算机程序产品在计算机上运行时,使得所述计算设备实现上述实施例提供的调用远程脚本的方法。

本领域技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质上实施的计算机程序产品的形式。

处理器可以是中央处理单元(CentralProcessingUnit,CPU),还可以是其他通用处理器、数字信号处理器(DigitalSignalProcessor,DSP)、专用集成电路(ApplicationSpecificIntegratedCircuit,ASIC)、现成可编程门阵列(Field-ProgrammableGateArray,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flashRAM)。存储器是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动存储介质。存储介质可以由任何方法或技术来实现信息存储,信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。根据本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitorymedia),如调制的数据信号和载波。

最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

相关技术
  • 一种智能调用Dubbo远程服务的方法及装置
  • 一种监控虚拟机中系统调用的方法、装置及存储介质
  • 一种输电线路通道雷击信息远程查询方法、装置及系统
  • 一种远程隔离的秘钥访问方法、装置及系统
  • 脚本驱动环境下的远程调用方法和远程调用装置
  • 脚本驱动环境下的远程调用方法和远程调用装置
技术分类

06120115802205