代码同步方法、装置、计算机可读介质及终端与流程

文档序号:14797096发布日期:2018-06-29 20:06阅读:161来源:国知局

本发明实施例涉及计算机应用技术,尤其涉及一种代码同步方法、装置、计算机可读介质及终端。



背景技术:

在日常开发过程中,同一公司中往往会有A、B两个或两个以上的开发团队同时进行同一项目的开发,需要互相访问彼此的代码仓库。由于不在同一个网络环境中,互相访问彼此的代码仓库比较慢,尤其对于体量很大的代码仓库,非常耗时。因此通常做法是A团队在自己的服务器上做一个B团队维护的代码仓库的镜像,将代码仓库克隆到A团队内部服务器上。A团队开发人员只需要访问内部服务器即可快速获取该代码仓库的代码。这样提升了开发人员获取该代码的效率,同时也产生了一个问题,就是A团队从镜像代码仓库获取到的代码有可能不是B团队代码仓库的最新代码。

目前,解决上述问题的方案一般有两种,一种是人工手动处理,B团队仓库的维护人员在进行了变更之后手动推送到A团队的镜像服务器上,此方案增加了B团队仓库维护人员的工作量,且此工作比较琐碎,容易遗漏,即此方案效率低且容易出错;另外一种方案,是在A团队的镜像服务器上设定定时同步任务,即,每隔一段时间A团队的镜像服务器就去自动同步B团队服务器上的代码,此方案无需人工介入,但由于不是实时同步,因此有可能A团队开发人员在访问镜像仓库时,B团队仓库已经更新。



技术实现要素:

本发明实施例提供一种代码同步方法、装置、计算机可读介质及终端,以解决现有代码同步方法需要人工推送或实时性较差等技术问题,能够实现无需人工干预即可高效且能实时进行镜像代码同步的技术效果。

第一方面,本发明实施例提供了一种代码同步方法,该方法包括:

当检测到目标代码仓库中的代码发生变更时,通过预先建立好的镜像同步任务中的远程触发入口,接收基于事件处理接口web hook发送的远程触发消息;

当接收到远程触发消息时,基于所述镜像同步任务中的镜像同步脚本,对所述目标代码仓库中的代码进行同步。

进一步地,所述检测到目标代码仓库中的代码发生变更,包括:

检测到目标代码仓库的目标触发事件,其中,所述目标触发事件包括提交事件、推送事件、打标签事件和/或合并请求事件。

可选地,所述对所述目标代码仓库中的代码进行同步,包括:

当检测到本地端不存在与所述目标代码仓库对应的镜像代码仓库时,将所述目标代码仓库镜像同步到所述本地端,生成与所述目标代码仓库对应的镜像代码仓库。

可选地,所述对所述目标代码仓库中的代码进行同步,包括:

当检测到本地端存在与所述目标代码仓库对应的镜像代码仓库时,根据所述目标代码仓库中的代码对所述镜像代码仓库中的代码进行镜像更新。

进一步地,所述的代码同步方法还包括:

将所述本地端的所述镜像代码仓库推送到代码托管服务器中。

进一步地,所述的代码同步方法还包括:

基于软件持续集成工具Jenkins构建镜像同步任务;

对所述镜像同步任务中的远程触发入口进行配置,并在所述镜像同步任务中添加镜像同步脚本。

可选地,所述对所述镜像同步任务中的远程触发入口进行配置,包括:

在所述镜像同步任务中设置用于所述远程触发消息的统一资源定位符以及远程触发令牌。

第二方面,本发明实施例还提供了一种代码同步装置,该装置包括:

触发模块,用于当监听到目标代码仓库中的代码发生变更时,通过预先建立好的镜像同步任务中的远程触发入口,接收基于事件处理接口web hook发送的远程触发消息;

同步模块,用于当接收到远程触发消息时,基于所述镜像同步任务中的镜像同步脚本,对所述目标代码仓库进行代码同步。

第三方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现本发明任一实施例所述的代码同步方法。

第四方面,本发明实施例又提供了一种终端,所述终端包括:

一个或多个处理器;

存储器,用于存储一个或多个程序;

当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现本发明任一实施例所述的代码同步方法。

本发明实施例的技术方案,通过在检测到目标代码仓库中的代码发生变更时,通过远程触发入口接收到的远程触发消息,能够基于事件处理接口web hook机制在检测到目标代码仓库的代码发生变更时,自动发送远程触发消息,无需人工干预,进而,在检测到远程触发消息时,通过镜像中的同步任务实现代码同步,能够解决现有代码同步方法实时性较差等技术问题,高效且能实时进行镜像代码同步。

附图说明

为了更加清楚地说明本发明示例性实施例的技术方案,下面对描述实施例中所需要用到的附图做一简单介绍。显然,所介绍的附图只是本发明所要描述的一部分实施例的附图,而不是全部的附图,对于本领域普通技术人员,在不付出创造性劳动的前提下,还可以根据这些附图得到其他的附图。

图1是本发明实施例一所提供的一种代码同步方法的流程示意图;

图2A是本发明实施例二所提供的一种代码同步方法的流程示意图;

图2B是本实施例二提供的一种代码同步方法的实施实例的流程示意图;

图3是本发明实施例三所提供的一种代码同步装置的结构示意图;

图4是本发明实施例三所提供的一种终端的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

在日常开发过程中,由于往往涉及两个或两个以上的开发者同时进行同一项目的开发,因此可以采用分布式开发的工具。在本发明实施例中,可以基于分布式版本控制系统git来实现。从一般开发者的角度来看,git能够从服务器上克隆包括代码和版本信息的完整的git仓库到单机上。开发者还可以在自己的机器上根据不同的开发目的,创建分支,修改代码,在单机上自己创建的分支上提交代码以及在单机上合并分支等操作,具有减少共服务器压力和数据量,速度快,操作灵活,以及任意两个开发者之间可以很容易的解决冲突的特点,可以有效、高速的处理从很小到非常大的项目版本管理。

实施例一

图1为本发明实施例一所提供的一种代码同步方法的流程示意图,本实施例可适用于两台及两台以上的服务器需要共享统一代码库中的代码的情况,该方法可以由代码同步装置来执行,可以通过软件和/或硬件的方式来实现。

如图1所示,本实施例的方法具体包括:

S110、当检测到目标代码仓库中的代码发生变更时,通过预先建立好的镜像同步任务中的远程触发入口,接收基于事件处理接口web hook发送的远程触发消息。

具体地,检测到目标代码仓库中的代码发生变更可以包括:检测到目标代码仓库的目标触发事件,其中,所述目标触发事件包括提交事件、推送事件、打标签事件和/或合并请求事件。

在本实施例中,可以基于Jenkins预先构建好的镜像同步任务。进而设置好镜像同步任务的远程触发入口,用于接收远程触发消息,并在镜像同步任务中添加镜像同步脚本,用于在接收到远程触发消息后实现代码同步。

其中,web hook是跟随着git而兴起的技术,当将基于git服务的web hook推送到服务器的时候,服务器会发送一个特殊的请求到你指定的统一资源定位符url上,进而可以使用脚本语言来获取这个请求。可以理解的是,在执行本操作之前,需要在存储有目标代码仓库中的服务器或终端中设置事件处理接口web hook,用于在检测到目标代码仓库中的代码发生变更时,发送远程触发消息。其中,远程触发消息可以是同步请求。

S120、当接收到远程触发消息时,基于所述镜像同步任务中的镜像同步脚本,对所述目标代码仓库中的代码进行同步。

考虑到在实际操作中代码变更常常涉及各个阶段,本地端需要进行代码同步时可能之前从未执行过代码同步的操作,也可能是已经执行过代码同步的操作。因此,对所述目标代码仓库中的代码进行同步时,可以检测本地端是否存在与所述目标代码仓库对应的镜像代码仓库。

相应地,对所述目标代码仓库中的代码进行同步,包括:当检测到本地端不存在与所述目标代码仓库对应的镜像代码仓库时,将所述目标代码仓库镜像同步到所述本地端,生成与所述目标代码仓库对应的镜像代码仓库。进而,还可以包括:当检测到本地端存在与所述目标代码仓库对应的镜像代码仓库时,根据所述目标代码仓库中的代码对所述镜像代码仓库中的代码进行镜像更新。

在上述技术方案的基础上,当采用基于git服务的web hook机制时,可以设置有存储目标代码仓库的服务器、用于实现镜像同步存储镜像代码仓库的服务器以及供用户获取代码使用代码的代码托管服务器,来执行代码同步方法。即,本实施例的代码同步方法,在将代码同步到镜像代码仓库中之后,还可以进一步包括:将所述本地端的所述镜像代码仓库推送到代码托管服务器中。

本实施例的技术方案,通过在检测到目标代码仓库中的代码发生变更时,通过远程触发入口接收到的远程触发消息,能够基于事件处理接口web hook机制在检测到目标代码仓库的代码发生变更时,自动发送远程触发消息,无需人工干预,进而,在检测到远程触发消息时,通过镜像中的同步任务实现代码同步,能够解决现有代码同步方法实时性较差等技术问题,高效且能实时进行镜像代码同步。

实施例二

图2A为本发明实施例二所提供的一种代码同步方法的流程示意图,本实施例的技术方案在上述实施例的技术上,可选是还包括:基于软件持续集成工具Jenkins构建镜像同步任务;对所述镜像同步任务中的远程触发入口进行配置,并在所述镜像同步任务中添加镜像同步脚本。

