02.27 拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

code review 的目的是提高代碼質量,減少開發bug,俗話說,三人行必有我師,眾人拾柴火焰高。

gitlab提供了code review機制,對基於gitlab的code review,直接以具體例子的形式做個實踐總結。

gitlab提供了兩種代碼merge機制:

  1. 在本地將源分支(Source branch)代碼合併到目標分支(Target branch),然後Push到目標分支(Target branch)
  2. 將源分支(Source branch)Push到遠端,然後在GitLab指定目標分支(Target branch)發起Merge Request,對目標分支(Target branch)擁有merge權限的用戶執行Merge操作,完成合並。
    這兩種方式僅有第2種適合code review,所以我們要做的事情是設置權限,拒絕本地merge後push到遠端的操作。在第2種方式中 發起merge request後,由有merge權限用戶做code review,通過後執行merge操作。
    具體操作如正文

一,分支設置

第一步,創建項目和分支。

分支結構和功能依據具體團隊的規範來定,這裡僅供參考。

創建項目並創建分支如下

拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

創建分支

其中 release為預發佈分支,develop為測試分支,develop-1為開發分支。

release,develop,master都是固定的分支,有固定的功能。

本例中假設流程開發如下:

1. 每次需要新feature時,從master拉取開發分支,比如develop-1。

2. master有更新及時合併到develop-1,develop,以及release。

3. develop-1開發完成後合併到develop,部署測試環境。

4. develop環境測試通過後,合併develop-1代碼到release環境,做預發佈測試。

5. release環境測試通過後,將develop-1代碼合併到master,上線。

第二步,設置分支merge權限

這一步的是實現code review的關鍵,也就是控制分支的merge 權限。之後只有有merge權限的責任人才能submit merge請求,沒有merge權限的只能提交merge請求,等待有權限的review後submit,則合併成功

具體設置位置:

項目首頁→Settings->Repository→Protected Branches

拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

權限設置頁面


將master,develop,release三個分支設置成只允許maintainers merge,不允許任何人push,也即在杜絕了上文說的從本地merge,push到遠端的情況

拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

權限設置結果


二、具體操作

這裡描述從代碼修改,提交,發起merge請求,到code review後merge submit的整體流程。

第一步 開發分支代碼修改,提交,push到遠端

feature的開發分支不做具體的保護設置,即開發人員可以修改後,add,commit,push origin,這裡不做詳細講解,push之後,可以在分支頁面看到相應commit日誌。如下。

拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

commit日誌


第二步 create merge request

注意上圖右上角有一個按鈕,create merge request,發起merge請求後,進到頁面

拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

選擇源分支和目標分支

選擇source branch 和Target branch,這裡我選擇的是develop-1到release(假設到了預上線階段),點擊compare branches and continue。

拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

發佈merge request

頁面中選擇Assignee,指定reviewer,指定人會收到郵件。下面的approvers以及Approvals required,是批准人和最少批准個數。

填寫Approvals required後,必須經過指定個數以上的人批准才能合併。

點擊submit merge request。進到merge request頁面。

第三步 code review

收到郵件的reviewer通過merge request 頁面可以看到代碼修改記錄,並增加commond,其他人也可以通過commond進行討論,

無問題可以點擊merge通過或者不通過則點擊右下角的close merge request。


拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

review

第四步 查看所有merge請求

在項目頁面的merge request頁面可以看到所有open狀態,close狀態和merged狀態的merge 請求

三、可能遇到的問題

遇到衝突怎麼辦

多個分支向一個分支合併代碼等流程中,往往會形成版本衝突。此時,提交merge request後的頁面如下:

拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

衝突頁面.png

我們發現,merge按鈕置灰,同時出現了resolve conflicts以及merge locally的按鈕。點擊resolve conflicts。出現解決衝突的頁面


拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

解決衝突.png

頁面可以通過use ours指定使用當前分支(發起merge request的源分支)代碼或者use theirs來指定使用目標分支代碼。或者點擊 edit inline直接通過編輯頁面編輯(更通用)。


拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

edit inline.png

ok,我們已經處理完衝突,點擊下方submit按鈕。 返回merge request頁面,等待遠端衝突解決完成後,merge按鈕正常。

拯救狗屎代碼:基於 Gitlab 的代碼審查,簡單實用

衝突解決完成.png

四 總結。

1. 關於分支設置

以上僅是一個分支設置的示例,我們可以根據團隊風格,和具體問題具體分析。

比如多人同時開發一個需求,可能需要拉取一個feature分支後再根據該feature分支拉取個人開發分支,開發完成後和並feature再合併develop,release,master等

2. code review 流程

總結下code review流程

(1)創建好 測試分支,release分支,並配置測試分支,release分支,master分支的merge權限

(2)開發分支開發完成後push到遠端,通過頁面提交merge request,指定reviewer和審批人,一般指定reviewer即可。

(3)reviewer 通過代碼review,沒有問題,可以點擊merge,完成合並操作。如果有問題,可以發起討論,或者直接關閉merge請求。

code review 流程完成。



分享到:


相關文章: