以下內容親測驗證通過。
Git是目前最流行的分佈式版本控制系統,而Gerrit是一種免費、開放源代碼的代碼審查軟件,使用網頁界面。利用瀏覽器,同一個團隊的軟件程序員,可以相互審閱彼此修改後的程序代碼,決定是否能夠提交,退回或者繼續修改。它使用Git作爲底層版本控制系統。趁着做測試的機會,簡單學習瞭解一下Git+Gerrit是如何搭建使用的,順便簡單做個小筆記。
1:安裝git
sudo apt-get install git-core openssh-server openssh-client
2:安裝Gerrit
首先建立gerrit用戶:
sudo adduser gerrit
sudo passwd gerrit
su gerrit
gerrit是由java開發的,封裝成了一個war包,所以需要java環境,首先在服務器端執行java --version查看一下有沒有配置好java環境。這裏我下載:jdk-7u45-linux-i586.tar.gz使用下面命令安裝:
sudo tar zxvf ./jdk-7u45-linux-i586.tar.gz -C /opt
然後配置環境變量:
vim ~/.bashrc
添加如下內容:
JAVA_HOME=/opt/jdk1.7.0_45
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
下載gerrit。這裏我直接在百度上搜索gerrit某個固定版本,gerrit的war包,通常包名爲gerrit-xxx.war,xxx爲版本號,這裏我下載gerrit-2.11.war。
安裝gerrit:
java -jar gerrit-2.11.war init -d review_site
基本上一路回車就可以了,注意其中身份驗證時我選擇了HTTP,此認證方式需要配置apache的反向代理,當然也有其他認證方式可選。這裏選擇http認證方式,並在apache中配置web站點的口令認證,通過口令認證後gerrit在創建賬號的過程中會詢問用戶的郵件地址併發送郵件。gerrit數據庫選擇默認的H2即可。
Behind reverse proxy [y/N]? y
這裏配置反向代理,選擇y
配置gerrit:
vim review_site/etc/gerrit.config
[gerrit]
basePath = git
canonicalWebUrl = http://192.168.1.252:8080/
[database]
type = h2
database = db/ReviewDB
[index]
type = LUCENE
[auth]
type = HTTP
[sendemail]
smtpServer = smtp.exmail.qq.com
smtpServerPort = 465
smtpEncryption = SSL
smtpUser = [email protected]
smtpPass = emailpasswd
from = [email protected]
[container]
user = gerrit
javaHome = /opt/jdk1.7.0_45/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8081/
[cache]
directory = cache
安裝apache2服務器:sudo apt-get install --reinstall apache2 apache2.2-common
配置apache2服務器:
開啓代理功能、複寫功能:
cd /etc/apache2/mods-enabled
ln -s ../mods-available/proxy.load
ln -s ../mods-available/proxy.conf
ln -s ../mods-available/proxy_http.load
ln -s ../mods-available/proxy_balancer.conf
ln -s ../mods-available/proxy_balancer.load
ln -s ../mods-available/rewrite.load
ln -s ../mods-available/ssl.conf
ln -s ../mods-available/ssl.load
配置apache2的監聽端口:
vim /etc/apache2/port.conf
NameVirtualHost *:80
NameVirtualHost *:8080 //添加
Listen 80
Listen 8080 //添加
配置反向代理:sudo vim /etc/apache2/httpd.conf
<VirtualHost *:8080>
ServerName 192.168.1.252
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On
AllowEncodedSlashes On
RewriteEngine On
RewriteRule ^/(.*) http://192.168.1.252:8081/$1 [NE,P]
<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/etc/passwd
</Location>
ProxyPass / http://192.168.1.252:8081/
</VirtualHost>
在主機配置文件中加入httpd.conf,使其生效:sudo vim /etc/apache2/apache2.conf
加入include httpd.conf 如果有就不用加了
設置第一個gerrit用戶的賬號和密碼:touch ./review_site/etc/passwd
htpasswd -b ./review_site/etc/passwd admin admin
(後續再添加gerrit用戶可使用:$:htpasswd
-b ./review_site/etc/passwd UserName PassWord)
啓動gerrit服務:./review_site/bin/gerrit.sh start
重啓apache2服務:sudo /etc/init.d/apache2 restart
到這裏基本就配置的差不多了,在客戶端訪問http://192.168.1.252:8080/,用剛纔創建的admin用戶登錄,系統自動將該用戶註冊爲gerrit賬戶。(注:第一個登錄的用戶自動註冊爲管理員(gerrit賬號ID爲1000000的賬號))
注意:用htpasswd命令創建HTTP認證時,並沒有在gerrit數據庫中創建賬號信息,當登錄成功後,gerrit會自動創建同名的gerrit用戶。如果在htpasswd命令創建賬號之前,gerrit數據庫中已經存在同名的gerrit用戶(如:直接通過操作數據庫添加的),那麼web登錄時,不會講htpasswd命令創建的賬號和gerrit數據庫中的同名用戶關聯起來,而是自動新創建一個gerrit用戶與之關聯(即一個新的gerrit用戶ID),而且會要求你手動輸入gerrit用戶名。
gerrit網頁端配置:
登錄,瀏覽器輸入192.168.1.252:8080回車驗證身份:
賬戶信息配置,點擊右上角Settings:
Contact Information配置全名和郵箱,全名會在右上角顯示,郵箱用戶後續操作中會有提示作用。
添加個人公鑰:只有添加公鑰之後,本地用戶才能訪問服務器的代碼庫。
到這裏基本配置完成。接下來在本地安裝repo。
3:安裝repo
下載repo.git:
mkdir -p ~/gitCfg
cd ~/gifCfg
git clone http://gerrit.googlesource.com/git-repo git-repo.git
如果上面的地址無法連接,可以嘗試下面的地址:
git clone http://review.mfunz.com/git-repo git-repo.git
配置repo:
將git-repo.git目錄下的repo拷貝到/usr/bin/目錄下:
cd git-repo.git
sudo cp repo /usr/bin/repo
這時所以的準備工作都完成了,這裏在客戶端可以測試ssh是否可以連接:執行ssh -p 29418 192.168.1.252,如果連接成功,就可以做接下來的工作了,成功連接提示如下:這裏我重新創建了一個gerrit賬號:
這個時候代表ssh連接成功,我們就可以操作gerrit服務器和代碼服務器了。
首先repo只是一個python寫的腳本程序,是對git命令的封裝,git用來管理單個的git倉庫,而repo是用來管理多個被git管理的git倉庫的,repo的核心就是清單庫文件,repo指令會通過制定的清單文件來下載多個或者單個git倉庫。這裏我們首先創建清單庫,並建立默認的清單文件。
創建清單庫:
ssh -p 29418 [email protected] gerrit create-project --empty-commit --name manifest
ssh -p 29418 [email protected] gerrit create-project --empty-commit --name test
這個時候就可以在gerrit web頁面的project->Lists下面看到manifest和test倉庫了。repo默認的清單文件是default.xml來官氣其他倉庫的,這裏先clone清單庫,並創建清單文件:
創建清單文件default.xml,內容如下:
然後將default.xml推送到manifest倉庫:
git add default.xml
git commit -m “add default.xml” default.xml
git push orgin HEAD:refs/for/master //這句話是推送到gerrit,可以通過管理員審覈,然後合併
最後其他用戶可以直接通過repo init來任意下載所有被管理的倉庫代碼,這裏我只創建了一個唄管理的test倉庫,做演示:repo init -u ssh://[email protected]:29418/manifest.git
//這裏會在當前目錄下生成.repo目錄,裏面會包含完整的repo和清單庫
repo sync //這裏會根據清單庫的xml文件來同步下載xml裏面的project標籤定義的所以項目
這個時候就可以看到test倉庫了,可以在其下面添加各種代碼,然後推送到gerrit服務器,添加審覈人員,審覈通過之後,會自動合併到遠程代碼服務器。