如图2A所示,本实施例的方法具体包括:

S210、基于软件持续集成工具Jenkins构建镜像同步任务。

首先,创建Jenkins构建镜像同步任务Job_Project_A,此任务将主要用于将目标git仓库服务器中所存储的的目标代码仓库Project_A代码,同步到本地端的git仓库服务器中。本操作中,采用Jenkins来执行镜像代码仓库的同步任务,由于Jenkins提供远程触发支持,只要接收到远程触发消息就会执行镜像代码仓库的同步任务,比人工手动同步更高效,比定时同步更实时。

S220、对所述镜像同步任务中的远程触发入口进行配置,并在所述镜像同步任务中添加镜像同步脚本。

可选地,对所述镜像同步任务中的远程触发入口进行配置包括:在所述镜像同步任务中设置用于接收所述远程触发消息的统一资源定位符。进一步地,为保证代码以及操作环境安全,还可以在所述镜像同步任务中设置用于接收所述远程触发消息的远程触发令牌,用于进行身份验证。

示例性地,基于Token的身份验证方法可以是,用于输入验证信息的客户端使用用户名跟密码请求登录,服务端收到请求,去验证用户名与密码;验证成功后,服务端会签发一个Token,再把这个Token发送给客户端;客户端收到Token以后可以把它存储起来,比如放在储存在用户本地终端上的数据Cookie里或者本地存储Local Storage里,客户端每次向服务端请求资源的时候需要带着服务端签发的Token;服务端收到请求,然后去验证客户端请求里面带着的Token,如果验证成功,就向客户端返回请求的数据。

可选地,在Jenkins中配置Job_Project_A的远程触发入口,设置用于Jenkins构建任务远程触发的url为url_A,配置远程触发令牌为token_A,用于让Jenkins能够接收特定的远程触发消息,为实时同步更新代码提供入口,由于设置有远程触发令牌,即只有带有远程触发令牌的消息才能触发,能够拦截不必要的非法消息。

具体地,在镜像同步任务中添加镜像同步脚本,即可以在Jenkins中配置Job_Project_A的镜像同步任务中添加镜像同步脚本。可选地,镜像同步脚本的执行逻辑如下:先检查本地端是否有指定的与目标代码仓库对应的镜像代码仓库,如果没有则将目标代码仓库克隆一份到本地端;如果本地端有指定的镜像代码仓库,则根据目标代码仓库服务器中的代码更新本地端的镜像代码仓库中的代码;进而推送本地端的镜像代码仓库到内部镜像代码托管服务器中,以供用户使用。

S230、当检测到目标代码仓库中的代码发生变更时,通过预先建立好的镜像同步任务中的远程触发入口,接收基于事件处理接口web hook发送的远程触发消息。

S240、当接收到远程触发消息时,基于所述镜像同步任务中的镜像同步脚本,对所述目标代码仓库中的代码进行同步。

举例而言,本发明实施例的主要思路是利用基于分布式项目管理系统git服务的事件处理接口web hook机制,该机制能够监听基于git托管的目标代码仓库的一些事件,如提交、推送、打标签以及合并请求等等事件,在利用web hook监听到基于git托管的目标代码仓库的推送和打标签等事件之后,调用软件持续集成工具Jenkins提供的远程触发机制,在Jenkins上执行镜像同步脚本来实现高效实时的镜像同步代码。如图2B所示,具体实施步骤如下:

S211、创建Jenkins构建镜像同步任务。

S221、添加远程触发入口,设置远程触发令牌。

S222、在Jenkins将镜像同步任务中添加镜像同步脚本。

S223、在目标git代码仓库中设置web hook。

在B团队代码仓库Project_A中添加web hook,并监听推送和打标签等事件。配置好S221中设置好的统一资源定位符url_A和远程触发令牌token_A,用于发送远程触发消息。

示例性地,B团队Project_A维护人员在进行代码更新后的触发流程可描述如下:首先,由维护人员推送代码变更至Project_A仓库即目标代码仓库;设置于目标代码仓库Project_A仓库的web hook机制检测到S223中配置的目标触发事件,通过url_A和token_A给Jenkins发送同步请求;Jenkins收到同步请求,即认为接收到远程触发消息,则触发S222中配置的脚本任务获取团队B的目标代码仓库中的最新代码并同步到团队A的镜像代码仓库中。可见,整个过程无需两个团队进行任何沟通即可自动完成代码同步,保证团队A能够始终获取到团队B的最新代码,从而提高开发效率。

实施例三

图3是本发明实施例所提供的一种数据处理系统的结构示意图。如图3所示,本实施例可适用于两台及两台以上的服务器需要共享统一代码库中的代码的情况,该装置可以用于执行代码同步方法。具体地,本实施例的代码同步装置包括触发模块310和同步模块320。

其中,触发模块310,用于当监听到目标代码仓库中的代码发生变更时,通过预先建立好的镜像同步任务中的远程触发入口,接收基于事件处理接口web hook发送的远程触发消息;同步模块320,用于当接收到远程触发消息时,基于所述镜像同步任务中的镜像同步脚本,对所述目标代码仓库进行代码同步。

本实施例的技术方案,通过在检测到目标代码仓库中的代码发生变更时,通过远程触发入口接收到的远程触发消息,能够基于事件处理接口web hook机制在检测到目标代码仓库的代码发生变更时,自动发送远程触发消息,无需人工干预,进而,在检测到远程触发消息时,通过镜像中的同步任务实现代码同步,能够解决现有代码同步方法实时性较差等技术问题,高效且能实时进行镜像代码同步。

在上述技术方案的基础上,所述触发模块具体可用于:

检测到目标代码仓库的目标触发事件,其中,所述目标触发事件包括提交事件、推送事件、打标签事件和/或合并请求事件。

在上述各技术方案的基础上,所述同步模块可用于:

当检测到本地端不存在与所述目标代码仓库对应的镜像代码仓库时,将所述目标代码仓库镜像同步到所述本地端,生成与所述目标代码仓库对应的镜像代码仓库。

在上述各技术方案的基础上,所述同步模块还可用于:

当检测到本地端存在与所述目标代码仓库对应的镜像代码仓库时,根据所述目标代码仓库中的代码对所述镜像代码仓库中的代码进行镜像更新。

在上述各技术方案的基础上,代码同步装置还可以包括:

将所述本地端的所述镜像代码仓库推送到代码托管服务器中。

在上述各技术方案的基础上,代码同步装置还可以包括:

镜像同步任务构建单元,用于基于软件持续集成工具Jenkins构建镜像同步任务;

镜像同步任务配置单元,用于对所述镜像同步任务中的远程触发入口进行配置,并在所述镜像同步任务中添加镜像同步脚本。

在上述各技术方案的基础上,所述镜像同步任务配置单元具体可用于:

在所述镜像同步任务中设置用于所述远程触发消息的统一资源定位符以及远程触发令牌。

上述代码同步装置可执行本发明任一实施例所提供的代码同步方法,具备执行上述代码同步方法相应的功能模块和有益效果。未在本实施例中详尽描述的技术细节,可参见本发明任一实施例所提供的代码同步方法。

实施例四

图4为本发明实施例四所提供的一种终端的结构示意图。图4示出了适于用来实现本发明实施方式的示例性终端412的框图。图4显示的终端412仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。

如图4所示,终端412以通用计算设备的形式表现。终端412的组件可以包括但不限于:一个或者多个处理器或者处理器416,存储装置428,用于存储一个或多个程序,连接不同系统组件(包括存储装置428和处理器416)的总线418。当所述一个或多个程序被所述一个或多个处理器416执行,使得所述一个或多个处理器416实现本发明任意实施例所述的电视数据自动更新的方法。

总线418表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。

终端412典型地包括多种计算机系统可读介质。这些介质可以是任何能够被终端412访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。

存储装置428可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)430和/或高速缓存存储器432。终端412可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统434可以用于读写不可移动的、非易失性磁介质(图4未显示,通常称为“硬盘驱动器”)。尽管图4中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线418相连。存储器428可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。

具有一组(至少一个)程序模块442的程序/实用工具440,可以存储在例如存储器428中,这样的程序模块442包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块442通常执行本发明所描述的实施例中的功能和/或方法。

终端412也可以与一个或多个外部设备414(例如键盘、指向设备、显示器424等)通信,还可与一个或者多个使得用户能与该终端412交互的设备通信,和/或与使得该终端412能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口422进行。并且,终端412还可以通过网络适配器420与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器420通过总线418与终端412的其它模块通信。应当明白,尽管图中未示出,可以结合终端412使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理器、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。

处理器416通过运行存储在存储装置428中的程序,从而执行各种功能应用以及数据处理,例如实现本发明实施例所提供的代码同步方法。

另外,本发明实施例还提供了一种包含计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行一种代码同步方法,该方法包括:

当检测到目标代码仓库中的代码发生变更时,通过预先建立好的镜像同步任务中的远程触发入口,接收基于事件处理接口web hook发送的远程触发消息;

当接收到远程触发消息时,基于所述镜像同步任务中的镜像同步脚本,对所述目标代码仓库中的代码进行同步。

可选的,该计算机可执行指令在由计算机处理器执行时还可以用于执行本发明任意实施例所提供的代码同步方法的技术方案。

在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读存储介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读存储介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。

计算机可读存储介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读存储介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。

应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或他们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。

在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

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