[發明專利]一種支持模擬預合入流水線的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},回傳至代碼評審模塊,從而實現用戶在代碼評審的過程中,提前得到代碼預合入后流水線構建是否能夠成功的信息。
該專利技術資料僅供研究查看技術是否侵權等信息,商用須獲得專利權人授權。該專利全部權利屬于北京簡單一點科技有限公司,未經北京簡單一點科技有限公司許可,擅自商用是侵權行為。如果您想購買此專利、獲得商業授權和技術合作,請聯系【客服】
本文鏈接:http://www.szxzyx.cn/pat/books/202010697174.3/1.html,轉載請聲明來源鉆瓜專利網。
- 上一篇:緊湊型節能伺服動力單元
- 下一篇:一種氣壓驅動型冰球加工裝置





