[发明专利]一种支持模拟预合入流水线的Git代码评审系统及其方法有效

专利信息
申请号: 202010697174.3 申请日: 2020-07-20
公开(公告)号: CN111831271B 公开(公告)日: 2023-07-07
发明(设计)人: 刘庆 申请(专利权)人: 北京简单一点科技有限公司
主分类号: G06F8/33 分类号: G06F8/33;G06F8/41;G06F8/71
代理公司: 暂无信息 代理人: 暂无信息
地址: 100000 北京市海淀区*** 国省代码: 北京;11
权利要求书: 查看更多 说明书: 查看更多
摘要:
搜索关键词: 一种 支持 模拟 入流 水线 git 代码 评审 系统 及其 方法
【权利要求书】:

1.一种支持模拟预合入流水线的Git代码评审方法,其特征在于,包括代码系统、流水线系统和消息中间件;

所述代码系统包括用户交互模块、与用户交互模块连接的代码操作模块、与代码操作模块连接的代码存储模块、以及分别与用户交互模块和代码操作模块连接的代码评审模块;所述代码存储模块与消息中间件连接;

所述流水线系统包括流水线配置编排模块、与流水线配置编排模块连接的流水线调度执行模块、以及与流水线调度执行模块连接的构建记录存储模块;所述消息中间件与流水线调度执行模块连接,所述构建记录存储模块与代码评审模块连接;

所述流水线调度执行模块用于监听代码评审的模拟预合入事件或者流水线内部的定时事件,并调度执行符合触发条件的流水线;

该方法包括如下场景:

场景一、流水线配置场景;

用户通过流水线系统中的流水线配置编排模块,为代码系统合入需要经过代码评审的分支配置模拟预合入流水线,并且该流水线的触发条件为评审模拟预合入;

场景二、发起MergeRequest代码评审场景,包括以下步骤:

步骤201、用户通过代码系统中的用户交互模块,创建从源分支A2到目标分支B2的MergeRequest代码评审MR2,此时分支A2的最新Commit记为CommitA2, 分支B的最新Commit记为CommitB2;

步骤202、代码评审模块在完成 MR2的创建之后,向代码操作模块发送指令,要求代码操作模块在代码存储模块中创建CommitA2和CommitB2的一个临时合并提交,记为CommitC2;

步骤203、代码操作模块向代码存储模块发送指令,并要求代码存储模块进行CommitC2的创建,如果CommitA2和CommitB2发生代码冲突,无法生成CommitC2,则流程结束;

步骤204、如果CommitA2和CommitB2没有代码冲突,代码存储模块创建CommitC2成功后,向消息中间件发送评审模拟预合入事件消息;

其中,消息体中的分支信息伪造为代码评审MR2的目标分支B2,并将Commit信息伪造为临时CommitC2,事件类型设置为模拟预合入,消息体还包括代码评审单号信息;

步骤205、流水线系统中的流水线调度执行模块获取消息中间件传送的消息,获得步骤204中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B2,事件类型为模拟预合入,Commit为CommitC2;

步骤206、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B2配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;

步骤207、构建记录存储模块将分支B2的模拟预合入流水线执行状态信息根据评审单号,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;

场景三、更新MergeRequest代码评审源分支场景,包括以下步骤:

步骤301、基于场景二,用户创建从源分支A2到目标分支B2的MergeRequest代码评审记为MR2,此时分支A2的最新Commit记为CommitA2,分支B2的最新Commit记为CommitB2,由于代码评审被驳回,用户通过命令行向分支A2提交更新后的代码记为CommitA2-2;

步骤302、用户交互模块将步骤301中用户代码提交命令转发至代码操作模块;

步骤303、代码操作模块向代码评审模块发送查询请求,查询分支A2是否含有正在评审进行中的MergeRequest;

如果没有,代码操作模块将CommitA2-2 提交至代码存储模块中,流程结束;

如果有,则通过代码评审模块获取分支A2正在进行中的MergeRequest集合,并记为list3;

