CN115543277A - 代码集成验证方法及装置 - Google Patents

代码集成验证方法及装置 Download PDF

Info

Publication number
CN115543277A
CN115543277A CN202110743930.6A CN202110743930A CN115543277A CN 115543277 A CN115543277 A CN 115543277A CN 202110743930 A CN202110743930 A CN 202110743930A CN 115543277 A CN115543277 A CN 115543277A
Authority
CN
China
Prior art keywords
change
code
group
integration
merging
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202110743930.6A
Other languages
English (en)
Inventor
梁正斌
杨扬
曲建伟
薛明忠
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN202110743930.6A priority Critical patent/CN115543277A/zh
Priority to PCT/CN2021/135869 priority patent/WO2023273164A1/zh
Publication of CN115543277A publication Critical patent/CN115543277A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/65Updates
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)

Abstract

本发明实施例提供了一种代码集成验证方法及装置。该方法包括:将从代码托管系统接收的多个具有关联关系的用于代码变更的变更单组成变更单组;根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序;按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并;调用代码集成系统对所述变更单组合并后的代码进行集成验证。在本发明中,通过将相关联的多个变更单合并为一个变更单组,保证其原子性之后,再进行持续集成的验证,从而解决了当单个变更单的强行合入有依赖关系的多个变更单时,导致阶段性不可持续集成,造成阻塞性等待和浪费的问题,达到多个变更单同时进行变更验证的效果。

Description

