1.Gerrit是什麼
Gerrit是Google開發的開放源代碼的代碼審覈工具,可以方便得進行代碼審覈工作。代碼審覈方便事前和事後加強監督和管理,從而提高工程質量,保證產品的高質量開發。
Gerrit本身就包含Git,網上有各種Gerrit和GitLab混搭的方法,我看完全是沒有必要的,只要搭建Gerrit即可。
Gerrit+Jenkins是一般公司的搭配,但Jenkins配置比較複雜,而且其實每日進行日構建,也完全可以達到版本糾錯。但Gerrit之類的代碼審覈工具,是很有必要存在的。
2.在Linux上搭建Gerrit服務器
一般建議在Linux上搭建Gerrit服務器。
1)下載Gerrit
首先,下載Gerrit源代碼安裝包。Gerrit的下載地址是:https://gerrit-releases.storage.googleapis.com/index.html
2)安裝JAVA
Gerrit是用JAVA編寫的,所以,確保你本地有JAVA運行環境。一般的Linux都安裝了默認的JAVA運行環境,但如果沒有,你應該安裝。
如果不懂JVM、JRE和JDK三者關係的,不明白爲什麼JAVA程序爲什麼要安裝JAVA運行環境的,可以查更多資料瞭解,但如果想安裝JAVA運行環境,可以有幾種方法:
1)普通方法,下載JAVA運行環境或者JDK,然後修改環境文件;
現在的JAVA服務器,已經要求用IE下載JRE或者JDK了,如果可以用IE可直接下載。
可以用/etc/profile 等方法修改環境變量。
典型的配置文件修改如下:
export JAVA_HOME=JAVA程序安裝目錄或者解壓包目錄
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
2)CentOS用yum安裝,Ubuntu用apt-get install 安裝。
//ubuntu下安裝JAVA的方法
sudo apt-get update
sudo apt-get install oracle-java8-installer
//CentOS下安裝JAVA的方法
yum install java-1.8.0-openjdk*
當在程序中打java --version出現版本信息的時候,就可以認爲JAVA安裝成功了。
3)Gerrit安裝
下載好Gerrit包之後,執行安裝命令。
java -jar Gerrit安裝包 init -d Gerrit安裝目錄
安裝時,有相關配置選項,一般情況下,默認安裝就可以;如果有個性化修改,可以個性化修改。
一般情況下,如果是Gerrit服務器,部分安裝參考會要求用gerrit用戶,我個人感覺沒有必要。當然,如果創新新的用戶有如下好處:Linux是多用戶和多環境的,創建一個全新的用戶,方便不同用戶訪問不同的權限並具有不同的程序運行環境。
4)Gerrit+Nginx配置
Gerrit服務器運行的方法是:在Gerrit安裝目錄,執行 ./gerrit.sh start
但如果用web直接登錄Gerrit,會出現各種問題。一般會建議用Nginx作爲反向代理,爲Gerrit提供相應目錄。
(1)Nginx安裝:
Nginx下載地址:https://nginx.org/download/
下載完成以後,直接解壓安裝即可。
一般情況下,安裝要求如下:
wget 遠程下載鏈接
## 解壓
tar -zxvf Nginx安裝包.gz
##進入nginx目錄
cd 解壓後的安裝包
## 配置,如不加--prefix= 就會安裝到默認路徑下
./configure --prefix=/usr/local/nginx
# make
make
make install
(2)Nginx + Gerrit配置
首先,配置Gerrit,Gerrit的配置文件在 Gerrit安裝路徑/etc/gerrit.config,打開gerrit.config進行配置。
[gerrit]
basePath = git
canonicalWebUrl = http://網址:(端口號,我配置爲80)/ #網址加端口號,最主要和Nginx對應
serverId = #serverID
[database]
type = h2 #可修改,我是用默認的
database = /home/ad/review_site/db/ReviewDB #DB路徑
[index]
type = LUCENE
[auth]
type = http
logoutUrl = http://192.168.1.99:80
[receive]
enableSignedPush = false
[sendemail]
smtpServer = localhost
[container]
user = ad
javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre #JRE路徑,我用的是默認路徑
[sshd]
listenAddress = *:29418 #默認ssh端口,我採用默認的,可修改
[httpd]
listenUrl = http://*:Gerrit實際的端口號,可修改,不衝突即可/
[cache]
directory = cache
[sendemail]
#這部分可以不要
enable = true
smtpServer = smtp地址
smtpServerPort = smtp端口號
smtpUser = smtp用戶
from = gerrit庫
[gitweb]
#隨後添加
Nginx配置,可以在gerrit配置文件中進行配置Nginx 服務。默認配置目錄是/etc/nginx/,如果沒有默認安裝,可以用whereis nginx進行安裝。
在目錄下,可以新建一個gerrit.conf,並進行配置。
server {
listen 監聽端口,我默認的是80;
listen [::]:監聽端口,我默認的是80;
server_name localhost;
allow all;
deny all;
auth_basic "Welcomme to Gerrit Code Review Site!";
auth_basic_user_file ~/review_site/etc/passwd(可根據自身實際進行修改);
location / {
proxy_pass http://localhost:(上面Gerrit的監聽端口);
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
弄好以後,重啓Gerrit和Nginx。
重啓Gerrit:Gerrit安裝路徑/bin/gerrit.sh restart
重啓Nginx:/etc/init.d/nginx restart
5)安裝gitweb
安裝命令行:
ubuntu: apt-get install gitweb
redhat/centOS: yum install gitweb
配置gitweb,配置文件爲 /etc/gitweb.conf
關鍵是修改$projectroot
同時,修改原來gerrit.config
[gitweb]
type = gitweb
cgi = /usr/lib/cgi-bin/gitweb.cgi
3.Gerrit權限管理和審覈代碼
1)建立用戶
Web管理很重要的一個工作就是權限管理和ACL管理,這樣才能保證數據的安全和互聯網上信息的安全。所以,在一個Web管理系統裏,用戶分類和權限管理是非常有必要的。
在Gerrit裏面,首先要簡歷用戶名和密碼,用戶名和密碼建立通過Linux,而且,gerrit.conf也建立了用戶名和密碼驗證的路徑。到密碼驗證路徑下,執行 建立用戶和密碼的命令,會修改相應密碼。
htpasswd -m passwd(即文件名) 用戶名
隨後,用web登錄gerrit服務器,用剛建立的用戶名和密碼,然後,可以修改相關信息。同時,可以把自身的公鑰放到Gerrit庫上。
Gerrit配置公鑰需要本地有公鑰,公鑰建立方法:
(1)在Git Bash裏執行 ssh-keygen -t rsa -b 4096 -C [email protected]
(2)把 “C:\Users\用戶\.ssh”的id_rsa.pub打開,把裏面的文件輸入到Add Key裏面。
注意:如果用戶的相關信息已存在,則可能會有500 Internal Error ,不創建相關信息即可。
2)作爲管理員,可以對用戶分組,並對組別權限進行設置。
一般情況下,用Gerrit會禁止用戶直接合入。
方法爲,用web進入gerrit,選擇“People” ——> "Create New Group",把默認的用戶給加進去。
可以設置用戶禁止直接合入代碼。
選擇相應的工程----->"Acess" ----->"Add Reference" ------> "Add Permission",選擇“Push”,選擇需要的Group,然後,權限改爲BLOCK,即可禁止用戶直接合入代碼。
備註:只有管理員纔有較大權限,其他人可以分配一般開發的權限。讀權限是必須放開的,具體參考禁止直接push權限。
4.升級Gerrit服務器
較低版本的Gerrit會缺失相應的功能,故對Gerrit進行升級。
升級步驟:
1)備份原有程序(建議整體遷移到另一個文件);
2)關閉原來的程序,下載新版本後,執行java -jar 新版本 init -d 原來的安裝目錄。依然會提示你相應修改,默認不變即可;
3)執行原來的運行程序,如果出錯,執行java -jar 新版本r reindex -d 原來的安裝目錄
後記:
在敏捷式開發中,代碼審覈是很重要的一環,Gerrit是必不可少的一部分,也是團隊整體提高開發能力的重要一環。筆者也感覺到:人和人的差距其實並不大,關鍵是理念和運用工具的能力。