研發團隊如何藉助Gitlab來做程式碼review

【空山新雨】發表於2019-06-19

程式碼review是程式碼質量保障的手段之一,同時開發成員之間程式碼review也是一種技術交流的方式,雖然會佔用一些時間,但對團隊而言,總體是個利大於弊的事情。如何藉助現有工具在團隊內部形成程式碼review的流程與規範,是team leader或技術管理者需要考慮的問題。本文分享一種基於Gitlab程式碼merge流程的code review方法,以供參考與探討。如有更好的方法,歡迎交流。

1. 設定成員角色

首先需要對你團隊的成員分配角色,在Gitlab groups裡選擇一個group,然後左邊選單欄點選 Members,可在 Members 頁面新增或編輯成員角色,如下圖所示。

group成員

 

其中角色包含如下幾類:

  • Guest:許可權最小,基本檢視功能
  • Reporter:只能檢視,不能push
  • Developer:能push,也能merge不受限制的分支
  • Master:除了專案的遷移、刪除等管理許可權沒有,其它許可權基本都有
  • Owner:許可權最大,包括專案的遷移、刪除等管理許可權

詳細許可權參考: https://docs.gitlab.com/ee/user/permissions.html

確定團隊中技術水平、經驗較好的成員為Master,負責程式碼的review與分支的合併;其他成員為Developer,提交合並請求,接受review意見;Master之間可以互相review。

 

2. 配置分支保護

在專案頁面左側選單欄 Settings -> Repository, 進入“Protected Branches”部分配置分支保護,如下圖所示。

分支保護

在這裡可以針對每個分支,設定允許什麼角色可以merge,允許什麼角色可以push,選項包括三個:“Masters”, “Developers + Masters”, “No one”。這裡設定成只允許master可以直接push與merge這幾個常設分支的程式碼。(如果更嚴格一點,可以將“Allowed to push”設定成“No one”)

 

3. 程式碼review流程

3.1. 開發(開發者負責)

  1. 本地切到develop分支, 拉取最新程式碼(相關命令如下,GUI工具操作自行查相關文件)
    git branch #檢視當前位於哪個分支,前面打星號即為當前分支
    git checkout develop   #切換到develop分支
    git pull  #拉取最新程式碼
  1. 從develop分支切出子分支
    git checkout -b feature-1101  #從當前分支切出子分支,命名為"feature-1101"
  1. 編碼、本地自測完之後,提交子分支到遠端倉庫
    git add *  #加入暫存區
    git commit -m "commit msg" #提交到本地倉庫
    git push origin feature-1101 #提交到遠端倉庫

 

3.2 發起Merge請求(開發者負責)

 

  1.  在專案主頁面,依次點選左側“Merge Requests”(下圖1),“New merge request”(下圖2),開啟新建Merge請求頁面3.2 發起Merge請求(開發者負責)

Merge請求

 

  1. 在新建Merge請求頁面,選擇merge的源分支,及目標分支,如下圖源分支為“feature-1101”,目標分支為“develop”,點選“Compare branches and continue”按鈕進入對比與提交頁面

新建Merge請求

 

  1. 在對比與提交頁面,可以點選“Changes” tab檢視本次修改(這裡我為了演示,只是加了兩個換行),確認無誤,點選“Submit merge request”按鈕,提交merge請求

對比修改

  1. 提交之後,將結果頁面的瀏覽器地址發到團隊即時通訊群(如釘釘),並@相應的同事申請review

3.3 程式碼Review(code reviewer負責)

  1. 負責程式碼Review的同事收到申請後,點選merge請求地址,開啟頁面,檢視“Changes”。這裡可通過“Inline”單邊檢視,也可以通過“Side-by-side”兩個版本對比檢視

對比修改

 

  1. review完成後,若無問題,則可點選”Merge”按鈕完成merge,同時可刪除對應的子分支“feature-1101”;若有問題,則可點選“Close merge request”按鈕關閉該merge請求(也可以不關閉複用該merge請求),同時通知開發者進行相應調整,重新提交程式碼發起merge請求(如果之前沒關閉merge請求,則重新整理即可看到調整)。

3.4 衝突解決(開發者負責)

  1. merge的時候,可能存在程式碼衝突,這時,開發者可從develop分支重新拉取最新程式碼進行本地merge, 解決衝突後重新提交程式碼進行review
    git pull origin develop #在當前子分支拉取develop分支的最新程式碼進行本地merge
    
    # 解決衝突程式碼
    
    # 提交
    git add *
    git commit -m "fix merge conflict"
    git push origin feature-1101
  1. 自行解決不了時,尋求協助

 

4. 藉助阿里釘釘機器人來改善體驗

前面流程中提醒code reviewer是需要開發者自己來發訊息通知的,可不可以把這個流程自動化。我們可以藉助Gitlab的webhook與釘釘機器人來實現。

  1. 在釘釘群右上角點選“…”,開啟群設定,群機器人中點選新增機器人,會顯示可以新增的機器人型別,如下圖所示

釘釘機器人

  1. 選擇Gitlab,點選新增,輸入機器人名稱,如“Gitlab”,點選完成即建立了一個Gitlab的釘釘機器人。回到“群機器人”視窗,將能看到剛剛建立的Gitlab機器人,如圖

釘釘機器人列表

      點選齒輪按鈕,進入設定頁,可看到webhook地址,點選複製,複製該機器人的webhook地址。如圖

釘釘機器人webhook

  1. 在Gitlab專案主頁進入 Settings -> Integrations, 將前面複製的webhook地址填入URL中,Trigger 部分選擇“Merge request events”(不要勾太多,不然提醒太多就有點騷擾了),然後點選“Add webhook”就完成了。如圖

GitlabWebhook

  1. 當有開發人員提交merge請求時,釘釘機器人將在釘釘群裡發出通知,code reviewer點選訊息裡的連結即可進入頁面進行code review, review完成,將分支merge之後,釘釘機器人也會發出訊息(所有merge相關的事件都會發出訊息)。如圖

釘釘機器人通知

 

5. 總結

團隊協作,流程、規範很重要,不同的團隊可能有不同的適用流程與規範。此文分享了基於Gitlab與阿里釘釘群機器人的程式碼review流程,希望對團隊研發協作有一定參考價值,也歡迎一起探討、交流。





我的個人部落格地址:http://blog.jboost.cn
我的頭條空間: https://www.toutiao.com/c/user/5833678517/#mid=1636101215791112
我的github地址:https://github.com/ronwxy
我的微信公眾號:jboost-ksxy

————————————————————————————————————————

微信公眾號
歡迎關注我的微信公眾號,及時獲取最新分享

相關文章