代码集成验证方法及装置
技术领域
本发明实施例涉及软件工程技术领域,具体而言,涉及一种代码集成验证方法及装置。
背景技术
软件研发团队的成员经常需要集成他们的代码编写工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。一般流程为开发人员在本地完成开发,之后提交到代码管理系统,由代码管理系统和代码集成系统,完成代码的预集成检查,待检查通过后,再合入到对应的代码集成分支,完成本地开发代码的集成。
当前通用做法是,每个开发人员完成本地开发后,将代码提交到代码评审系统,并触发自动化的持续集成流水线进行自动化构建,如编译、发布和自动化测试等,来测试验证本次变更的代码。
随着代码规模增大,需要多人同时提交代码评审系统并触发构建时,每人的验证都只有自己的变更,而无法达到一起集成的目的。目前的通用做法是,每个变更各自验证,各自分别合入,如果有构建验证失败,则再修复,这样代码集成的持续性可能受影响,从而导致阶段性的版本不可用。即当前软件代码的变更的构建验证,仅是针对一个变更单的验证,缺少对软件的多个变更同时进行变更验证的方案。
发明内容
本发明实施例提供了一种代码集成验证方法及装置,以至少解决相关技术中多个变更单有依赖关系时,单个变更单的强行合入,如果集成有问题,将导致整个软件/子系统阶段性不可持续集成,从而对整个系统的再集成造成阻塞,出现阻塞性等待和浪费的问题。
根据本发明的一个实施例,提供了一种代码集成验证方法,包括:将从代码托管系统接收的多个具有关联关系的用于代码变更的变更单组成变更单组;根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序;按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并;调用代码集成系统对所述变更单组合并后的代码进行集成验证。
在一个示例性实施例中,所述变更单组为以下之一:单向变更单组、双向变更单组、前序变更单组。
在一个示例性实施例中,将从代码托管系统接收的多个具有关联关系的变更单组成变更单组包括:根据所述多个变更单的依赖信息标识查询获得具有关联关系的所述多个变更单;将所述多个变更单组成所述变更单组。
在一个示例性实施例中,将从代码托管系统接收的多个具有关联关系的变更单组成变更单组之前,还包括:通过所述代码托管系统接收用户提交的对所托管的代码进行变更的多个请求,并生成多个变更单以及对应的变更单信息,其中,所述变更单信息至少以下之一:单向依赖信息、变更单组组别信息、变更信息。
在一个示例性实施例中,根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序,包括:所述变更单组为单向变更单组,根据所述单向变更单组中各变更单的依赖顺序确定所述各变更单的代码合并顺序。
在一个示例性实施例中,按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并,包括:从所述代码托管系统下载所述变更单组内的各变更单对应的代码到本地;按照所述代码合并顺序,将各个变更单的代码变更与从所述代码托管系统下载的该变更单对应的代码进行合并,并打上所述变更单组的标签信息。
在一个示例性实施例中,调用代码集成系统对所述变更单组合并后的代码进行集成验证,包括:将所述变更单组的标签信息传递到所述代码集成系统,以便所述代码集成系统根据所述变更单组的标签信息下载对应的代码,并进行集成验证。
在一个示例性实施例中,调用代码集成系统对所述变更单组合并后的代码进行集成验证之后,还包括:接收所述代码集成系统反馈的所述变更单组的代码集成的验证结果;如果所述验证结果为代码集成成功,则对所述变更单组内的所有变更单反馈代码变更可集成,并完成所述变更单组的代码集成;如果所述验证结果为代码集成不成功,则对所述变更单组内的所有变更单反馈代码变更不可集成。
在一个示例性实施例中,当所述变更单组存在前序变更单组时,所述方法还可包括:将正在进行验证的前序变更单组与所述变更单组合并为第一变更单组;对于第一变更单组组内有依赖关系的变更单,按照依赖关系确定合并顺序,对于无依赖关系的变更单,根据提交顺序确定合并顺序;按照所述代码合并顺序对所述第一变更单组内的各变更单进行代码合并;调用代码集成系统对所述第一变更单组合并后的代码进行集成验证。
根据本发明的另一个实施例,提供了一种代码集成验证装置,包括:组成模块,用于将从代码托管系统接收的具有关联关系的多个用于代码变更的变更单组成变更单组;确定模块,用于根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序;合并模块,用于按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并;调用模块,用于调用代码集成系统对所述变更单组合并后的代码进行集成验证。
在一个示例性实施例中,所述组成模块包括:查询单元,用于根据所述多个变更单的依赖信息标识查询获得具有关联关系的所述多个变更单;组成单元,用于将所述多个变更单组成所述变更单组。
在一个示例性实施例中,所述合并模块包括:下载单元,用于从所述代码托管系统下载所述变更单组内的各变更单对应的代码到本地;合并单元,用于按照所述代码合并顺序,将各个变更单的代码变更与从所述代码托管系统下载的该变更单对应的代码进行合并,并打上所述变更单组的标签信息。
在一个示例性实施例中,所述代码集成模块还包括:接收模块,用于接收所述代码集成系统反馈的所述变更单组的代码集成的验证结果;第一反馈模块,用于在所述验证结果为代码集成成功的情况下,对所述变更单组内的所有变更单反馈代码变更可集成,并完成所述变更单组的代码集成;第二反馈模块,用于在所述验证结果为代码集成不成功,对所述变更单组内的所有变更单反馈代码变更不可集成。
根据本发明的又一个实施例,还提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
根据本发明的又一个实施例,还提供了一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行上述任一项方法实施例中的步骤。
通过本发明上述实施例,可将有关联的多个变更单合并为一个变更单组,保证其原子性,之后再进行持续集成的验证。从而解决了当单个变更单的强行合入有依赖关系的多个变更单有时,导致阶段性不可持续集成,造成阻塞性等待和浪费的问题,达到多个变更单同时进行变更验证的效果。
附图说明
图1是根据本发明实施例的计算机终端的硬件结构框图;
图2是根据本发明实施例的代码集成验证方法的流程图;
图3是根据本发明实施例的代码集成验证装置的流程图;
图4是根据本发明另一实施例的代码集成验证装置的流程图;
图5是根据本发明实施例的一种代码门控系统示意图;
图6是根据本发明实施例的多个变更单同时进行构建验证的流程图;
图7是根据本发明实施例的单个代码仓库的多变更单的代码集成验证流程图;
图8是根据本发明实施例的多个代码仓库的多变更单的代码集成验证流程图;
图9是根据本发明实施例的动态调整变更单数的代码集成验证流程图;
图10是根据本发明实施例的存在前序变更单或前序变更单组的代码集成验证流程图。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明的实施例。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。
本申请实施例中所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图1是本发明实施例的一种代码集成验证方法的计算机终端的硬件结构框图。如图1所示,计算机终端可以包括一个或多个(图1中仅示出一个)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)和用于存储数据的存储器104,其中,上述计算机终端还可以包括用于通信功能的传输设备106以及输入输出设备108。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述计算机终端的结构造成限定。例如,计算机终端还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
存储器104可用于存储计算机程序,例如,应用软件的软件程序以及模块,如本发明实施例中的代码集成验证方法对应的计算机程序,处理器102通过运行存储在存储器104内的计算机程序,从而执行各种功能应用以及数据处理,即实现上述的方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,简称为NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,简称为RF)模块,其用于通过无线方式与互联网进行通讯。
下面对本发明实施例中涉及到如下软件持续集成术语进行简要说明。
变更单:软件开发人员将本地的代码更改,提交到代码托管系统,由代码托管系统生成变更记录,即变更单,例如但不限于Gerrit的change。
变更单信息:变更单信息包含但不限于:单向依赖信息、变更组组别信息(哈希码、组大小等)、变更信息(代码工程名、分支)等。
例如,如下的一种单向变更单组别信息格式,但不局限于此格式:
comment:this is a comment
depends:other-change-id
change-id:my-change-id
例如,如下的一种双向变更单组别信息及变更信息格式,但不局限于此格式:
comment:this is a comment
goup-id:my-group-change-id
goup-size:2
change-id:my-change-id
单向变更单:通过单向变更单信息格式关联的一个变更单。其特征为:本变更单指明依赖其他变更单,其他变更单不依赖本变更单。所谓不依赖其他变更单,即在缺少其他变更单时,不会导致代码集成失败。
单向变更单组:多个相关的单向变更单,称之为单向变更单组。
双向变更单:通过双向变更单信息格式关联的一系列变更单。其特征为:多个变更单中的一单或多单,在缺少其他变更单时,可能导致代码集成失败。
双向变更单组:多个相关的双向变更单,称之为双向变更单组
前序变更单:在有一个或多个变更单未完成时,那么未完成的变更,就称之为前序变更单。
前序变更单组:在有一个或多个变更单组未完成时,有新变更单组满足合并条件,那么未完成的变更组,就称之为前序变更单组。
在本实施例中提供了一种代码集成验证方法。在单个变更单强行合入多个有依赖关系的多个变更单时,通过一种本地预合并的方法,将多个有关联的多个变更单合并为一个变更单组,保证其原子性,再进行持续集成验证,根据验证结果对同组的变更单同时集成或同时不集成。以此保证产品的持续集成可用,从而提高软件开发验证效率。
图2是根据本发明实施例的代码集成验证方法的流程图,该方法可运用在图1所示的硬件结构中。如图2所示,该流程包括如下步骤:
步骤S202,将从代码托管系统接收的多个具有关联关系的用于代码变更的变更单组成变更单组;
步骤S204,根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序;
步骤S206,按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并;
步骤S208,调用代码集成系统对所述变更单组合并后的代码进行集成验证。
在本实施例的中,所述变更单组可以为以下之一:单向变更单组、双向变更单组、前序变更单组。
在本实施例的步骤S202中,将从代码托管系统接收的多个具有关联关系的变更单组成变更单组,可以包括:根据所述多个变更单的依赖信息标识查询获得具有关联关系的所述多个变更单;将所述多个变更单组成所述变更单组。
在本实施例的步骤S202之前,还可以包括:通过所述代码托管系统接收用户提交的对所托管的代码进行变更的多个请求,并生成多个变更单以及对应的变更单信息,其中,所述变更单信息至少以下之一:单向依赖信息、变更单组组别信息、变更信息。
在本实施例的步骤S204中,根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序,可以包括:所述变更单组为单向变更单组,根据所述单向变更单组中各变更单的依赖顺序确定所述各变更单的代码合并顺序。
在本实施例的步骤S206中,按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并,可以包括:从所述代码托管系统下载所述变更单组内的各变更单对应的代码到本地,例如下载到本地的存储器或服务器;按照所述代码合并顺序,将各个变更单的代码变更与从所述代码托管系统下载的该变更单对应的代码进行合并,并打上所述变更单组的标签信息。
在本实施例的步骤S208中,调用代码集成系统对所述变更单组合并后的代码进行集成验证,可以包括:将所述变更单组的标签信息传递到所述代码集成系统,以便所述代码集成系统根据所述变更单组的标签信息下载对应的代码,并进行集成验证。
在本实施例的步骤S208之后,还可以包括:接收所述代码集成系统反馈的所述变更单组的代码集成的验证结果;如果所述验证结果为代码集成成功,则对所述变更单组内的所有变更单反馈代码变更可集成,并完成所述变更单组的代码集成;如果所述验证结果为代码集成不成功,则对所述变更单组内的所有变更单反馈代码变更不可集成。
在本实施例中,当所述变更单组包含前序变更单组时,所述方法还可包括:将正在进行验证的多个前序变更单组,与所述变更单组,合并为第一变更单组;根据所述多个前序变更单组之间的依赖关系(无依赖时,按照变更单提交时间顺序)确定所述第一变更单组内各前序变更单组的代码合并顺序;按照所述代码合并顺序对所述第一变更单组内的各前序变更单组分别进行代码合并;调用代码集成系统对所述第一变更单组合并后的代码进行集成验证。即,在实施例中,当所述变更单组存在前序变更单组时,可进一步将具有关联关系的多个前序变更单组合并为一个大的变更单组,从而以该合并后的大的变更单组为单位进行代码的验证和集成。
通过本实施例的上述步骤,将有关联的多个变更单合并为一个变更单组,保证其原子性,解决了软件代码变更的构建验证仅支持单变更验证以及在单个变更单强行合入多个有依赖关系的多个变更单时,造成的阻塞性等待和浪费,提高了软件开发验证效率。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
在本实施例中还提供了一种代码集成验证装置,该装置用于实现上述实施例及优选实施方式,已经进行过说明的不再赘述。如以下所使用的,术语“模块”或“单元”可以实现预定功能的软件和/或硬件的组合。尽管以下实施例所描述的装置较佳地以软件来实现,但是硬件,或者软件和硬件的组合的实现也是可能并被构想的。
图3是根据本发明实施例的代码集成验证装置的结构框图,如图3所示,该装置包括组成模块10、确定模块20、合并模块30和调用模块40
组成模块10,用于将从代码托管系统接收的具有关联关系的多个用于代码变更的变更单组成变更单组。
确定模块20,用于根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序。
合并模块30,用于按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并。
调用模块40,用于调用代码集成系统对所述变更单组合并后的代码进行集成验证。
通过本实施例提供的代码集成验证装置,可将相关联的多个变更单合并为一个变更单组,保证其原子性,解决了软件代码变更的构建验证仅支持单变更验证以及在单个变更单强行合入多个有依赖关系的多个变更单时,造成的阻塞性等待和浪费,提高了软件开发验证效率。
图4是根据本发明另一实施例的代码集成验证装置的结构框图,如图4所示,该装置除包括上述实施例中的所有模块外,在本实施例中,所述组成模块10可进一步包括查询单元11和组成单元12。
查询单元11,用于根据所述多个变更单的依赖信息标识查询获得具有关联关系的所述多个变更单。
组成单元12,用于将所述多个变更单组成所述变更单组。
在本实施例中,所述合并模块20可进一步包括下载单元21和合并单元22。
下载单元21,用于从所述代码托管系统下载所述变更单组内的各变更单对应的代码到本地,例如,下载到代码集成验证装置的存储器或服务器内。
合并单元22,用于按照所述代码合并顺序,将各个变更单的代码变更与从所述代码托管系统下载的该变更单对应的代码进行合并,并打上所述变更单组的标签信息。
在本实施例中,所述代码集成验证装置还可包括接收模块50、第一反馈模块60和第二反馈模块70。
接收模块50,用于接收所述代码集成系统反馈的所述变更单组的代码集成的验证结果。
第一反馈模块60,用于在所述验证结果为代码集成成功的情况下,对所述变更单组内的所有变更单反馈代码变更可集成,并完成所述变更单组的代码集成。
第二反馈模块70,用于在所述验证结果为代码集成不成功,对所述变更单组内的所有变更单反馈代码变更不可集成。
需要说明的是,上述各个模块是可以通过软件或硬件来实现的,对于后者,可以通过以下方式实现,但不限于此:上述模块均位于同一处理器中;或者,上述各个模块以任意组合的形式分别位于不同的处理器中。
为了便于对本发明所提供的技术方案的理解,下面将结合具体场景的实施例进行详细描述。
针对软件开发中,当存在多个变更单,尤其是多个变更单有依赖关系的场景,本实施例提供了一种代码门控系统。如图5所示,本实施例涉及的系统和模块如下:
代码托管系统:用于代码托管和评审的系统,在本实施例中代码托管系统可包含但不限于:Gerrit、Gitlab等,代码托管系统用于托管用户的代码,接收用户的代码变更,并产生变更单。
本实施例提供的代码门控系统200,需说明的是,本实施例中的模块功能的划分与前文中实施例中的模块划分不相同。如图5所示,本实施例中的代码门控系统200可包含调度模块201、合并模块202和执行模块203。
调度模块201:接收上游代码托管系统100的变更信息并存储,当有多个变更单时,组合多个变更单为一个变更单组,下发给合并模块。
合并模块202:接收调度模块201的变更单组请求,以变更单组为单位,向代码托管系统100逐个拉取变更单代码及变更信息,并进行本地合并。
执行模块203:接收调度模块201的执行请求,将合并后的变更单组信息,传递到持续集成系统300。
持续集成系统300:能够获取变更单,并基于变更单进行构建验证的系统,在本实施例中持续集成系统300可包含但不限于:Jenkins、GoCD等。
基于上述的系统,本实施例提供了一种代码集成验证方法,在本实施例中,用户在代码托管系统提交多个变更,并将多个变更单的关联信息,录入到多个变更单信息中。
如图6所示,该方法包括如下步骤:
步骤S601,提交变更。通过代码托管系统,接收一个用户的多个变更,或多个用户的多个变更,并产生多个变更单。
步骤S602,缓存变更。调度模块实时地从代码托管系统接收到变更单,调度模块向代码托管系统,查询被依赖单的信息,具体处理方式如下:
a.对于单向变更单
单向变更单的依赖信息标识:例如,变更信息中的依赖(depends)标识,但不限于该标识,通过此标识依赖的多个变更单,称之为单向变更单组。
获得依赖变更单信息:根据变更单标识的被依赖变更单标识,通过查询缓存的变更单信息获得,例如,可通过代码托管系统查询得到,或查询其他变更单缓存,获得依赖信息。
获得单向变更单组:将查询到的相关单向变更单组建为单向变更单组。
完成变更单组收集:在调度模块收到每一个变更提交事件后,按照上述方法,查询到所有依赖变更单信息。
b.对于双向变更单
根据组标识和组大小,调度模块向代码托管系统收集变更单组的所有变更单信息。
双向变更单的标识方式:可以但不限于通过组标识、组大小等信息进行标识。
获得双向变更单信息:根据变更单标识的被依赖变更单标识,通过查询缓存的变更单信息获得,例如,可通过代码托管系统查询得到,或查询其他变更单缓存,获得依赖信息。
获得双向变更单组:将查询到相关双向变更单组建为双向变更单组。
完成双向变更单组收集:在调度模块收到每一个变更提交事件后,按照上述方法,查询到所有依赖变更单信息,其中,该双向变更单组中的双向变更单组的个数可从变更单信息的组打下的描述中获得。
步骤S603,确定变更单预合并顺序。
在本实施例中,需先确定变更单组内顺序。调度模块在完成变更单组信息收集后,进入变更单顺序确定环节:
a.对于单向变更单组,按照依赖(depends)顺序,确定单向变更单组内各单向变更单预合并顺序。
b.对于双向变更单组,无顺序要求,只要双向变更单组的所有变更单,已提交到代码托管系统即可。
在本实施例中,然后再提交变更组合并请求。即,将完整的变更单组提交到合并模块。
步骤S604,合并变更单组。
在本实施例中,合并模块收到变更单组合并请求后,执行以下操作:
下载变更单代码:
可根据变更单组信息和顺序,向代码托管系统下载变更单代码到本地,例如,将变更单代码下载到代码门控系统200的存储器或服务器内。
合并变更组代码:
可通过本地提供的分布式代码管理系统合并变更组代码,可以是但不局限于git。
遍历变更单组的每一个变更单:
首次合并的代码库:将每个变更单的代码变更与该变更单的代码托管系统中的最新代码进行合并,并打代码标签,代码标签可以但不局限于:
refs/service/.../denpends-id
refs/service/.../groups-id。
在本实施例中,如果变更单之间有冲突,报告错误到调度模块,转入处理流程。步骤S605,调度变更单组。调度模块收到变更单组标签信息后,通知执行模块,调度变更组的代码集成,具体执行以下操作:
传递变更单组标签:执行模块收到变更单组标签信息后,调用代码集成系统,进行集成验证,同时将变更单组标签信息传递到代码集成系统;代码集成系统根据代码标签下载对应的代码,进行集成验证。
收集变更单组代码集成结果:代码集成系统完成集成验证后,执行模块获得验证结果,传递到调度模块。
步骤S606,变更单组集成。调度模块收到代码集成结果后,做如下处理:
对于代码集成成功的代码变更组:对变更单组内的所有变更单,反馈此代码变更可集成,并完成代码自动集成。反馈方式可以是但不局限于:打对应的代码集成结果评分、自动合入变更单等方式。
对于代码集成失败的代码变更组:对变更单组内的所有变更单,反馈此代码变更不可集成。反馈方式可以是但不局限于:打对应的代码集成结果评分。
下面将结合具体场景对本发明所提供的技术方案进行说明。
本发明实施例提供了针对单个代码仓库的多变更单场景的代码集成验证方法,如图7所示,本实施包括如下步骤:
步骤S701,提交并更。在本实施例中,单个人或多个人提交的多个代码变更都是针对同一个代码仓库,变更单之间通过变更单信息,标识为单向变更单组。其余流程同上述图6所示的实施例。
步骤S702,缓存变更,将所提交的多个变更组成单向变更单组。具体流程同上述所示的实施例。
步骤S703,确定所述单向变更单组的预合并顺序。具体流程同上述所示的实施例。
步骤S704,合并所述单向变更单组。如果变更单之间有冲突,报告错误到调度模块,转入处理流程。其余流程同上述所示的实施例。
步骤S705,调度所述单向变更单组。具体流程同上述所示的实施例。
步骤S706,将所述单向变更单组集成。具体流程同上述所示的实施例。
本发明实施例还提供了针对多个代码仓库的多变更单场景的代码集成验证方法,如图8所示,本实施包括如下步骤:
步骤S801,提交并更。在本实施例中,单个人或多个人提交的多个代码变更都是针对相同的多个代码仓库,变更单之间通过变更单信息,标识为双向变更单组。其余流程同图6所示的实施例。
步骤S802,缓存变更单,组成双向变更单组。具体流程同上述所示的实施例。
步骤S803,确定变更单组预合并顺序。具体流程同上述所示的实施例。
步骤S804,合并变更单组。如果变更单之间有冲突,报告错误到调度模块,转入错误处理流程。其余流程同上述所示的实施例。
步骤S805,调度变更单组。具体流程同上述所示的实施例。
步骤S806,将变更单组集成。具体流程同上述所示的实施例。
本发明实施例还提供了一种针对动态调整变更单数的多个代码仓库的多变更单场景的代码集成验证方法,如图9所示,本实施包括如下步骤:
步骤S901,提交并更。在本实施例中,单个人或多个人提交的多个代码变更都是针对同多个代码仓库,变更单之间通过变更单信息,标识为双向变更单组。当有新的变更单,需要加入到双向变更组中时,只需要在变更单信息中的标识组大小的信息做指示即可,调度模块在收到变更单信息时,取所有变更单信息中组大小最大的值作为本变更单组的大小。其余流程同图6所示的实施例。
步骤S902,缓存变更。具体流程同上述所示的实施例。
步骤S903,确定变更单组预合并顺序。具体流程同上述所示的实施例。
步骤S904,合并变更单组。如果变更单之间有冲突,报告错误到调度模块,转入错误处理流程。其余流程同上述所示的实施例。
步骤S905,调度变更单组。具体流程同上述所示的实施例。
步骤S906,变更单组集成。具体流程同上述所示的实施例。
本发明实施例还提供了一种针对多个代码仓库的多变更单场景的代码集成验证方法,即针对多变更单组并行场景,如图10所示,本实施包括如下步骤:
步骤S1001,提交并更。在本实施例中,在一个变更单组已完成代码预合并,未完成集成验证时,调度收到新的变更单组,即存在前序变更单或前序变更单组时。其余流程同上述所示的实施例。
步骤S1002,缓存变更。调度模块查询到有未完成集成验证的变更单组时,将未完成的一个或多个变更单组的代码标签或变更单信息,传递到新变更单组,即存在前序变更单组或前序变更单时,其余流程同上述所示的实施例。
步骤S1003,确定变更单组预合并顺序。在本实施例中,当新变更单组,存在前序变更单组或前序变更单时,将前序变更单组作为新变更单的预合并顺序的首位,其余流程同图6所示的实施例。
步骤S1004,合并变更单组。如果变更单之间有冲突,报告错误到调度模块,转入错误处理流程。其余流程同上述所示的实施例。
步骤S1005,调度变更单组。具体流程同上述所示的实施例。
步骤S1006,变更单组集成。具体流程同上述所示的实施例。
本发明的实施例还提供了一种计算机可读存储介质,该计算机可读存储介质中存储有计算机程序,其中,该计算机程序被设置为运行时执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述计算机可读存储介质可以包括但不限于:U盘、只读存储器(Read-Only Memory,简称为ROM)、随机存取存储器(Random Access Memory,简称为RAM)、移动硬盘、磁碟或者光盘等各种可以存储计算机程序的介质。
本发明的实施例还提供了一种电子装置,包括存储器和处理器,该存储器中存储有计算机程序,该处理器被设置为运行计算机程序以执行上述任一项方法实施例中的步骤。
在一个示例性实施例中,上述电子装置还可以包括传输设备以及输入输出设备,其中,该传输设备和上述处理器连接,该输入输出设备和上述处理器连接。
本实施例中的具体示例可以参考上述实施例及示例性实施方式中所描述的示例,本实施例在此不再赘述。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (15)

1.一种代码集成验证方法,其特征在于,包括:
将从代码托管系统接收的多个具有关联关系的用于代码变更的变更单组成变更单组;
根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序;
按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并;
调用代码集成系统对所述变更单组合并后的代码进行集成验证。
2.根据权利要求1所述的方法,其特征在于,其中,所述变更单组为以下之一:单向变更单组、双向变更单组、前序变更单组。
3.根据权利要求1所述的方法,其特征在于,将从代码托管系统接收的多个具有关联关系的变更单组成变更单组包括:
根据所述多个变更单的依赖信息标识查询获得具有关联关系的所述多个变更单;
将所述多个变更单组成所述变更单组。
4.根据权利要求1所述的方法,其特征在于,将从代码托管系统接收的多个具有关联关系的变更单组成变更单组之前,还包括:
通过所述代码托管系统接收用户提交的对所托管的代码进行变更的多个请求,并生成多个变更单以及对应的变更单信息,其中,所述变更单信息至少以下之一:单向依赖信息、变更单组组别信息、变更信息。
5.根据权利要求2所述的方法,其特征在于,根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序,包括:
所述变更单组为单向变更单组,根据所述单向变更单组中各变更单的依赖顺序确定所述各变更单的代码合并顺序。
6.根据权利要求1所述的方法,其特征在于,按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并,包括:
从所述代码托管系统下载所述变更单组内的各变更单对应的代码到本地;
按照所述代码合并顺序,将各个变更单的代码变更与从所述代码托管系统下载的该变更单对应的代码进行合并,并打上所述变更单组的标签信息。
7.根据权利要求6所述的方法,其特征在于,调用代码集成系统对所述变更单组合并后的代码进行集成验证,包括:
将所述变更单组的标签信息传递到所述代码集成系统,以便所述代码集成系统根据所述变更单组的标签信息下载对应的代码,并进行集成验证。
8.根据权利要求7所述的方法,其特征在于,调用代码集成系统对所述变更单组合并后的代码进行集成验证之后,还包括:
接收所述代码集成系统反馈的所述变更单组的代码集成的验证结果;
如果所述验证结果为代码集成成功,则对所述变更单组内的所有变更单反馈代码变更可集成,并完成所述变更单组的代码集成;
如果所述验证结果为代码集成不成功,则对所述变更单组内的所有变更单反馈代码变更不可集成。
9.根据权利要求2所述的方法,其特征在于,当所述变更单组存在未完成集成验证的前序变更单和/或前序变更单组时,所述方法还包括:
将所述前序变更单和/或所述前序变更单组与所述变更单组组合为第一变更单组;
对于所述第一变更单组组内,有依赖关系的变更单,按照依赖关系确定合并顺序,对于无依赖关系的变更单,根据提交顺序确定合并顺序;
按照所述合并顺序对所述第一变更单组内的各变更单进行代码合并;
调用代码集成系统对所述第一变更单组合并后的代码进行集成验证。
10.一种代码集成验证装置,其特征在于,包括:
组成模块,用于将从代码托管系统接收的具有关联关系的多个用于代码变更的变更单组成变更单组;
确定模块,用于根据所述多个变更单之间的依赖关系确定所述变更单组内各变更单的代码合并顺序;
合并模块,用于按照所述代码合并顺序对所述变更单组内的各变更单分别进行代码合并;
调用模块,用于调用代码集成系统对所述变更单组合并后的代码进行集成验证。
11.根据权利要求10所述的装置,其特征在于,所述组成模块包括:
查询单元,用于根据所述多个变更单的依赖信息标识查询获得具有关联关系的所述多个变更单;
组成单元,用于将所述多个变更单组成所述变更单组。
12.根据权利要求10所述的装置,其特征在于,所述合并模块包括:
下载单元,用于从所述代码托管系统下载所述变更单组内的各变更单对应的代码到本地;
合并单元,用于按照所述代码合并顺序,将各个变更单的代码变更与从所述代码托管系统下载的该变更单对应的代码进行合并,并打上所述变更单组的标签信息。
13.根据权利要求10所述的装置,其特征在于,还包括:
接收模块,用于接收所述代码集成系统反馈的所述变更单组的代码集成的验证结果;
第一反馈模块,用于在所述验证结果为代码集成成功的情况下,对所述变更单组内的所有变更单反馈代码变更可集成,并完成所述变更单组的代码集成;
第二反馈模块,用于在所述验证结果为代码集成不成功,对所述变更单组内的所有变更单反馈代码变更不可集成。
14.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,其中,所述计算机程序被处理器执行时实现所述权利要求1至9任一项中所述的方法的步骤。
15.一种电子装置,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现所述权利要求1至9任一项中所述的方法的步骤。
CN202110743930.6A 2021-06-30 2021-06-30 代码集成验证方法及装置 Pending CN115543277A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202110743930.6A CN115543277A (zh) 2021-06-30 2021-06-30 代码集成验证方法及装置
PCT/CN2021/135869 WO2023273164A1 (zh) 2021-06-30 2021-12-06 代码集成验证方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110743930.6A CN115543277A (zh) 2021-06-30 2021-06-30 代码集成验证方法及装置

