一、Gerrit的簡介
Gerrit是Google開源的一套基於web的代碼review工具,它是基於git的版本管理系統。Google開源Gerrit旨在提供一個輕量級框架,用於在代碼入庫之前對每個提交進行審閱。每個修改都將提交到gerrit上,但實際上沒有真正意義的成為項目的一部分,直到提交被管理員review和submit。它是標准開源過程的一個簡單工具來支持提交補丁程序,然后由項目成員在應用到代碼庫之前進行review。
二、Gerrit的搭建步驟
- 賬號配置
- 配置gerrit的管理賬號
sudo adduser gerrit
- 給gerrit增加sudo的管理員權限
sudo usermod -a -G sudo gerrit
- 后續所有的操作都需要切換到gerrit賬號進行
sudo su gerrit
- 配置gerrit的管理賬號
- 安裝java環境
sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-7-jdk
- 安裝配置git環境
sudo apt-get install git
- 安裝配置Apache2
- 下載Apache2
sudo apt-get install apache2
- 修改配置文件,后面會用到Apache的反射
sudo vi /etc/apache2/httpd.conf
這種方式是通過vi在命令里面修改
或者
sudo gedit /etc/apache2/httpd.conf
這種方式是通過打開一個文本編輯器進行修改 - 具體的修改的內容如下,我寫了注釋的地方需要注意根據自己的需求進行修改
- 下載Apache2
<VirtualHost *:8081> //這里是反射代理的端口號, ServerName 10.180.152.83 //這里是填寫Apache反射代理的ip地址,也就是你服務器的ip地址 ProxyRequests Off ProxyVia Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> <Location "/login/"> AuthType Basic AuthName "Gerrit Code Review" Require valid-user AuthBasicProvider file AuthUserFile /home/gerrit/review_site/passwords //這個路徑是gerrit賬戶密碼管理,后續的步驟中會創建此文件。路徑有寫正確 </Location> AllowEncodedSlashes On ProxyPass / http://127.0.0.1:8091/ nocanon //這里是代理反射,照着寫就OK了 </VirtualHost>
注意:
如果http.conf沒有Include到apache2.conf中,就需要手動添加:
sudo vi /etc/apache2.conf
添加如下,
Include http.conf
- 修改配置文件,添加對8081端口的監聽:
sudo vi /etc/apache2/ports.conf
添加,
Listen 8081 //這里的8081端口號是上面配置的Apache2反射端口
- 開啟SSL、Proxy、Rewrite等模塊:
cd /etc/apache2/mods-enabled
在這個路徑下面,輸入下面的命令
sudo ln -s ../mods-available/proxy.load sudo ln -s ../mods-available/proxy.conf sudo ln -s ../mods-available/proxy_http.load sudo ln -s ../mods-available/proxy_balancer.conf sudo ln -s ../mods-available/proxy_balancer.load sudo ln -s ../mods-available/rewrite.load sudo ln -s ../mods-available/ssl.conf sudo ln -s ../mods-available/ssl.load sudo ln -s ../mods-available/slotmem_shm.load sudo ln -s ../mods-available/socache_shmcb.load
- 安裝配置gerrit
gerrit的最新下載地址:https://www.gerritcodereview.com/
本教程使用的是gerrit-2.16- 進入到下載好的gerrit軟件目錄
cd home/gerrit/download
- 安裝解壓下載好的war包
java -jar gerrit-2.16.war init -d ~/review_site #這里的review_site是解壓出來的包名,最好不要修改。避免不必要的錯誤
- 安裝的時候,選擇默認配置,一路回車,安裝完成之后。打開瀏覽器輸入 loccalhost:8080就能看到gerrit的界面了。
- 當然了,作為一名優秀的程序員,我們不能止步於默認配置。所以,我們對配置文件進行按需修改
sudo gedit ~/review_site/etc/gerrit.config
具體的修改內容如下:
- 進入到下載好的gerrit軟件目錄
[gerrit] basePath = git //這里是配置gerrit項目管理倉庫的名字。可以所以修改 serverId = 02481fa0-9b63-4b6a-9869-8b4e2a4364ee canonicalWebUrl = http://110.180.152.83:8081/ //這里就是打開gerrit管理系統的地址了。這個地方和前面配置的Apache2的反射文件要一致 [database] type = h2 //這里是選擇數據庫,gerrit支持h2/mysql/postsql三種,一般不是那種超級大型的團隊管理,我們選擇h2就夠用了。 database = /home/gerrit/review_site/db/ReviewDB //這里是數據庫的位置 [auth] type = HTTP //這里一定要改,改成HTTP的方式。 [receive] enableSignedPush = false [sendemail] //這里是郵箱配置,如果是公司內網,發送郵件不方便的話,可以配置為sendemail = fasle就行了。后面我會教大家,繞過郵箱認證賬號的方法。 smtpServer = smtp.company.com smtpServerPort = *** smtpEncryption = ssl smtpUser = user@company.com //這里填寫要發送驗證信息的郵箱 smtpPass = ****** //這里輸密碼 sslVerify = false from = Code Review < gerrit@company.com > //填寫郵箱 [container] user = gerrit //這里不要改動,選擇gerrit登陸 javaHome = /usr/lib/jvm/java-7-openjdk-amd64/jre //這里是默認選擇的Java路徑 [sshd] listenAddress = *:29418 //這里不准改,這里就選擇默認的29418 [httpd] listenUrl = proxy-http://*:8091/ //這里修改端口,*可以替換成對應的ip也可以不換 [cache] directory = cache
- 配置一個gerrit的管理員賬號:
touch ~/review_site/passwords //這個文件就是上面Apache配置的賬號路徑 sudo htpasswd -b ~/review_site/passwords admin admin //新增賬號admin和密碼
- 安裝配置gitweb
- 下載安裝gitweb
sudo apt-get install gitweb
- 查看相關配置文件的安裝路徑
dpkg -L gitweb
得到輸出如下:
- 下載安裝gitweb
/. /usr /usr/share /usr/share/doc /usr/share/doc/gitweb /usr/share/doc/gitweb/examples /usr/share/doc/gitweb/examples/index.aux-generation /usr/share/doc/gitweb/README.Debian /usr/share/doc/gitweb/copyright /usr/share/doc/gitweb/README /usr/share/doc/gitweb/NEWS.Debian.gz /usr/lib /usr/lib/cgi-bin /etc /etc/apache2 /etc/apache2/conf.d /etc/apache2/conf.d/gitweb /etc/gitweb.conf /usr/share/doc/gitweb/changelog.Debian.gz /usr/lib/cgi-bin/gitweb.cgi
打開gerrit的config:
sudo gedit ~/review_site/etc/gerrit.config
添加從上面路徑的最后一行
[gitweb] type = gitweb cgi = /usr/lib/cgi-bin/gitweb.cgi
- 重啟gerrit和Apache2
sudo ~/review_site/bin/gerrit.sh restart sudo /etc/init.d/apache2 restart
- 訪問gerrit管理界面
瀏覽器輸入:
http://192.168.130.10:8081/
三、問題與總結
Q1: gerrit服務器搭在公司內部局域網,沒有辦法發送外部郵箱進行賬號驗證怎么辦?
A1: 我們可以直接遠程操作數據庫進行修改賬號的郵箱地址,具體方法如下:
- 為ssh的主機配置設置別名,在~/.ssh/config文件中添加:
Host review Hostname 10.180.152.81 User admin //這個名字要和網站上管理員的名字相同 Port 29418 IdentityFile ~/.ssh/id_rsa
這樣就可以簡單通過ssh訪問gerritl了。效果如下:
# ssh review **** Welcome to Gerrit Code Review **** Hi username, you have successfully connected over SSH. Unfortunately, interactive shells are disabled. To clone a hosted Git repository, use: git clone ssh://admin@review.domain.tld:29418/REPOSITORY_NAME.git Connection to review.tafdc.org closed.
然后,通過ssh遠程連接gerrit進行賬號郵箱的配置。
ssh review gerrit set-account --add-email xxxxx@郵箱 admin
總結:
gerrit的代碼審核系統是非常有必要學會的,這是提高代碼質量和項目的重要方式。我們要在對code的review中,不斷發現其他同事優秀的代碼,也要接受自身code中不足之處。