步骤304、代码操作模块向代码存储模块发送指令,将分支A2的CommitA2-2提交至代码存储模块;

步骤305、对list3中的每个MR进行步骤306至步骤3010的循环操作;其中,将list3中的每个MergeRequest记为MR{n},n表示list3中MergeRequest的数目;

步骤306、代码操作模块向代码存储模块发送指令,在代码存储模块中创建CommitA2-2和CommitB2的一个临时合并提交,记为CommitC3;

如果CommitA2-2和CommitB2发生代码冲突,无法生成CommitC3,则MR{n}的处理流程结束;

步骤307、如果CommitA2-2和CommitB2没有代码冲突,代码存储模块创建CommitC3成功后,向消息中间件发送评审模拟预合入事件消息;

其中,消息体中的分支信息伪造为代码评审的目标分支B2,并将Commit信息伪造为临时CommitC3,事件类型设置为模拟预合入;

步骤308、流水线系统的调度执行模块获取消息中间件中的消息,获得步骤307中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B2、事件类型为模拟预合入、Commit信息为CommitC3、评审单号信息MR{n};

步骤309、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B2配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;

步骤3010、构建记录存储模块将分支B2的模拟预合入流水线执行状态信息根据评审单号MR{n},回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;

场景四、创建ChangeRequest或Direct Code Review代码评审场景,包括以下步骤:

步骤401、用户将本地编写完成的代码通过客户端发起向目标分支B4的代码评审创建命令,其中,目标分支B4的最新Commit记为CommitB4;

步骤402、代码操作模块向代码存储模块发送指令,创建临时匿名分支A4,并在分支A4上存储用户从客户端在步骤401中提交上来的代码,记为CommitA4;

步骤403、代码操作模块向代码评审模块发送指令,创建代码评审CR4,CR4的目标分支为B4,源分支用户不可见,是匿名的临时分支A4;

步骤404、代码评审模块将代码评审CR4的信息回传至代码操作模块;

步骤405、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA4和CommitB4的一个临时合并提交,记为CommitC4;

如果CommitA4和CommitB4发生代码冲突,无法生成CommitC4,则CR4的处理流程结束;

步骤406、如果CommitA4和CommitB4没有代码冲突,代码存储模块创建CommitC4成功后,向消息中间件发送评审模拟预合入事件消息;

其中,消息体中的分支信息伪造为代码评审的目标分支B4,并将Commit信息伪造为临时CommitC4,事件类型设置为模拟预合入;

步骤407、流水线系统中的调度执行模块获取消息中间件中的消息,获得步骤406中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B4、事件类型为模拟预合入、Commit信息为CommitC4、评审单号信息CR4;

步骤408、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B4配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;

步骤409、构建记录存储模块将分支B4的模拟预合入流水线执行状态信息根据评审单号CR4,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;

场景五、更新Change Request或Direct Code Review代码评审匿名临时分支场景,包括以下步骤:

步骤501、基于场景四,用户创建了到目标分支B4的Change Request和Direct CodeReview的代码评审记为CR4,此时评审的源分支是用户不可见的匿名临时分支A4,其最新Commit记为CommitA4, 分支B4的最新Commit记为CommitB4,由于代码评审被驳回,用户通过命令行将本地最新的代码推送至服务器端;

步骤502、用户交互模块将步骤501中的用户代码提交命令转发至代码操作模块;

步骤503、代码操作模块根据提交命令中的目标分支信息和提交者信息,从代码评审模块查询到CR4;

步骤504、代码操作模块向代码存储模块发送指令,将用户在步骤501中推送过来的最新代码提交至分支A4,最新的代码记为CommitA4-2;

步骤505、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA4-2和CommitB4的一个临时合并提交,记为CommitC4-2;

如果CommitA4-2和CommitB4发生代码冲突,无法生成CommitC4-2,则CR4的处理流程结束;

步骤506、如果CommitA4和CommitB4没有代码冲突,代码存储模块创建CommitC4-2成功后,向消息中间件发送评审模拟预合入事件消息;

其中,消息体中的分支信息伪造为代码评审的目标分支B4,并将Commit信息伪造为临时CommitC4-2,事件类型设置为模拟预合入;

步骤507、流水线系统中的调度执行模块获取消息中间体的消息,获得步骤506中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B4、事件类型为模拟预合入、Commit信息为CommitC4-2、评审单号信息CR4;

步骤508、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B4配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;

步骤509、构建记录存储模块将分支B4的模拟预合入流水线执行状态信息根据评审单号CR4,回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息;

场景六、评审目标分支更新场景,包括以下步骤:

步骤601、假设多个用户向目标分支B6创建了若干个不同的代码评审,同时具有MergeRequest、Change Request和Direct Code Review,提交更新后的代码记为CommitB6;

步骤602、代码操作模块向代码评审模块发起查询请求,查询分支B6是否有作为目标分支且评审状态正在进行中的评审;如果没有,流程结束;如果有,获取分支B6正在进行中的全部评审集合,记为list6;

步骤603、对list6中的每一个评审进行步骤604至步骤608的循环操作;其中,将list6中的每一个评审记为XR{k},k表示list6中评审的数目;XR{k}的目标分支为B6,B6的最新代码为CommitB6-2,当XR{k}为MergeRequest时,其源分支为实体分支,记为A6-1;当XR{k}为Change Request时,其源分支为匿名临时分支,记为A6-2;当XR{k}为Direct Code Review时,其源分支也为匿名临时分支,记为A6-3;统一将分支A6-{i}(i=1,2,3)的最新代码记为CommitA6-{i};

步骤604、代码操作模块向代码存储模块发送指令,要求其在代码存储模块中创建CommitA6-{i}和CommitB6-2的一个临时合并提交,记为CommitC6;

如果CommitA6-{i}和CommitB6-2发生代码冲突,无法生成CommitC6,则XR{k}的处理流程结束;

步骤605、如果CommitA6-{i}和CommitB6-2没有代码冲突,代码存储模块创建CommitC6成功后,向消息中间件发送评审模拟预合入事件消息;

其中,消息体中的分支信息伪造为代码评审的目标分支B6,并将Commit信息伪造为临时CommitC6,事件类型设置为模拟预合入;

步骤606、流水线系统中的调度执行模块获取消息中间件的消息,获得步骤605中代码存储模块发送的消息体,并对消息体内容进行解析,获取事件源的分支为分支B6、事件类型为模拟预合入、Commit信息为CommitC6,评审单号信息XR{k};

步骤607、流水线调度执行模块通过流水线配置编排模块查找用户在场景一中为分支B6配置的模拟预合入流水线信息,并将该流水线进行调度执行,执行状态信息存储至构建记录存储模块;

步骤608、构建记录存储模块将分支B6的模拟预合入流水线执行状态信息根据评审单号XR{k},回传至代码评审模块,从而实现用户在代码评审的过程中,提前得到代码预合入后流水线构建是否能够成功的信息。

下载完整专利技术内容需要扣除积分,VIP会员可以免费下载。

该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京简单一点科技有限公司,未经北京简单一点科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服

本文链接:http://www.vipzhuanli.com/pat/books/202010697174.3/1.html,转载请声明来源钻瓜专利网。

×

专利文献下载

说明:

1、专利原文基于中国国家知识产权局专利说明书;

2、支持发明专利 、实用新型专利、外观设计专利(升级中);

3、专利数据每周两次同步更新,支持Adobe PDF格式;

4、内容包括专利技术的结构示意图流程工艺图技术构造图

5、已全新升级为极速版,下载速度显著提升!欢迎使用!

请您登陆后,进行下载,点击【登陆】 【注册】

关于我们 寻求报道 投稿须知 广告合作 版权声明 网站地图 友情链接 企业标识 联系我们

钻瓜专利网在线咨询

周一至周五 9:00-18:00

咨询在线客服咨询在线客服
tel code back_top