Publications (1)

Publication Number Publication Date
CN115543277A true CN115543277A (zh) 2022-12-30

Family

ID=84691022

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110743930.6A Pending CN115543277A (zh) 2021-06-30 2021-06-30 代码集成验证方法及装置

Country Status (2)

Country Link
CN (1) CN115543277A (zh)
WO (1) WO2023273164A1 (zh)

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2517717A (en) * 2013-08-29 2015-03-04 Ibm Testing of combined code changesets in a software product
US10146673B2 (en) * 2015-11-04 2018-12-04 Sap Portals Israel Ltd. Source code change resolver
CN106843820B (zh) * 2015-12-04 2020-08-04 阿里巴巴集团控股有限公司 代码处理方法和装置
CN108073501B (zh) * 2016-11-14 2021-08-13 阿里巴巴集团控股有限公司 一种代码冲突检测方法及设备
CN107085555A (zh) * 2017-04-19 2017-08-22 广州视源电子科技股份有限公司 代码测试方法、装置、终端及存储介质
CN110780897B (zh) * 2019-08-26 2022-05-10 华为云计算技术有限公司 一种代码变更方法以及装置

Also Published As

Publication number Publication date
WO2023273164A1 (zh) 2023-01-05

Similar Documents

Publication Publication Date Title
CN109460841B (zh) 用户开户方法、系统及存储介质
CN110955432B (zh) 持续集成的发布方法、装置及系统
CN110363663B (zh) 基于区块链的数据批量处理方法、装置、设备及存储介质
CN111008206A (zh) 跨链交易的状态数据的存储方法、装置及存储介质
CN112486640A (zh) 业务处理方法、装置、电子设备及计算机可读存储介质
CN111367531B (zh) 代码处理方法及装置
US8863133B2 (en) License management in a cluster environment
CN110874492B (zh) 数据处理方法、装置、计算设备及系统
CN115543277A (zh) 代码集成验证方法及装置
CN116954754A (zh) 一种业务流程编排方法、装置、设备及可读存储介质
CN112825525A (zh) 用于处理事务的方法和装置
CN104735134B (zh) 一种用于提供计算服务的方法和装置
CN111027977A (zh) 一种数据验证的方法、装置及电子设备
CN115082038A (zh) 系统集成方法、装置及电子设备
CN109901933B (zh) 业务系统的操作方法及装置、存储介质、电子装置
CN112783613B (zh) 一种单元调度的方法和装置
CN110033145B (zh) 财务共享作业分单方法及装置、设备和存储介质
CN113064814A (zh) 组件引用数据的处理方法及装置、存储介质及电子装置
CN115460077B (zh) 配置信息的更新方法、装置、存储介质及电子装置
CN117710068B (zh) 基于人工智能的临时供应商核验方法、装置及设备
CN115361390B (zh) 用于加入区块链网络的方法、计算机存储介质及电子设备
CN110837536B (zh) 一种信息处理方法、装置和存储介质
CN117520196A (zh) 基于流程引擎的流程配置文件的校验方法、装置及系统
CN108614871B (zh) 数据查询与结果生成方法、装置、设备及存储介质
CN115481182A (zh) 一种数据融合处理方法、系统、存储介质及电子设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination