一种支持模拟预合入流水线的Git代码评审系统及其方法技术方案

技术编号:26064835 阅读:31 留言:0更新日期:2020-10-28 16:37
本发明专利技术提供了一种支持模拟预合入流水线的Git代码评审系统,包括代码系统、流水线系统和消息中间件;所述代码系统包括用户交互模块、与用户交互模块连接的代码操作模块、与代码操作模块连接的代码存储模块、以及分别与用户交互模块和代码操作模块连接的代码评审模块;所述代码存储模块与消息中间件连接;所述流水线系统包括流水线配置编排模块、与流水线配置编排模块连接的流水线调度执行模块、以及与流水线调度执行模块连接的构建记录存储模块;所述消息中间件与流水线调度执行模块连接;本发明专利技术能够前置代码问题发现的时间,极大的提升了代码评审效率,有效的提高了代码质量,并且能够覆盖目前同一Git代码库内进行代码评审的所有评审模型。

【技术实现步骤摘要】
一种支持模拟预合入流水线的Git代码评审系统及其方法
本专利技术涉及一种代码评审系统,具体是一种支持模拟预合入流水线的Git代码评审系统及其方法。
技术介绍
在现代软件工程的实践中,代码评审已经被广泛采用,Git也在当前代码系统中得到普遍使用。目前,业界已经存在一些基于Git的专业代码评审工具,例如谷歌公司的ChangeRequest代码评审模型;Gitlab公司的MergeRequest代码评审模型;国内的DirectCodeReview代码评审模型(专利申请号201911299362.4)。上述三种评审模型按照是否使用匿名分支可以分为两类:1、不适用匿名分支,使用实体分支作为源分支,向目标分支发起合入的代码评审,例如Gitlab的MergeRequest代码评审模型;2、使用匿名分支,将要合入目标分支的代码存储在一个匿名分支上,发起从匿名分支向目标分支合入的代码评审,例如谷歌公司的ChangeRequest代码评审模型,国内的DirectCodeReview代码评审模型。在进行代码评审的过程中,工具平台通常会提供代码扫描、持续集成流水线执行状态等相关信息辅助进行代码评审,提升代码的质量和代码评审效率。代码评审从理论上来说至少需要如下两种类型的流水线:一、保障即将被合入到目标分支上的代码质量的流水线:如果即将被合入到目标分支上的代码流水线构建失败,大概率的说明这些代码本身有问题,评审应当予以打回。二、保障代码合入到目标分支之后的代码质量的流水线:如果评审代码合入到目标分支后流水线的构建失败,说明合并后的代码有问题,应该进行快速修复或者进行代码回滚。以上是目前业界比较先进的代码评审系统提供的流水线功能,但是,对于流水线类型二,如果评审代码合入到目标分支后流水线的构建失败,说明合并后的代码有问题,这个时候发现代码问题的时间比较滞后。如果能在代码评审阶段就能够提前知晓合并后的代码质量问题,前置代码问题发现的时间,对于提升代码评审效率,提高代码质量都会有很大收益。
技术实现思路
本专利技术的目的在于提供一种支持模拟预合入流水线的Git代码评审系统及其方法,以解决上述
技术介绍
中提出的问题。为实现上述目的,本专利技术提供如下技术方案:一种支持模拟预合入流水线的Git代码评审系统,包括代码系统、流水线系统和消息中间件;所述代码系统包括用户交互模块、与用户交互模块连接的代码操作模块、与代码操作模块连接的代码存储模块、以及分别与用户交互模块和代码操作模块连接的代码评审模块;所述代码存储模块与消息中间件连接;所述流水线系统包括流水线配置编排模块、与流水线配置编排模块连接的流水线调度执行模块、以及与流水线调度执行模块连接的构建记录存储模块;所述消息中间件与流水线调度执行模块连接,所述构建记录存储模块与代码评审模块连接。一种支持模拟预合入流水线的Git代码评审方法,包括如下步骤:步骤一、流水线配置场景;用户通过流水线系统中的流水线配置编排模块,为代码系统合入需要经过代码评审的分支配置流水线,并且该流水线的触发条件为评审模拟预合入;步骤二、发起MergeRequest代码评审场景,包括以下步骤:步骤201、用户通过代码系统中的用户交互模块,创建从源分支A到目标分支B的MergeRequest代码评审,此时分支A的最新Commit记为CommitA,分支B的最新Commit记为CommitB;步骤202、代码评审模块在完成MergeRequest的创建之后,向代码操作模块发送指令,要求代码操作模块在代码存储模块中创建CommitA和CommitB的一个临时合并提交,记为CommitC;步骤203、代码操作模块向代码存储模块发送指令,并要求代码存储模块进行CommitC的创建,如果CommitA和CommitB发生代码冲突,无法生成CommitC,则流程结束;步骤204、如果CommitA和CommitB没有代码冲突,代码存储模块创建CommitC成功后,向消息中间件发送评审模拟预合入事件消息;其中,消息体中的分支信息伪造为代码评审的目标分支B,并将Commit信息伪造为临时CommitC,事件类型设置为模拟预合入;步骤205、流水线系统中的流水线调度执行模块获取消息中间件传送的消息,获得步骤204中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B,事件类型为模拟预合入,Commit为CommitC;步骤206、流水线调度执行模块通过流水线配置编排模块查找用户在步骤一中为分支B配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;步骤207、构建记录存储模块将分支B的模拟预合入流水线执行状态信息根据评审单号,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;步骤三、更新MergeRequest代码评审源分支场景,包括以下步骤:步骤301、基于步骤二,用户创建从源分支A到目标分支B的MergeRequest代码评审记为MR1,此时分支A的最新Commit记为CommitA,分支B的最新Commit记为CommitB,由于特殊原因导致代码评审被驳回,用户通过命令行向分支A提交更新后的代码记为CommitA2;步骤302、用户交互模块将步骤301中用户代码提交命令转发至代码操作模块;步骤303、代码操作模块向代码评审模块发送查询请求,查询分支A是否含有正在评审进行中的MR1;如果没有,代码操作模块将CommitA2提交至代码存储模块中,流程结束;如果有,则通过代码评审模块获取分支A正在进行中的MR1集合,并记为list1;步骤304、代码操作模块向代码存储模块发送指令,将分支A的CommitA2提交至代码存储模块;步骤305、对list1中的所有MR1进行步骤306至步骤3010的循环操作;步骤306、代码操作模块向代码存储模块发送指令,在代码存储模块中创建CommitA2和CommitB的一个临时合并提交,记为CommitC;如果CommitA2和CommitB发生代码冲突,无法生成CommitC,则MR1的处理流程结束;步骤307、如果CommitA2和CommitB没有代码冲突,代码存储模块创建CommitC成功后,向消息中间件发送评审模拟预合入事件消息;其中,消息体中的分支信息伪造为代码评审的目标分支B,并将Commit信息伪造为临时CommitC,事件类型设置为模拟预合入;步骤308、流水线系统的调度执行模块获取消息中间件中的消息,获得步骤307中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B、事件类型为模拟预合入、Commit信息为CommitC、评审单号信息MR1;步骤309、流水线调度执行模块通过流水线配置编排模本文档来自技高网
...

