一种业务代码部署方法及装置与流程

文档序号:17317394发布日期:2019-04-05 21:20阅读:155来源:国知局
一种业务代码部署方法及装置与流程

本发明属于业务代码处理技术领域,更具体地说,尤其涉及一种业务代码部署方法及装置。



背景技术:

在日新月异的互联网时代,各公司的产品都处于一个快速原型逐步迭代的演进节奏中,在每次迭代过程中该产品的业务代码发生变化,相对应每次迭代过程中需要将该产品的业务代码进行部署。目前业务代码的部署流程如下:

业务代码开发完毕——手动升级业务代码的version(版本号)——新建tag(标签)——jenkins组件打包以通过jenkins组件获取到开发出的业务代码的代码包——手动执行上线脚本部署以通过上线脚本部署代码包,实现业务代码的部署。

从上述业务代码的部署流程可知,目前业务代码的部署流程中存在多处人工干预环节,如手动升级业务代码的version和手动执行上线脚本部署。但是由于上线脚本部署的技术人员的技术水平和专业能力不一,导致上线存在很大的不可控性。



技术实现要素:

有鉴于此,本发明的目的在于提供一种业务代码部署方法及装置,用于自动执行上线脚本进行业务代码的部署,从而降低上线的不可控性。技术方案如下:

本发明提供一种业务代码部署方法,所述方法包括:

获得封装有待部署业务代码的代码包;

确定需要部署所述待部署业务代码的服务器,其中所述服务器中有部署所述待部署业务代码所需的部署脚本;

将所述代码包写入到所述服务器中,并触发所述服务器重启;

在所述服务器重启过程中,控制所述服务器执行所述部署脚本,以使得服务器在执行所述部署脚本的过程中将所述代码包中封装的所述待部署业务代码部署到所述服务器中。

优选的,所述在所述服务器重启过程中,控制所述服务器执行所述部署脚本包括:

在所述服务器重启过程中确定用于部署所述代码包中封装的所述待部署业务代码的进程;

确定所述进程在部署所述待部署业务代码所需的启动参数;

基于所述启动参数确定所述待部署业务代码所需的存储空间和用于监听所述进程的端口;

控制所述进程在所述存储空间中写入所述待部署业务代码,并控制所述端口对所述进程进行监听;

如果所述端口返回表明所述进程成功写入所述待部署业务代码的提示信息,则确定完成所述待部署业务代码的部署。

优选的,所述确定需要部署所述待部署业务代码的服务器包括:

基于所述待部署业务代码对应的业务服务,确定具备所述业务服务的服务器,并将具备所述业务服务的服务器确定为需要部署所述待部署业务代码的服务器。

优选的,所述获得封装有待部署业务代码的代码包包括:如果当前处于业务代码部署阶段,则根据代码库中最新一次代码提交创建一个标签tag;

基于所述标签tag从所述代码库中获取所述待部署业务代码;

将所述待部署业务代码封装于代码包中。

优选的,所述方法还包括:获取所述待部署业务代码的版本号和所述待部署业务代码对应的业务模块的身份标识信息;

基于所述待部署业务代码的版本号和所述待部署业务代码对应的业务模块的身份标识信息,生成所述待部署业务代码的身份标识信息;

将所述待部署业务代码的身份标识信息和封装有所述待部署业务代码的代码包绑定。

优选的,所述获得封装有待部署业务代码的代码包包括:如果当前处于业务代码回滚阶段,则根据用户输入的待部署业务代码的身份标识信息,得到所述代码包。

本发明还提供一种业务代码部署装置,所述装置包括:

获得单元,用于获得封装有待部署业务代码的代码包;

确定单元,用于确定需要部署所述待部署业务代码的服务器,其中所述服务器中有部署所述待部署业务代码所需的部署脚本;

写入单元,用于将所述代码包写入到所述服务器中;

控制单元,用于触发所述服务器重启,并在所述服务器重启过程中,控制所述服务器执行所述部署脚本,以使得服务器在执行所述部署脚本的过程中将所述代码包中封装的所述待部署业务代码部署到所述服务器中。

优选的,所述控制单元包括:

触发子单元,用于触发所述服务器重启;

确定子单元,用于在所述服务器重启过程中确定用于部署所述代码包中封装的所述待部署业务代码的进程,确定所述进程在部署所述待部署业务代码所需的启动参数,并基于所述启动参数确定所述待部署业务代码所需的存储空间和用于监听所述进程的端口;

控制子单元,用于控制所述进程在所述存储空间中写入所述待部署业务代码,并控制所述端口对所述进程进行监听,如果所述端口返回表明所述进程成功写入所述待部署业务代码的提示信息,则确定完成所述待部署业务代码的部署。

