基于Golang的项目部署方法、系统及存储介质与流程

文档序号:31791355发布日期:2022-10-14 15:29阅读:38来源:国知局
基于golang的项目部署方法、系统及存储介质
技术领域
:1.本技术涉及计算机
技术领域
:,具体涉及一种基于golang的项目部署方法、系统及存储介质。
背景技术
::2.随着互联网通信技术的普及和快速发展,市面上出现的应用类型和功能越来越多样全面,使得应用所承担的业务逻辑也越来越错综复杂,同时,网络安全问题也愈发严重。因此,应用开发者/运营管理者(如各大企业)对将应用部署到生产服务器上使用的投产规范和安全愈发重视。3.在实际应用中,面对频繁的业务需求,如应用开发/功能升级测试或使用等,通常需要将开发人员编写的对应业务逻辑上传至大量的服务器中执行,并记录该投产执行过程和结果。但这极大增加了业务团队的工作量,很容易出现人为编写代码错误,导致投产失败。技术实现要素:4.为实现上述目的,本技术实施例提供如下技术方案:5.一方面,本技术提出了一种基于golang的项目部署方法,所述方法包括:6.响应针对目标项目的部署请求,获得所述目标项目的配置文件;所述配置文件包括针对所述目标项目定义的至少一个部署任务各自的部署流程信息;7.调用功能封装模组中的脚本引擎模块,创建针对所述配置文件的脚本引擎;所述功能封装模组是基于项目部署流程的不同内容构建的,且不同功能封装模组所封装的功能实现方法不同;8.通过所述脚本引擎封装的注册模块,将所调取的功能封装模组的golang代码转换为lua扩展代码后注册到lua实例,以使所述配置文件能够通过lua函数调用对应的golang函数;9.按照所述部署流程信息,执行对应的所述部署任务,将所述目标项目部署到目标服务器运行;10.销毁所述脚本引擎。11.又一方面,本技术还提出了一种基于golang的项目部署系统,其特征在于,所述系统包括:预置模组、多个功能封装模组、golang开源库以及项目部署控制器,其中:12.所述预置模组包括命令行接口和配置脚本模块,所述配置脚本模块用于配置执行所述命令行接口感应的命令的参数,获得目标项目的配置文件;所述配置文件包括针对所述目标项目定义的至少一个部署任务各自的部署流程信息;13.所述多个功能封装模组包括脚本引擎模块、文件传输模块、go-lua代码转换模块,其中:14.所述脚本引擎模块,用于创建针对所述配置文件的脚本引擎;15.所述文件传输模块,用于实现服务器与客户端之间的数据传输;16.go-lua代码转换模块,用于将所述功能封装模组的golang代码转换为lua扩展代码,以使得所述脚本引擎封装的注册模块,能够将转换得到的lua扩展代码注册到lua实例;17.所述项目部署控制器,用于实现如上述的基于golang的项目部署方法。18.又一方面,本技术还提出了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器加载执行,实现如上述的基于golang的项目部署方法。19.由此可见,本技术提出了一种基于golang的项目部署方法、系统及存储介质,在需要部署目标项目的情况下,可以针对该目标项目灵活定义的至少一个部署任务各自的部署流程信息,获得包含该部署流程信息的配置文件,且可以基于项目部署流程的不同内容构建了对应的功能封装模组,将其封装到一个自动化部署工具,通过调用功能封装模组中的脚本引擎模块,创建针对目标项目的配置文件的脚本引擎,通过该脚本引擎封装的注册模块,对所调取的功能封装模组的golang代码转换为lua扩展后再注册到lua实例,以使配置文件能够通过lua函数调用对应的golang函数,按照部署流程信息执行对应的部署任务,将目标项目部署到目标服务器运行,减少跨平台开发的成本,且无需开发者关心命令编写方式,避免了人工编写操作命令产生的各种误操作,所导致的严重后果,降低了人力和时间成本,提高了投产效率和可靠性。附图说明20.结合附图并参考以下具体实施方式,本公开各实施例的上述和其他特征、优点及方面将变得更加明显。贯穿附图中,相同或相似的附图标记表示相同或相似的元素。应当理解附图是示意性的,原件和元素不一定按照比例绘制。21.图1为本技术提出基于golang的项目部署系统的一可选示例的结构示意图;22.图2为本技术提出基于golang的项目部署系统中,针对项目的配置文件结构示意图;23.图3为本技术提出基于golang的项目部署系统中,用于表征多个功能封装模组的组成结构及其引用关系的uml类图;24.图4为本技术提出的基于golang的项目部署方法的一可选示例的流程示意图;25.图5为本技术提出的基于golang的项目部署方法的又一可选示例的流程示意图;26.图6为本技术提出的基于golang的项目部署方法中,所输出的任务生成报告示意图;27.图7为适用于本技术提出的基于golang的项目部署方法的计算机设备的一可选示例的硬件结构示意图。具体实施方式28.针对
背景技术
:部分的描述内容,面对频繁投产需求,本技术希望整个投产操作可以实现自动化,如将实现投产过程中的登录生产服务器、上传应用程序包、启停服务、命令执行情况的记录等过程的程序代码输入自动化部署工具,通过执行该程序代码实现各业务的投产过程。基于此,本技术提出基于goland编程语言,以一种开创性的方式,将重复多次的投产行为,抽象成为一个个模块,将所有内容封装到一个工具中,使得投产操作的执行者,在执行投产操作之前,只需要进行简单配置,即可快速且准确实现批量系统配置、批量程序部署、批量运行命令等功能,根据需要还可以自动记录执行日志,便于后续查询维护,从而避免了人工编写操作命令产生的各种误操作,所导致的严重后果,降低了人力和时间成本,提高了投产效率和可靠性。29.下面将参照附图更详细地描述本公开的实施例。虽然附图中显示了本公开的某些实施例,然而应当理解的是,本公开可以通过各种形式来实现,而且不应该被解释为限于这里阐述的实施例,相反提供这些实施例是为了更加透彻和完整地理解本公开。应当理解的是,本公开的附图及实施例仅用于示例性作用,并非用于限制本公开的保护范围。30.应当理解,本技术中使用的“系统”、“装置”、“单元”和/或“模块”是用于区分不同级别的不同组件、元件、部件、部分或装配的一种方法。然而,如果其他词语可实现相同的目的,则可通过其他表达来替换该词语。31.本文使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”;术语“一些实施例”表示“至少一些实施例”。其他术语的相关定义将在下文描述中给出。32.需要注意,本公开中提及的“第一”、“第二”等概念仅用于对不同的装置、模块或单元进行区分,并非用于限定这些装置、模块或单元所执行的功能的顺序或者相互依存关系。且本公开中提及的“一个”、“多个”的修饰是示意性而非限制性的,本领域技术人员应当理解,除非在上下文另有明确指出,否则应该理解为“一个或多个”。33.另外,本技术中使用了流程图用来说明根据本技术的实施例的系统所执行的操作。应当理解的是,前面或后面操作不一定按照顺序来精确地执行。相反,可以按照倒序或同时处理各个步骤。同时,也可以将其他操作添加到这些过程中,或从这些过程移除某一步或数步操作。34.参照图1,为本技术提出的基于golang的项目部署系统的一可选示例的结构示意图,利用golang具有的跨平台编译特性,使得本技术提出的该系统可以跨平台使用,且支持多种操作系统和中央处理器cpu,极大降低了对开发者进行项目开发所使用的操作系统类型,及该项目将要部署服务器的平台类型的约束局限性,提高项目开发及其测试使用的灵活性和便利性。本技术实施例中,基于golang的项目部署系统可以由服务器支持实现,但本技术对支持该系统的运行的服务器类型不做限制。35.结合上文对本技术技术方案的相关描述,如图1所示,本技术提出的基于golang的项目部署系统可以包括:预置模组110、多个功能封装模组120、golang开源库130,以及项目部署控制器140,其中:36.预置模组110可以包括命令行接口(commandlineinterface)模块111以及配置脚本(configscripts)模块112。在本技术实际应用中,项目开发者/测试者可以通过客户端登录系统,可以通过该命令行接口输入命令,以使系统能够以命令方式执行,获得相应参数或实现相应处理等步骤,实现过程可视情况而定,本技术实施例在此不做详述。37.上述配置脚本模块112可以用于配置执行命令的详细参数,定义目标项目(其可以是依据业务需求所开发且要部署到生产服务器的任一应用,如网关项目等,本技术对项目类型不做限制)的部署流程,由系统据此使用脚本语言(如lua)生成对应的配置文件。参照图2所示的配置文件结构示意图,在配置文件中可以使用lua脚本语言定义task(任务,本技术可以记为部署任务),将所有需要执行的指令以stage(阶段)和step(步骤)的方式进行配置定义,该定义配置过程可以利用内置lua函数实现,所获得的配置文件如下示例:38.应该理解,一个配置文件可能会包括多个task,对于不同task可以配置各自的任务标识进行区分,如上文配置文件中示例中以任务名称即“demo”,来区分同一配置文件中的不同task,但并不局限于这种区分方式,即任务标识包括但并不局限于任务名称。39.另外,需要说明,面对不同目标项目,其所具有的功能及其实现过程不同,对其部署要求也可能不同,工作人员对其定义的部署流程信息内容往往不同,由此使用脚本语言构建的配置文件内容也会有所差异,本技术对目标项目的配置文件的内容不做限制,即对其包含的部署任务数量和类型,以及每一个部署任务包含的配置项内容等均不做限制,可视情况而定。40.功能封装模组(modules)120用于实现核心功能的封装,大部分功能可以通过调用模块实现,可以看作是对golang开源库(library)130和golang内置库的封装。如上文对本技术技术方案的相关描述,本技术可以将重复多次的投产行为抽象成为一个个模块,即功能封装模组120包含的各功能模块,这样,在对目标项目投产时,可以通过命令直接选择调用所需功能模块,实现本次目标项目投产,无需人工编写大量程序代码,避免了潜在误操作可能导致的问题,实现了投产的自动化和复用,降低了对投产操作人员的技术门槛。本技术对系统中功能封装模组120所包含的功能模块的数量和类型不做限制,可以依据场景需求进行灵活扩展。41.在一些实施例中,结合图3所示的uml(unifiedmodelinglanguage,统一建模语言或标准建模语言)类图,功能封装模组120中的脚本引擎scriptengine这个功能模块中,封装了注册模块以及执行脚本文件、字符串脚本功能,如图3所示,scriptengine所封装的功能可以包括但并不局限于:scriptengine.registermodules(即注册模块)、scriptengine.evalstring(即执行脚本字符串)、scriptengine.evalfile(即执行脚本文件)、scriptengine.destroy(即销毁脚本引擎)等。42.如图3所示的凭证存储模块(credentialsstore)封装了密码管理功能,可以用于对服务器的密码(即认证凭证)进行加密存放,避免在配置文件使用明文密码,提高数据存储安全性。基于此,该credentialsstore模块封装的功能可以包括但并不局限于:credentialsstore.openstore(即打开凭据存储)、credentialsstore.getcredentials(即获取服务器认证凭证,本技术对该认证凭证类型不做限制,可视情况而定)。其中,如图3所示,本技术可以加载凭证文件实现,其凭证内容可以包括但并不局限于:为字符串(tring)的凭证id(credentialsid)、为字符串(tring)的凭证类型(credentialstype)、为字节内容([]byte)的凭证有效载荷(credentialspayload)等,可以依据部署需求进行模块扩展,本技术在此不做一一举例详述。[0043]基于ssh(secureshell,安全壳)协议的文件传输模块(filetransfer)封装的功能,如图3所示,客户端client可以基于ssh协议向服务器传输数据(如图3所示的*sshclient表示的文件传输场景),也可以基于ssh协议建立会话(session),实现参与会话多方设备之间的数据交互(如图3中的*ssh.session表示的文件传输场景)。因此,文件传输模块(filetransfer)可以包括但并不局限于:filetransfer.transformpayload(即传输字节内容至服务器)、filetransfer.transformfile(即传输本地文件至服务器)、filetransfer.stat(即查看服务器文件信息)等。[0044]其中,关于客户端基于ssh协议实现与服务器的文件传输的通信控制方法,可以结合图3所示的sshclient模块内容的描述,该模块可以基于ssh协议进行配置,即*sshconfig,且基于ssh协议实现客户端与服务器的通信连接,即*ssh.connection,基于此,该sshclient模块封装的功能可以包括但并不局限于:sshclient.connect(即建立客户端到服务器的ssh连接)、sshclient.opensession(即创建客户端到服务器的ssh会话)、sshclient.close(即关闭客户端与服务器的ssh连接)。可见,在客户端与服务器之间的通信控制过程中,可以依据部署需求合理调用该sshclient模块中的相应代码,实现对应功能的通信控制。[0045]在本技术中,基于ssh协议还可以执行远程命令,对于上述关于ssh协议的功能封装,除了封装了文件传输功能,还封装了远程命令执行功能,如图3中的shellexecuter(外壳执行器)模块,通过该模块可以执行客户端发送的命令,其通常是建立客户端与服务器通信连接的基础上,客户端基于ssh协议向服务器发送命令,该模块封装的功能可以包括但并不局限于:shellexecuter.execute(即在服务器执行指令)、shellexecuter.executebatch(即在服务器执行多行指令)等,因此,服务器执行指令的场景下,可以依据实际指令执行方式,调用shellexecuter模块中的相应代码实现,无需人工编写指令执行代码。[0046]此外,对于系统的功能封装模块还可以包括日志封装模块reporter,其可以用于记录任务执行过程中发生的各事件(events),对此其封装的功能可以包括:logevent(即以日志log方式记录监测到的事件内容)、renderasfile(即以文件方式呈现所记录的日志数据,如生成日志报告文件后输出)。其中,对于记录的任一事件,如图3所示,可以记录但并不局限于开始时间(startdatatime)、结束时间(enddatatime)、事件主题(subject,可以采用字符串string格式记录)、事件详情(details,可以采用字符串string格式记录)等,可以依据实际需求进行灵活配置,包括但并不局限于图3所示抽象得到的内部模块所封装的功能方法。[0047]由于本技术是使用golang跨平台编译语言实现目标项目的自动化部署,且该目标项目采用lua脚本语言构建配置文件,但该配置文件中的lua代码并不能直接调用系统上述各功能模块中的golang代码,这就需要依据go-luabirdge(golang编译语言与lua脚本语言之间的转换模块,记为go-lua代码转换模块),将所调用功能模块的golang代码注册为lua扩展,以便后续能够将调用的golang代码注册到lua实例中,包括自动化部署可靠完成,实现过程本技术不做详述。[0048]golang开源库130是系统底层功能的实现,通常都是第三方golang开源库,包括但并不局限于图1所示的ssh-client(ssh客户端)、scp(securecopy,传输命令)、go-lua(golang调用lua脚本)、cobra(go语言库)等,可以依据实际需求进行灵活配置扩展。[0049]如图1所示,功能封装模组120中还可以包括脚本解释器(scriptinterpreter)/编译器,用于实现对各功能封装模组的功能代码编译,以构建本技术提出的自动化部署工具;在完成对目标项目的各部署任务的部署流程的配置后,可以基于由此得到的部署流程信息进行脚本编译,得到针对该目标项目的配置文件等,本技术对脚本编译器在本技术技术方案中的工作原理不做详述,可视情况而定。[0050]项目部署控制器140可以是系统所在计算机设备的控制器,如cpu等,其可以执行本技术提出的基于golang的项目部署方法,实现过程可以参照上下文实施例相应部分的描述,本技术实施例在此不做详述。[0051]应该理解的是,如图1所示,该系统的底层还可以包括golang代码执行器(golangruntime),其可以在编译器编译时,将所调用的golang代码打包进入适用于目标平台(即需要部署目标项目的生产服务器所支持的应用平台)的可执行文件,将其发送至生产服务器运行,完成目标项目的投产操作。由于golang支持多种操作系统,如windows、linux、macos等,操作人员无需针对设备安装的操作系统单独编写目标项目的程序代码,能够使目标项目跨平台使用。[0052]另外,描述于本公开实施例中所涉及到的模块可以通过软件的方式实现,也可以通过硬件的方式来实现。其中,模块的名称在某种情况下并不构成对该模块本身的限定。且本文中描述的功能可以至少部分地由一个或多个硬件逻辑部件来执行。例如,非限制性地,可以使用的示范类型的硬件逻辑部件包括:现场可编程门阵列(fpga)、专用集成电路(asic)、专用标准产品(assp)、片上系统(soc)、复杂可编程逻辑设备(cpld)等等。[0053]结合上文实施例描述的系统结构,如图4所示,为本技术提出的基于golang的项目部署方法的一可选示例的流程示意图,该方法可以由支持基于golang的项目部署系统运行的服务器执行,如图4所示,该方法可以包括:[0054]步骤s41,响应针对目标项目的部署请求,获得目标项目的配置文件;该配置文件包括针对目标项目定义的至少一个部署任务各自的部署流程信息;[0055]结合上文实施例对配置文件的相关描述,为了适配不同项目(如应用程序等)的部署方式,本技术采用lua脚本语言来构建配置文件,最大限度地增加配置的灵活性,系统操作人员可以为目标项目定制部署流程,即定义本次目标项目涉及到的至少一个部署任务task,将其整个部署流程所要执行的指令,以stage和step的方式配置,得到相应的部署流程信息,本技术对配置文件包含的各部署任务的配置流程信息的内容及其表示方式不做限制,可视情况而定。[0056]其中,对于配置文件包含的一些函数,相对于使用golang编译语言定义,使用脚本语言更加简单,如task函数,部署任务的定义函数可以为:[0057][0058][0059]经过分析可知,这类函数可以称为内置lua函数,其可以包括但并不局限于lua函数名依次为:task(即定义task,也就是定义部署任务)、stage(即定义stage)、step(即定义step)、runtask(即执行任务)、runalltask(即执行所有任务)。关于这些内置lua函数包含的代码,可以参照上文task函数的部署任务定义代码确定,本技术在此不做详述。[0060]在配置文件的构建过程中,系统中的脚本配置模组可以包括项目部署流程涉及到的各类函数,操作人员针对目标项目的部署需求,填写适用于该目标项目的任务标识、配置项等,调取相应的函数,生成目标项目所需的部署任务对应的lua函数代码,完成各部署任务的定义,得到对应的部署流程信息。[0061]应该理解,操作人员通过客户端登录系统后,系统通常会依据所获得的目标项目的配置文件,加载对应的至少一个依赖项,即按照配置文件go.mod,实现目标项目投产操作的核心第三方依赖,依赖项加载过程可以通过执行但并不局限于如下代码自动实现:[0062][0063]上述要求require中加载的各依赖项可以表示含义为:实现命令行参数解析;实现各种加密算法和协议,其中包含ssh协议;实现基于ssh协议的文件传输协议;用golang实现的lua脚本引擎。在后续对所获得的配置文件包含的内容进行处理,直至完成目标项目的投产操作,可以按照所加载的各依赖项的要求实现。[0064]在完成依赖项加载后,可以对常用的库进行封装,如上文列举的golang开源库,以便后续调取对应库中的信息,满足投产操作需求。[0065]步骤s42,调用功能封装模组中的脚本引擎模块,创建针对该配置文件的脚本引擎;[0066]如上文系统实施例的相关描述,本技术项目部署流程(即投产操作行为)抽象为一个个功能封装模组,将各流程步骤封装到对应的功能封装模组中,所以说,本技术的功能封装模组可以是基于项目部署流程的不同内容构建的,且不同功能封装模组所封装的功能实现方法不同,关于功能封装模组所封装的功能实现方法可以参照但并不局限于上文系统实施例相应部分的描述,本技术实施例在此不做详述。[0067]如上文对脚本引擎模块scriptengine所封装的功能的相关描述,可以据此创建适用于目标项目的配置文件的scriptengine,且该scriptengine包含有registermodules、evalstring、evalfile和destroy等模块,每一模块包含实现自身功能的代码,代码内容本技术不做详述。[0068]步骤s43,通过该脚本引擎封装的注册模块,将所调取的功能封装模组的golang代码转换为lua扩展后注册到lua实例,以使配置文件能够通过lua函数调用对应的golang函数;[0069]由于配置文件中的lua代码不能直接调用golang代码,本技术可以使用golang代码定义lua扩展,即将golang代码注册为lua扩展,以便后续注册到lua实例中。以在服务器执行指令的sshexecute模块为例,来说明定义lua扩展过程:[0070][0071][0072]关于其他golang代码构建的功能封装模块的lua扩展实现过程类似,本技术不做一一详述。关于将golang代码注册为lua扩展的实现过程,可以调取功能封装模组中的go-luabirdge模组实现,之后的lua函数注册实例实现过程,可以利用脚本引擎封装的注册模块实现,仍以sshexecute这一功能实现方法的实例注册为例进行说明,该lua实例的注册代码可以包括:[0073][0074]在本技术实施例中,需要使用配置文件中的lua代码调用golang函数实现的部署流程可以如下表所示:[0075]表1[0076]lua函数名golang函数名作用sshexecutelsshexecute在服务器执行指令ssheecutebatchlssheecutebatch在服务器执行多行指令filetransformpayloadlfiletransformpayload传输字节内容至服务器filetransformfilelfiletransformfile传输本地文件至服务器filestatlfilestat查看服务器文件信息getcredentialslgetcredentials获取服务器认证凭证[0077]关于表1中其他lua函数的实现过程,可以参照上述sshexecute注册lua实例的实现过程,本技术不做一一举例详述。[0078]步骤s44,按照部署流程信息,执行对应的部署任务,将目标项目部署到目标服务器运行;[0079]在实际应用中,对于整个自动化部署方法,可以通过定义主函数实现,该主函数main.go可以为:[0080][0081]示例性的,以目标项目为网关项目为例进行说明,其配置文件是该网关项目目录下的.easybox.lua的文件,在其中定义了批量部署任务,部署任务task名称为“deploy:gateway”,在部署任务的执行过程是在该.easybox.lua配置文件同目录执行“ezdeploy:gateway”。在实际执行过程中,可以从命令行确定“deploy:gateway”这一部署任务的参数,创建的脚本引擎获得该部署任务对应的配置项,从而按照该配置项执行该部署任务,实现过程本技术不做详述。可以理解,对于配置文件包含的其他部署任务的实现过程类似,本技术不做一一举例详述。[0082]其中,通过执行配置文件所定义的部署任务,将目标项目部署到多台服务器的实现过程,可以参照下文代码表示的gateway-server部署任务实现过程:[0083][0084][0085][0086]步骤s45,销毁所创建的脚本引擎。[0087]在配置文件包含的各部署任务执行完毕后,可以通过脚本引擎封装的destroy模块,销毁创建的脚本引擎,从而回收该脚本引擎占用的内存空间。[0088]综上,在本技术实施例中,在需要部署目标项目的情况下,可以获得该目标项目的配置文件,即针对该目标项目定义的至少一个部署任务各自的部署流程信息,提高配置灵活性,便于使用者开发满足目标项目的功能及扩展功能,且本技术可以基于项目部署流程的不同内容构建了对应的功能封装模组,将其封装到一个自动化部署工具,这样,可以直接调用功能封装模组中的脚本引擎模块,创建针对目标项目的配置文件的脚本引擎,通过该脚本引擎封装的注册模块,对所调取的功能封装模组的golang代码注册为lua扩展后再注册到lua实例,以使配置文件能够通过lua函数调用对应的golang函数,按照部署流程信息执行对应的部署任务,将目标项目部署到目标服务器运行,减少跨平台开发的成本,且无需开发者关心命令编写方式,避免了人工编写操作命令产生的各种误操作,所导致的严重后果,降低了人力和时间成本,提高了投产效率和可靠性。[0089]参照图5,为本技术提出的基于golang的项目部署方法的又一可选示例的流程示意图,该方法可以对上文实施例描述的基于golang的项目部署方法的一可选细化实现过程进行描述,但并不局限于本实施例描述的这种细化实现方法,如图5所示,该细化方法可以包括:[0090]步骤s51,响应针对目标项目的部署请求,获得目标项目的配置文件;[0091]步骤s52,调用功能封装模组中的脚本引擎模块,创建针对该配置文件的脚本引擎;[0092]步骤s53,通过该脚本引擎封装的注册模块,将所调取的功能封装模组的golang代码注册为lua扩展后注册到lua实例,以使配置文件能够通过lua函数调用对应的golang函数;[0093]关于步骤s51-步骤s53的实现过程,可以参照上文实施例相应部分的描述,本实施例在此不做赘述。[0094]应该理解的,在本技术实际应用中,在使用golang自动化部署工具,实现目标项目部署的过程中,通常会加载目标项目所需的依赖项,如响应命令行接口感应到的部署命令,确定目标项目的项目标识后,加载与项目标识关联的依赖项,将该依赖项链接至目标项目,这样,在自动化部署工具引入依赖后,可以依据所加载的依赖项,构建用于将目标项目部署至目标服务器的功能封装模块,如对项目部署应用中的常用库进行封装,以便后续可以使用时可以直接调用即可,提高后续项目部署的便利性和效率。[0095]步骤s54,以命令行方式获得第一任务标识;[0096]如上文对配置文件的相关描述,目标项目的一个配置文件中可以包含多个部署任务task,配置对应的任务标识来区分不同的task,该任务标识可以是任务名称taskname,如上文配置文件示例中“demo”等。因此,对于需要执行的任一部署任务,本技术可以通过预置模组中的命令行接口模块,采用命令行方式执行自动化部署工具,触发配置脚本模块配置执行命令的详细参数,获得需要执行的部署任务的第一任务标识。但并不局限于这种执行方式。[0097]步骤s55,通过脚本引擎,从部署流程信息中,获得第一任务标识对应的配置项;[0098]在获得需要执行的部署任务的第一任务标识后,脚本引擎可以解析目标项目的配置文件,从目标项目的部署流程信息中,查询该第一任务标识对应的配置项,如具有该第一任务标识的部署任务定义的不同任务阶段的不同执行步骤内容。[0099]仍以上文任务标识为“demo”的部署任务的配置文件内容为例进行说明,获得“demo”这一任务标识后,可以解析配置文件,从“demo”这一名称的部署任务对应的部署流程信息中,确定该“demo”后的大括号内的内容,即“demo”对应的所有配置项,本技术对各部署任务的配置项内容不做限制,可视情况而定。可以理解,对于不同部署任务对应的配置项往往不同,本技术实施例在此不做详述。[0100]在本技术提出的一些实施例中,可以将每一个task的内容存储在一个table中;也可以将针对同一项目定义的所有task的内容存储在一个table中,且保留各task与配置项内容之间的对应关系。基于此,本技术可以采用对应关系表(如table)的方式,对同一任务标识的部署任务的各配置项进行存储,以使各配置项能够按照对应关系表顺次执行,这样,脚本引擎可以查询该对应关系表,确定第一任务标识对应的各配置项,即确定部署任务对应的各配置项,但并不局限于这种配置项获取方式。[0101]步骤s56,按照所获得的配置项,执行具有第一任务标识的部署任务;[0102]本技术实施例通过解析目标项目的配置文件,可以确定针对目标项目定义的各部署任务,以及各部署任务对应的配置项后,可以据此执行所获得的第一任务标识对应的部署任务,如依次执行该部署任务包含的stages,实现过程不做详述。[0103]在又一些实施例中,若按照上文描述的方法解析目标项目的配置文件,以命令行方式未获得第一任务标识,说明该配置文件未包含具有第一任务标识的部署任务,可以直接执行目标项目预定义的所有部署任务,因此,在未获得第一任务标识的情况下,可以按照该目标项目的部署流程信息,执行配置文件包含的所有部署任务。[0104]步骤s57,调取预定义的日志函数;[0105]步骤s58,执行日志函数,记录部署任务的执行过程,得到对应的日志数据;[0106]步骤s59,利用该日志数据,生成预设格式的任务执行报告。[0107]本技术实施例中,在上述配置文件的部署任务执行过程中,可以调用功能封装模组中的reporter模块,通过日志方式记录部署任务执行过程,将得到的日志数据生成预设格式(如html)的任务执行报告,实现过程以及任务执行报告的内容本技术不做限制。[0108]可选的,对于生成的任务执行报告,可以将其与目标项目的配置文件关联存储,以供后续查看。如触发目标项目的任务执行报告进行查看,将该任务执行报告发送至相应终端输出,如图6所示的一种任务执行报告示意图,其可以记录任务启动时间、结束时间、运行时长、运行结果等,可视情况而定。这样,开发者可以通过观看任务执行报告的内容,确定针对目标项目定义的各部署任务的执行过程是否正常,如图6所示的任务执行报告内容可知,该示例执行了3个stage(即图6中序号1、2和3对应的内容),每个stage可以展开查看该stage执行过程中具体执行step(如图6中1.1、1.2、1.3、1.4、1.5序号对应的执行步骤),且详细记录每个step执行的日志数据,可以触发对应任务执行步骤的“详情”提示按钮,输出该部署任务对应执行过程产生的日志数据内容,如图6对序号1的stage对应的“详情”提示按钮进行点击,输出该stage包含的5个step对应的日志数据,可以点击该日志数据右上角显示的“×”按钮,关闭对该日志数据的显示,本技术对任务执行报告内容查看实现方法不做限制。[0109]可以理解,对于任务生成报告的内容,可以依据错误排查、备案等应用需求,灵活调整任务生成报告的报告记录规则,从而按照调整后的报告记录规则,自动提取并记录相应的日志数据,由此生成符合该报告记录规则的任务生成报告,以便后续查询或分析该任务生成报告的详情内容,实现错误排查和备案等后续处理。[0110]另外,需要说明,上述各实施例对应附图包含的流程图和框图,示出了按照本公开各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。[0111]也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。[0112]也就是说,对于上文方法实施例,虽然采用特定次序描绘了各操作,但是这不应当理解为要求这些操作以所示出的特定次序或以顺序次序执行来执行。在一定环境下,多任务和并行处理可能是有利的。应当理解,本公开的方法实施方式中记载的各个步骤可以按照不同的顺序执行,和/或并行执行。此外,方法实施方式可以包括附加的步骤和/或省略执行示出的步骤。本公开的范围在此方面不受限制。[0113]参照图7,为适用于本技术提出的基于golang的项目部署方法的计算机设备的一可选示例的硬件结构示意图,该计算机设备可以是终端设备或服务器,本技术实施例中的终端设备可以包括但并不局限于:智能手机、笔记本电脑、数字广播接收器、pda(个人数字助理)、pad(平板电脑)、pmp(便携式多媒体播放器)、车载终端(例如车载导航终端)、智慧交通设备、智慧医疗设备、虚拟现实设备等等的移动终端以及诸如数字tv、台式计算机等等的固定终端。图7示出的计算机设备仅仅是一个示例,不应对本公开实施例的功能和使用范围带来任何限制。[0114]如图7所示,计算机设备可以包括处理装置71以及存储装置72,其中,存储装置72可以用于存储的实现本技术提出的基于golang的项目部署方法的程序;处理装置72可以读取并加载该程序,本技术提出的基于golang的项目部署方法,实现过程本技术实施例在此不做赘述。[0115]在一些实施例中,上述处理装置71可以包括但并不局限于中央处理器、图形处理器等,结合上述分析可以理解,该处理装置71可以包括基于golang的项目部署系统的项目部署控制器,通过控制该系统中各组成模组/模块,实现目标项目的部署任务,实现过程可以参照上文实施例相应部分的描述,本实施例在此不做赘述。可见,本技术提出的计算机设备可以包括上文实施例提出的基于golang的项目部署系统,关于该系统组成结构本实施例在此不做详述。[0116]在本技术又一些实施例中,上述存储装置72可以包括但并不局限于:只读存储器(rom)、随机访问存储器(ram)等多种类型的存储器,这样,在实际应用中,处理装置71可以依据只读存储器(rom)中的程序或者从存储装置的如磁带、硬盘等存储设备加载到随机访问存储器(ram)中的程序,执行各种适当的动作和处理,实现本技术提出的基于golang的项目部署方法。在ram中,还可以存储有计算机设备操作所需的各种其他程序和数据。处理装置71、rom以及ram通过总线彼此相连。输入/输出(i/o)接口也连接至总线,以实现计算机设备内部组成器件之间的数据交互,以及满足该计算机设备与外部设备的数据传输需求。[0117]可以理解的是,在计算机设备为终端设备的情况下,该计算机设备还可以包括能够连接计算机设备的i/o接口的如触摸屏、触摸板、键盘、鼠标、摄像头、麦克风、加速度计、陀螺仪等至少一个输入组件,如液晶显示器(lcd)、扬声器、振动器等至少一个输出组件,以及能够连接无线/有线网络的至少一种通信装置,该通信装置可以允许计算机设备通过有线网络和/或无线网络与其他设备进行通信,满足不同设备之间的数据传输需求。需要说明,图7示出的计算机设备结构并不对其硬件组成构成任何限制,并不要求实施或具备所有示出的装置,依据实际需求可以替代地实施或具备更多或更少的装置,本技术不做一一举例。[0118]结合上文对本技术技术方案的相关描述,依据本公开的一个或多个实施例,图4所示方法示例,提供了一种基于golang的项目部署方法,包括:[0119]响应针对目标项目的部署请求,获得所述目标项目的配置文件;所述配置文件包括针对所述目标项目定义的至少一个部署任务各自的部署流程信息;[0120]调用功能封装模组中的脚本引擎模块,创建针对所述配置文件的脚本引擎;所述功能封装模组是基于项目部署流程的不同内容构建的,且不同功能封装模组所封装的功能实现方法不同;[0121]通过所述脚本引擎封装的注册模块,将所调取的功能封装模组的golang代码转换为lua扩展代码后注册到lua实例,以使所述配置文件能够通过lua函数调用对应的golang函数;[0122]按照所述部署流程信息,执行对应的所述部署任务,将所述目标项目部署到目标服务器运行;[0123]销毁所述脚本引擎。[0124]依据本公开的一个或多个实施例,在如图5所示方法示例提供的一种基于golang的项目部署方法中,按照所述部署流程信息,执行对应的所述部署任务的实现过程可以包括:[0125]以命令行方式获得第一任务标识;[0126]通过所述脚本引擎,从所述部署流程信息中,获得所述第一任务标识对应的配置项;[0127]按照所获得的所述配置项,执行具有所述第一任务标识的所述部署任务。[0128]依据本公开的一个或多个实施例,在如图4所示方法示例提供的一种基于golang的项目部署方法中,按照所述部署流程信息,执行对应的所述部署任务的实现过程还可以包括:[0129]以命令行方式未获得所述第一任务标识;[0130]按照所述部署流程信息,执行所述配置文件包含的所有部署任务。[0131]依据本公开的一个或多个实施例,如图4所示方法示例提供的一种基于golang的项目部署方法,还可以包括:[0132]采用对应关系表的方式,对同一任务标识的部署任务的各配置项进行存储,以使所述各配置项能够按照所述对应关系表顺次执行;[0133]基于此,执行该基于golang的项目部署方法过程中,获得所述第一任务标识对应的配置项这一处理步骤可以包括:[0134]查询所述对应关系表,确定所述第一任务标识对应的各配置项。[0135]依据本公开的一个或多个实施例,如图5所示方法示例提供的一种基于golang的项目部署方法,在所述执行对应的所述部署任务过程中,该方法还可以包括:[0136]调取预定义的日志函数;[0137]执行所述日志函数,记录所述部署任务的执行过程,得到对应的日志数据;[0138]利用所述日志数据,生成预设格式的任务执行报告。[0139]依据本公开的一个或多个实施例,如图4所示方法示例提供的一种基于golang的项目部署方法,还可以包括:[0140]响应命令行接口感应到的部署命令,确定目标项目的项目标识;[0141]加载与所述项目标识关联的依赖项,将所述依赖项链接至所述目标项目;[0142]依据所加载的所述依赖项,构建用于将所述目标项目部署至目标服务器的功能封装模块。[0143]依据本公开的一个或多个实施例,如图1所示系统示例提供的一种基于golang的项目部署系统,可以包括:预置模组、多个功能封装模组、golang开源库以及项目部署控制器,其中:[0144]所述预置模组包括命令行接口和配置脚本模块,所述配置脚本模块用于配置执行所述命令行接口感应的命令的参数,获得目标项目的配置文件;所述配置文件包括针对所述目标项目定义的至少一个部署任务各自的部署流程信息;[0145]所述多个功能封装模组包括脚本引擎模块、文件传输模块、go-lua代码转换模块,其中:[0146]所述脚本引擎模块,用于创建针对所述配置文件的脚本引擎;[0147]所述文件传输模块,用于实现服务器与客户端之间的数据传输;[0148]go-lua代码转换模块,用于将所述功能封装模组的golang代码转换为lua扩展代码,以使得所述脚本引擎封装的注册模块,能够将转换得到的lua扩展代码注册到lua实例;[0149]所述项目部署控制器,用于实现如上述的基于golang的项目部署方法。[0150]依据本公开的一个或多个实施例,在如图1示例提供的基于golang的项目部署系统中,所述多个功能封装模组还包括:凭证存储模块和/或日志封装模块;[0151]所述凭证存储模块,用于对各服务器自身的认证凭证进行加密存储;[0152]所述日志封装模块,用于执行预定义的日志函数,记录部署任务的执行过程,利用得到对应的日志数据,生成预设格式的任务执行报告。[0153]依据本公开的一个或多个实施例,在如图1示例提供的基于golang的项目部署系统中,还可以包括:[0154]位于所述基于golang的项目部署系统底层的golang代码执行器,用于能够接入不同应用平台,将目标项目部署到任一所述应用平台上的目标服务器运行。[0155]本技术实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器加载并执行,实现上述的基于golang的项目部署方法的各步骤,具体实现过程可以参照上述实施例相应部分的描述,本实施例不做赘述。[0156]本公开上述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(ram)、只读存储器(rom)、可擦式可编程只读存储器(eprom或闪存)、光纤、便携式紧凑磁盘只读存储器(cd-rom)、光存储器件、磁存储器件、或者上述的任意合适的组合。[0157]在本公开中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本公开中,计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读信号介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:电线、光缆、rf(射频)等等,或者上述的任意合适的组合。[0158]最后,需要说明,尽管已经采用特定于结构特征和/或方法逻辑动作的语言描述了本主题,但是应当理解所附权利要求书中所限定的主题未必局限于上面描述的特定特征或动作。相反,上面所描述的特定特征和动作仅仅是实现权利要求书的示例形式。[0159]虽然在上面论述中包含了若干具体实现细节,但是这些不应当被解释为对本公开的范围的限制。在单独的实施例的上下文中描述的某些特征还可以组合地实现在单个实施例中。相反地,在单个实施例的上下文中描述的各种特征也可以单独地或以任何合适的子组合的方式实现在多个实施例中。[0160]以上描述仅为本公开的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本公开中所涉及的公开范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离上述公开构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本公开中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1