【技术保护点】
1.一种支持模拟预合入流水线的Git代码评审系统,其特征在于,包括代码系统、流水线系统和消息中间件;/n所述代码系统包括用户交互模块、与用户交互模块连接的代码操作模块、与代码操作模块连接的代码存储模块、以及分别与用户交互模块和代码操作模块连接的代码评审模块;所述代码存储模块与消息中间件连接;/n所述流水线系统包括流水线配置编排模块、与流水线配置编排模块连接的流水线调度执行模块、以及与流水线调度执行模块连接的构建记录存储模块;所述消息中间件与流水线调度执行模块连接,所述构建记录存储模块与代码评审模块连接。/n

【技术特征摘要】
1.一种支持模拟预合入流水线的Git代码评审系统,其特征在于,包括代码系统、流水线系统和消息中间件;
所述代码系统包括用户交互模块、与用户交互模块连接的代码操作模块、与代码操作模块连接的代码存储模块、以及分别与用户交互模块和代码操作模块连接的代码评审模块;所述代码存储模块与消息中间件连接;
所述流水线系统包括流水线配置编排模块、与流水线配置编排模块连接的流水线调度执行模块、以及与流水线调度执行模块连接的构建记录存储模块;所述消息中间件与流水线调度执行模块连接,所述构建记录存储模块与代码评审模块连接。


2.一种支持模拟预合入流水线的Git代码评审方法,其特征在于,包括如下步骤:
步骤一、流水线配置场景;
用户通过流水线系统中的流水线配置编排模块,为代码系统合入需要经过代码评审的分支配置流水线,并且该流水线的触发条件为评审模拟预合入;
步骤二、发起MergeRequest代码评审场景,包括以下步骤:
步骤201、用户通过代码系统中的用户交互模块,创建从源分支A到目标分支B的MergeRequest代码评审,此时分支A的最新Commit记为CommitA,分支B的最新Commit记为CommitB;
步骤202、代码评审模块在完成MergeRequest的创建之后,向代码操作模块发送指令,要求代码操作模块在代码存储模块中创建CommitA和CommitB的一个临时合并提交,记为CommitC;
步骤203、代码操作模块向代码存储模块发送指令,并要求代码存储模块进行CommitC的创建,如果CommitA和CommitB发生代码冲突,无法生成CommitC,则流程结束;
步骤204、如果CommitA和CommitB没有代码冲突,代码存储模块创建CommitC成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B,并将Commit信息伪造为临时CommitC,事件类型设置为模拟预合入;
步骤205、流水线系统中的流水线调度执行模块获取消息中间件传送的消息,获得步骤204中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B,事件类型为模拟预合入,Commit为CommitC;
步骤206、流水线调度执行模块通过流水线配置编排模块查找用户在步骤一中为分支B配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤207、构建记录存储模块将分支B的模拟预合入流水线执行状态信息根据评审单号,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
步骤三、更新MergeRequest代码评审源分支场景,包括以下步骤:
步骤301、基于步骤二,用户创建从源分支A到目标分支B的MergeRequest代码评审记为MR1,此时分支A的最新Commit记为CommitA,分支B的最新Commit记为CommitB,由于特殊原因导致代码评审被驳回,用户通过命令行向分支A提交更新后的代码记为CommitA2;
步骤302、用户交互模块将步骤301中用户代码提交命令转发至代码操作模块;
步骤303、代码操作模块向代码评审模块发送查询请求,查询分支A是否含有正在评审进行中的MR1;
如果没有,代码操作模块将CommitA2提交至代码存储模块中,流程结束;
如果有,则通过代码评审模块获取分支A正在进行中的MR1集合,并记为list1;
步骤304、代码操作模块向代码存储模块发送指令,将分支A的CommitA2提交至代码存储模块;
步骤305、对list1中的所有MR1进行步骤306至步骤3010的循环操作;
步骤306、代码操作模块向代码存储模块发送指令,在代码存储模块中创建CommitA2和CommitB的一个临时合并提交,记为CommitC;
如果CommitA2和CommitB发生代码冲突,无法生成CommitC,则MR1的处理流程结束;
步骤307、如果CommitA2和CommitB没有代码冲突,代码存储模块创建CommitC成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B,并将Commit信息伪造为临时CommitC,事件类型设置为模拟预合入;
步骤308、流水线系统的调度执行模块获取消息中间件中的消息,获得步骤307中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B、事件类型为模拟预合入、Commit信息为CommitC、评审单号信息MR1;
步骤309、流水线调度执行模块通过流水线配置编排模块查找用户在步骤一中为分支B配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;
步骤3010、构建记录存储模块将分支B的模拟预合入流水线执行状态信息根据评审单号MR1,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;
步骤四、创建ChangeRequest和DirectCodeReview代码评审场景,包括以下步骤:
步骤401、用户将本地编写完成的代码通过客户端发起向目标分支B的代码评审创建命令,其中,目标分支B的最新Commit记为CommitB;
步骤402、代码操作模块向代码存储模块发送指令,创建临时匿名分支A,并在分支A上存储用户从客户端在步骤401中提交上来的代码,记为CommitA;
步骤403、代码操作模块向代码评审模块发送指令,创建代码评审CR1,CR1的目标分支为B,源分支用户不可见,是匿名的临时分支A;
步骤404、代码评审模块将代码评审CR1的信息回传至代码操作模块;
步骤405、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA和CommitB的一个临时合并提交,记为CommitC;
如果CommitA和CommitB发生代码冲突,无法生成CommitC,则CR1的处理流程结束;
步骤406、如果CommitA和CommitB没有代码冲突,代码存储模块创建CommitC成功后,向消息中间件发送评审模拟预合入事件消息;
其中,消息体中的分支信息伪造为代码评审的目标分支B,并将Commit信息伪造为临时CommitC,事件类型设置为模拟预合入;
步骤407、流水线系统中的调度执行模块获取消息中间件中的消息,获得步骤406中代码存储模块发送的消息体,并对消息体内容进...

【专利技术属性】
技术研发人员:刘庆
申请(专利权)人:北京简单一点科技有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1