目的
代碼評(píng)審也叫CodeReview,主要目的是提升代碼質(zhì)量,盡早發(fā)現(xiàn)潛在缺陷與BUG,降低修復(fù)成本;
同時(shí)另一個(gè)重要好處是知識(shí)轉(zhuǎn)移,促進(jìn)團(tuán)隊(duì)內(nèi)部知識(shí)共享,幫助更多人更好地理解系統(tǒng)。
常見(jiàn)方式
- 代碼評(píng)審會(huì)議,稱之為
Code Review Meeting,就是將團(tuán)隊(duì)成員都組織起來(lái)開(kāi)會(huì),讓代碼Owner上去講自己代碼的實(shí)現(xiàn)和思路,其它人發(fā)表意見(jiàn)和進(jìn)行討論,這種方式的特點(diǎn)之一是需要多個(gè)團(tuán)隊(duì)成員共同參與。 - 一對(duì)一評(píng)審,稱之為
Single Review,就是項(xiàng)目owner提交代碼之后,讓reviewer在空閑的時(shí)候幫忙評(píng)審代碼,并且寫(xiě)出批注,owner收到批注后,進(jìn)行修改或者回復(fù)。這種方式更具備流程化,有對(duì)應(yīng)的日志,能較好的追蹤問(wèn)題。- gitlab的merge request,這里不細(xì)講。
- phabricator,facebook開(kāi)發(fā)的可視化代碼評(píng)審工具。
- 其它...
Single review需要注意的是當(dāng)團(tuán)隊(duì)成員過(guò)多時(shí),并只有一兩個(gè)reviewer時(shí),會(huì)占據(jù)reviewer太多時(shí)間,所以需要合理安排對(duì)應(yīng)的reviewer很重要。
環(huán)境搭建
搭建步驟:
-
安裝Navicat Premium(數(shù)據(jù)庫(kù)管理工具,可選)
-
安裝docker環(huán)境
- docker安裝portioner(可視化docker管理工具,可選)
- docker安裝mysql
- docker安裝phabricator
-
phabricator系統(tǒng)配置
- phabricator用戶注冊(cè)
- phabricator關(guān)聯(lián)倉(cāng)庫(kù)
- phabricator規(guī)則設(shè)定
準(zhǔn)備一臺(tái)能訪問(wèn)公司內(nèi)網(wǎng)的mac作為主機(jī),打開(kāi)命令行,安裝命令如下
brew cask install docker #安裝docker
#docker安裝成功后,開(kāi)始安裝容器
docker pull mysql # 拉取mysql
docker pull portainer/portainer # 拉取portioner
docker pull redpointgames/phabricator # 拉取最新版的phabricator
運(yùn)行容器
#運(yùn)行portainer,運(yùn)行完成后,可以通過(guò)本機(jī)ip加端口號(hào) 9000來(lái)訪問(wèn)
docker run -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer
#運(yùn)行mysql
docker run -p 3306:3306 --name mysql -v $PWD/mysql/conf:/etc/mysql/conf.d -v $PWD/mysql/logs:/logs -v $PWD/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
#運(yùn)行phabricator,運(yùn)行完成后,可以通過(guò)本機(jī)ip加端口號(hào) 8891來(lái)訪問(wèn)
docker run --name phabricator -p 443:443 -p 332:22 -p 8891:80 -v $PWD/phabricator/backup:/repos -e PHABRICATOR_HOST=http://XX.XX.XX.XX:8891 -e MYSQL_HOST=172.17.0.3 -e MYSQL_USER=root -e MYSQL_PASS=123456 -e PHABRICATOR_REPOSITORY_PATH=/repos -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin -it phabricator /bin/bash /app/init.sh
#查看是否運(yùn)行成功
docker ps -a
命令說(shuō)明:
PHABRICATOR_HOST:是主機(jī)IP地址。
-p 3306:3306:將容器的 3306 端口映射到主機(jī)的 3306 端口。
-v -v $PWD/conf:/etc/mysql/conf.d:將主機(jī)當(dāng)前目錄下的 conf/my.cnf 掛載到容器的 /etc/mysql/my.cnf。( $PWD/conf:/etc/mysql/conf.d是本地的目錄)
-v $PWD/logs:/logs:將主機(jī)當(dāng)前目錄下的 logs 目錄掛載到容器的 /logs。
-v $PWD/data:/var/lib/mysql :將主機(jī)當(dāng)前目錄下的data目錄掛載到容器的 /var/lib/mysql 。
-e MYSQL_ROOT_PASSWORD=123456:初始化 root 用戶的密碼。
tips:
上述操作也可在打開(kāi)portainer后,直接在界面內(nèi)配置操作。
掛載目錄可根據(jù)自己決定。
到目前為此,環(huán)境搭建基本完成。
下面是phabricator內(nèi)部操作,進(jìn)入phabricator系統(tǒng):http://XXX.XXX.XXX.XX:8891
phabricator配置
添加用戶
1、第一次進(jìn)入,會(huì)提示我們注冊(cè)賬戶,這個(gè)賬戶會(huì)默認(rèn)為系統(tǒng)的管理員。
2、然后開(kāi)始注冊(cè)其它用戶,操作路徑如下:
點(diǎn)擊右上角賬戶 >> 下拉菜單 >> logOut >> 回登錄頁(yè)面 >> register New Account
3、這里有驗(yàn)證郵箱功能,這里想直接跳過(guò),所以通過(guò)Navicat Premium直接連接本地?cái)?shù)據(jù)庫(kù)。
修改phabricator_user-user表,字段isApproved改為1,這樣無(wú)需郵箱驗(yàn)證,用戶也可以正常登錄。
編輯菜單
1、主頁(yè)點(diǎn)擊application搜Herald,創(chuàng)建Herald到菜單欄。
2、主頁(yè)點(diǎn)擊application搜Passphrase,創(chuàng)建Passphrase到菜單欄。
添加倉(cāng)庫(kù)
1、創(chuàng)建密鑰,操作路徑如下:
Passphrase >> create Credentail >> SSH Private Key >> Save
click private key >> show Public Key >> 黏貼 Public Key到gitlab里面
2、創(chuàng)建倉(cāng)庫(kù),操作路徑如下:
Diffusion >> create Repository >> create a new git repository >> create repository
click repository >> Actions >> manager repository >> URIS >> New URI >> 輸入倉(cāng)庫(kù)地址,I/O Type設(shè)為Observer >> save Changes
3、拷貝倉(cāng)庫(kù),操作路徑如下:
click repository >> update Credentail >> choose 密鑰,save
click repository ,clone repository,稍等一段時(shí)間,看是否拉取成功;未成功,則重新檢查上述步驟。
創(chuàng)建規(guī)則
規(guī)則主要指根據(jù)commits message指定對(duì)應(yīng)的reviewer
操作路徑如下:
1、click Herald >> create herald >> commits >> global
創(chuàng)建頁(yè)面中,第一欄是規(guī)則名字,第二欄是條件,第三欄是行為動(dòng)作
2、創(chuàng)建兩個(gè)條件,條件一選擇Repository,就是剛剛拷貝的倉(cāng)庫(kù);
條件二選擇Commite Message,第二欄選擇contains(包含) 或者 matches regex(正則匹配),后面的填空則是具體的規(guī)則,如以模塊負(fù)責(zé)人作為reviewer,所以規(guī)則直接填“(模塊名):”
3、行為選擇add auidtors,選擇對(duì)應(yīng)的用戶作為reviewer。
具體的例子是:
Commite Message填寫(xiě)“(登錄):”add auidtors為“李四”
張三提交信息為:“feat(登錄):添加了登錄功能”,則李四則成為了這次commits的reviewer
更多rules可以根據(jù)實(shí)際情況挖掘,并非固定。
For Us
目前我們特性團(tuán)隊(duì)開(kāi)發(fā)人數(shù)10+,處于新項(xiàng)目快速迭代階段。采取的是第二種Single Review方式。
做法是將系統(tǒng)分成多個(gè)小功能模塊,每個(gè)模塊指定對(duì)應(yīng)的第一負(fù)責(zé)人和第二負(fù)責(zé)人。
負(fù)責(zé)人主要對(duì)整個(gè)模塊統(tǒng)籌把控,例如參與需求講解、協(xié)議對(duì)接等,同時(shí)也是該模塊默認(rèn)的reviewer。
review時(shí)間定在功能提測(cè)日,形成固定的review流程,合理分散review的工作量。
不同的開(kāi)發(fā)人員結(jié)構(gòu),選擇reviewer的方式也盡不相同,除了上述說(shuō)的
如果一個(gè)模塊只有一個(gè)人開(kāi)發(fā),可以考慮跟另一個(gè)模塊開(kāi)發(fā)人員組review CP,這樣也可以防止一個(gè)模塊功能只有一個(gè)人熟悉的弊端。
如果一個(gè)模塊是兩三個(gè)人開(kāi)發(fā),可以考慮相互之間review,能加深模塊成員對(duì)該模塊的了解。
如果一個(gè)app只有一個(gè)人開(kāi)發(fā),這篇文章當(dāng)作課外閱讀~
其它問(wèn)題
同步時(shí)間
進(jìn)入容器
cd /user/share/zoneinfo/Asia
cp -i Shanghai /etc/localtime
date
參考
漢化phabricator?
使用docker安裝phabricator的配置和使用方法?
第一次登陸后退出提示Authentication Failure?
如何做好代碼審查?Code Review Meeting還是Single Review?
基于GitLab的Code Review教程或指南