优选的,所述确定单元,用于基于所述待部署业务代码对应的业务服务,确定具备所述业务服务的服务器,并将具备所述业务服务的服务器确定为需要部署所述待部署业务代码的服务器。

优选的,所述获得单元,用于如果当前处于业务代码部署阶段,则根据代码库中最新一次代码提交创建一个标签tag,基于所述标签tag从所述代码库中获取所述待部署业务代码,将所述待部署业务代码封装于代码包中,以及用于如果当前处于业务代码回滚阶段,则根据用户输入的待部署业务代码的身份标识信息,得到所述代码包;

其中所述待部署业务代码的身份标识信息:基于所述待部署业务代码的版本号和所述待部署业务代码对应的业务模块的身份标识信息生成。

从上述技术方案可知,在获得封装有待部署业务代码的代码包的情况下,确定需要部署待部署业务代码的服务器,将代码包写入到服务器中,并触发服务器重启,这样就可以在服务器重启过程中,控制服务器执行自身内部部署的部署脚本,以使得服务器在执行部署脚本的过程中将代码包中封装的待部署业务代码部署到服务器中,实现待部署业务代码的自动部署,相对于现有手动执行部署脚本方式来说,降低上线的不可控性。

附图说明

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

图1是本发明实施例提供的一种业务代码部署方法的流程图;

图2是本发明实施例提供的一种业务代码部署装置的结构示意图;

图3是本发明实施例提供的业务代码部署装置中控制单元的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

请参阅图1,其示出了本发明实施例提供的一种业务代码部署方法的流程图,用于实现待部署业务代码的自动部署,以降低待部署业务代码上线的不可控性,可以包括以下步骤:

s101:获得封装有待部署业务代码的代码包。可以理解的是:代码包是将待部署业务代码打包得到的,例如可以借助于jenkins组件实现,jenkins组件是基于java开发的一种持续集成工具,用于监控持续重复的工作,通过jenkins组件可重复性的为不同待部署业务代码打包。而待部署业务代码是用于实现一种业务服务的程序代码,如待部署业务代码是用于实现网络安全服务的程序代码,或者待部署业务代码是用于实现音视频播放服务的程序代码,对于实现这些业务服务的待部署业务代码均可以打包成一个代码包。

在本实施例中,代码包的获得方式会因为当前所处阶段的不同而不同,如当前所处阶段有业务代码部署阶段和业务代码回滚阶段,其中业务代码部署阶段是一个待部署业务代码的部署阶段,业务代码回滚阶段则是对应同一个业务服务的多个待部署业务代码来说,从当前的待部署业务代码回滚到上一次需部署的待部署业务代码,当前的待部署业务代码是在上一次需部署的待部署业务代码之后编写的业务代码。

在实际应用中业务代码部署阶段和业务代码回滚阶段可以展示给用户,通过用户从这两个阶段中选取一个阶段作为代码包当前所处阶段,如通过界面方式将业务代码部署阶段和业务代码回滚阶段展示给用户,例如可以采用按钮控件的方式展示,当检测到任一按钮控件被触发后,基于触发位置确定是业务代码部署阶段对应的按钮控件还是业务代码回滚阶段对应的按钮控件被触发,得到代码包当前所处阶段。下面分别对这两个阶段的代码包获得过程进行说明:

在业务代码部署阶段,根据代码库中最新一次代码提交创建一个标签tag,基于标签tag从代码库中获取待部署业务代码,将待部署业务代码封装于代码包中。也就是说代码库是一个用于存储待部署业务代码的数据库,在业务代码部署阶段,首先需要根据代码库中最新一次代码提交创建一个标签tag,这样就可以基于标签tag获取到最新一次提交的代码作为待部署业务代码,然后封装得到代码包,对于如何创建标签tag以及如何基于标签tag获取待部署业务代码可借助于jenkins组件实现,对此本实施例不进行详述,而所谓最新一次代码提交是当前时间之前最后一次提交。

在业务代码回滚阶段,根据用户输入的待部署业务代码的身份标识信息,得到代码包。其中待部署业务代码的身份标识信息如同身份证一样,是待部署业务代码的唯一标识,以将不同待部署业务代码进行区分,而待部署业务代码封装于一个代码包中,因此待部署业务代码的身份标识信息也可以视为是代码包的身份标识信息,进而可获取到与待部署业务代码的身份标识信息对应的代码包,用户输入待部署业务代码的身份标识信息的方式有但不限于有语音输入、触控输入和按键输入中的至少一种。

在本实施例中,待部署业务代码的身份标识信息的生成过程包括:获取待部署业务代码的版本号和待部署业务代码对应的业务模块的身份标识信息,基于待部署业务代码的版本号和待部署业务代码对应的业务模块的身份标识信息,生成待部署业务代码的身份标识信息。

例如将待部署业务代码的版本号和待部署业务代码对应的业务模块的身份标识信息组成待部署业务代码的身份标识信息,如组成方式有但不限于有:待部署业务代码的版本号和待部署业务代码对应的业务模块的身份标识信息其中一个位于另一个之前组成待部署业务代码的身份标识信息,或者待部署业务代码的版本号和待部署业务代码对应的业务模块的身份标识信息中的数据相互交叉组成待部署业务代码的身份标识信息。

其中待部署业务代码对应的业务模块的身份标识信息也是用于唯一区分待部署业务代码对应的业务模块,对于业务模块的身份标识信息的形式本实施例不再说明,此外之所以需要待部署业务代码对应的业务模块的身份标识信息是因为:

一种业务服务对应有多个业务模块,每个业务模块共用一个版本号且不同业务模块对应的待部署业务代码需要单独部署,所以为了区分单独部署的业务模块的待部署业务代码,需要在待部署业务代码的身份标识信息中加入业务模块的身份标识信息。此外在生成待部署业务代码的身份标识信息时还可以取版本号的前n位,n为自然数且n的取值可以根据实际应用而定,如取前8位,对此本实施例不加以限定。

在生成待部署业务代码的身份标识信息之后,可以将待部署业务代码的身份标识信息和封装有待部署业务代码的代码包绑定,即将待部署业务代码的身份标识信息和封装有待部署业务代码的代码包对应,这样在业务代码回滚阶段,可以根据用户输入待部署业务代码的身份标识信息获取到代码包。

s102:确定需要部署待部署业务代码的服务器,其中服务器中有部署待部署业务代码所需的部署脚本,该部署脚本用于部署待部署业务代码。在本实施例中确定需要部署待部署业务代码的服务器的方式有但不限于如下方式:

基于待部署业务代码对应的业务服务,确定具有业务服务的服务器,并将具备业务服务的服务器确定为需要部署待部署业务代码的服务器。也就是说将业务服务和待部署业务代码对应的业务服务相同的服务器作为需要部署待部署业务代码的服务器,其中服务器所具有的业务服务的获取方式有:预先记录各个服务器具有的业务服务,如在云平台记录各个服务器具有的业务服务,或者在服务器注册过程中记录服务器中具有的业务服务,或者通过脚本方式来获取各个服务器具有的业务服务等等,该脚本与用于部署待部署业务代码的部署脚本不同。

s103:将代码包写入到服务器中,并触发服务器重启。在这里需要说明的一点是:需要部署待部署业务代码的服务器会有多个,在确定这些服务器后可以将这些服务器的信息记录在一个服务器数据表中,然后依次将代码包写入到这些服务器中。而在服务器重启时可以将这些服务器同时重启,或者分批次重启,如根据这些服务器中各个服务器的业务流量和剩余负载分批次重启,如优先重启业务流量小且剩余负载大的服务器,具体分批次本实施例不加以限定。

s104:在服务器重启过程中,控制服务器执行部署脚本,以使得服务器在执行部署脚本的过程中将代码包中封装的待部署业务代码部署到服务器中,这样在服务器重启过程中就可以将待部署业务代码部署到服务器上,实现待部署业务代码的自动部署和升级。其中在服务器重启过程中控制服务器执行部署脚本的过程如下:

在服务器重启过程中确定用于部署代码包中封装的待部署业务代码的进程;确定进程在部署待部署业务代码所需的启动参数;基于启动参数确定待部署业务代码所需的存储空间和用于监听进程的端口;控制进程在存储空间中写入待部署业务代码,并控制端口对进程进行监听,如果端口返回表明进程成功写入待部署业务代码的提示信息,确定完成待部署业务代码的部署。

其中启动参数中记录有部署待部署业务代码所需的内存和端口号,由此可通过启动参数从服务器中划分中待部署业务代码占用的存储空间以及端口号所对应的端口,以通过该端口来监听进程在存储空间中写入待部署业务代码的过程,如果端口监听到的提示信息表明成功写入待部署业务代码,则说明待部署业务代码已成功写入到存储空间中,此时可以结束进程。

从上述技术方案可知,在获得封装有待部署业务代码的代码包的情况下,确定需要部署待部署业务代码的服务器,将代码包写入到服务器中,并触发服务器重启,这样就可以在服务器重启过程中,控制服务器执行自身内部部署的部署脚本,以使得服务器在执行部署脚本的过程中将代码包中封装的待部署业务代码部署到服务器中,实现待部署业务代码的自动部署,相对于现有手动执行部署脚本方式来说,降低上线的不可控性。

与上述方法实施例相对应,本发明实施例还提供一种业务代码部署装置,其结构如图2所示,可以包括:获得单元11、确定单元12、写入单元13和控制单元14。

获得单元11,用于获得封装有待部署业务代码的代码包。在本实施例中,代码包的获得方式会因为当前所处阶段的不同而不同,如当前所处阶段有业务代码部署阶段和业务代码回滚阶段,在业务代码部署阶段,获得单元11获得代码包的过程为:根据代码库中最新一次代码提交创建一个标签tag,基于标签tag从代码库中获取待部署业务代码,将待部署业务代码封装于代码包中。也就是说代码库是一个用于存储待部署业务代码的数据库,在业务代码部署阶段,首先需要根据代码库中最新一次代码提交创建一个标签tag,这样就可以基于标签tag获取到最新一次提交的代码作为待部署业务代码,然后封装得到代码包,对于如何创建标签tag以及如何基于标签tag获取待部署业务代码可借助于jenkins组件实现,对此本实施例不进行详述,而所谓最新一次代码提交是当前时间之前最后一次提交。

在业务代码回滚阶段,根据用户输入的待部署业务代码的身份标识信息,得到代码包。其中待部署业务代码的身份标识信息如同身份证一样,是待部署业务代码的唯一标识,以将不同待部署业务代码进行区分,而待部署业务代码封装于一个代码包中,因此待部署业务代码的身份标识信息也可以视为是代码包的身份标识信息,进而可获取到与待部署业务代码的身份标识信息对应的代码包,用户输入待部署业务代码的身份标识信息的方式有但不限于有语音输入、触控输入和按键输入中的至少一种。

在本实施例中,待部署业务代码的身份标识信息:基于待部署业务代码的版本号和待部署业务代码对应的业务模块的身份标识信息生成。例如将待部署业务代码的版本号和待部署业务代码对应的业务模块的身份标识信息组成待部署业务代码的身份标识信息,如组成方式有但不限于有:待部署业务代码的版本号和待部署业务代码对应的业务模块的身份标识信息其中一个位于另一个之前组成待部署业务代码的身份标识信息,或者待部署业务代码的版本号和待部署业务代码对应的业务模块的身份标识信息中的数据相互交叉组成待部署业务代码的身份标识信息,具体请参阅方法实施例中的相关说明,对此本实施例不再阐述。

确定单元12,用于确定需要部署待部署业务代码的服务器,其中服务器中有部署待部署业务代码所需的部署脚本,该部署脚本用于部署待部署业务代码。在本实施例中确定需要部署待部署业务代码的服务器的方式有但不限于如下方式:

基于待部署业务代码对应的业务服务,确定具有业务服务的服务器,并将具备业务服务的服务器确定为需要部署待部署业务代码的服务器。也就是说将业务服务和待部署业务代码对应的业务服务相同的服务器作为需要部署待部署业务代码的服务器,其中服务器所具有的业务服务的获取方式可参阅方法实施例中的相关说明,对此本实施例不再阐述。

写入单元13,用于将代码包写入到服务器中。

控制单元14,用于触发服务器重启,并在服务器重启过程中,控制服务器执行部署脚本,以使得服务器在执行部署脚本的过程中将代码包中封装的待部署业务代码部署到服务器中,这样在服务器重启过程中就可以将待部署业务代码部署到服务器上,实现待部署业务代码的自动部署和升级。

在本实施例中,控制单元14的结构如图3所示,可以包括:触发子单元141、确定子单元142和控制子单元143。

触发子单元141,用于触发服务器重启。在这里需要说明的一点是:需要部署待部署业务代码的服务器会有多个,在服务器重启时可以将这些服务器同时重启,或者分批次重启,如根据这些服务器中各个服务器的业务流量和剩余负载分批次重启,如优先重启业务流量小且剩余负载大的服务器,具体分批次本实施例不加以限定。

确定子单元142,用于在服务器重启过程中确定用于部署代码包中封装的待部署业务代码的进程,确定进程在部署待部署业务代码所需的启动参数,并基于启动参数确定待部署业务代码所需的存储空间和用于监听进程的端口。

其中启动参数中记录有部署待部署业务代码所需的内存和端口号,由此可通过启动参数从服务器中划分中待部署业务代码占用的存储空间以及端口号所对应的端口。

控制子单元143,用于控制进程在存储空间中写入待部署业务代码,并控制端口对进程进行监听,如果端口返回表明进程成功写入待部署业务代码的提示信息,则确定完成待部署业务代码的部署,此时可以结束进程。

从上述技术方案可知,在获得封装有待部署业务代码的代码包的情况下,确定需要部署待部署业务代码的服务器,将代码包写入到服务器中,并触发服务器重启,这样就可以在服务器重启过程中,控制服务器执行自身内部部署的部署脚本,以使得服务器在执行部署脚本的过程中将代码包中封装的待部署业务代码部署到服务器中,实现待部署业务代码的自动部署,相对于现有手动执行部署脚本方式来说,降低上线的不可控性。

需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1