這個問題折騰了很久,前期后后大概一個月吧,終於搞定了,查了很多資料,有的不完整,有的完全就不能用,有的沒說完整,所以一定要記錄下來,我的心血啊。
由於公司在用的gerrit的是正式環境中的,大家都在使用,並且這又是個沒接觸過的新的配置,所以,擔心在正式服務器上調試影響大家工作,所以只能在其他機器上搭建一套完整的系統來調試,主要是搭建gerrit平台,網上很多都是apache和mysql之類的,搭建下來配置來配置去都有問題,這里給大家推薦一個“gerrit + apache + nginx”,參考:https://blog.csdn.net/peterxiaoq/article/details/73330314
系統是centos的系統。
准備工作:
(1)首先安裝jdk,這個就不多說了
(2)安裝apache:yum install httpd
(3)安裝nginx: 參考https://blog.csdn.net/zql3315/article/details/54924689 (備注:執行1,2就行了)
說明:你可能會想,為啥安裝了nginx了還要安裝apache,博客了很清楚的說明了原因,此外這里主要用在執行創建gerrit用戶的時候。
接下來就開始安裝gerrit了,參考博客就行,我把其中重要的部分撿了出來,
1.創建gerrit專有用戶
adduser gerrit
su gerrit
2.建好用戶以后,我們可以把之前下載好的gerrit安裝包(gerrit-2.13.4.war)拷貝到 /home/gerrit/
目錄下,一會方便gerrit用戶來安裝
在gerrit用戶的目錄(/home/gerrit/)下面,執行命令:
java -jar gerrit-2.13.4.war init -d ~/gerrit_site
我們安裝的時候,可以只在 Authentication method
時輸入 http
,以及安裝插件時輸入“y”,(默認插件是不安裝的),其他全部回車用默認值,如下這里:
(1)Authentication method [OPENID/?]: http
(2)Installing plugins.
Install plugin download-commands version v2.11 [y/N]?
Install plugin reviewnotes version v2.11 [y/N]? Install plugin singleusergroup version v2.11 [y/N]? Install plugin replication version v2.11 [y/N]? Install plugin commit-message-length-validator version v2.11 [y/N]?
因為其他配置我們待會可以通過 etc/gerrit.config
文件進行修改。
還需要修改listenUrl =http://*:8080/,在http前面加"proxy- "
到此我的gerrit.config文件內容如下(重點部分如紅色標記):
[gerrit]
basePath = git
canonicalWebUrl = http://192.168.8.204:8080/
[database]
type = h2
database = /home/gerrit/gerrit_site/db/ReviewDB
[index]
type = LUCENE
[auth]
type = HTTP
[receive]
enableSignedPush = false
[sendemail]
smtpServer = localhost
[container]
user = gerrit
javaHome = /usr/java/jdk1.8.0_101/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8080/
[cache]
directory = cache
3.nigix配置:
你的nginx應該是用root賬戶安裝的,否則可能出現權限問題。我們需要從之前的gerrit用戶退出來,然后執行下面兩條命令:
cd /etc/nginx/conf.d ; touch gerrit.conf
然后 vim gerrit.conf,輸入如下內容:
server {
listen *:81;
server_name 192.168.8.204; (根據自己的實際情況,輸入的是gerrit主機ip)
allow all;
deny all;
auth_basic "Welcomme to Gerrit Code Review Site!";
auth_basic_user_file /home/gerrit/gerrit.password;
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
然后重啟nginx:
service nginx restart
4.登陸認證文件
上面的gerrit.conf文件中,我們看到了:auth_basic_user_file /home/gerrit/gerrit.password,這里我們需要用apach的 htpasswd
工具來新建這個文件,這也是為什么我們雖然不用到apache的反向代理,仍然需要apache的原因。
htpasswd -c /home/gerrit/gerrit.password admin
然后輸入密碼就可以了,這個密碼會被加密(一般情況下,我更偏向於用戶名和密碼設置成一樣的,方便記憶,比如我的用戶名密碼都是admin)
-c表示create,如果我們想新建別的用戶,或者修改某個用戶的密碼,只需要把 -c
改成 -m
就好了,如果還是用 -c
並且路徑不變的話,就會覆蓋掉原來的文件。
注意 :
如果你是在root用戶下輸入上面的命令 創建了 gerrit.password
文件到 /home/gerrit/
目錄中,你會發現在登錄的時候永遠登錄不成功,永遠會得到服務器500的錯誤頁面。原因是 /homt/gerrit/
文件夾的權限問題。
我們知道, /home/gerrit/
是我們之前新建的gerrit用戶的,那么這個文件夾的權限是700,也就是只允許gerrit用戶訪問,其他組的用戶是訪問不了的,雖然這個文件的權限擁有root用戶的所有權限,但是因為它放在700權限的文件夾下面,所以同樣其他用戶是訪問不到的
這個問題之前糾纏了我好久,通過nginx的日志可以清楚的看到訪問拒絕的錯誤。
所以,我們需要通過下面的命令,來改變gerrit目錄的權限
chmod 755 /home/gerrit
這樣,當前目錄權限就變成了 drwxr-xr-x
,也就是其他組的用戶也擁有了讀取和執行的權利。
5.重啟gerrit服務
如上,我的gerrit的安裝路徑是/home/gerrit/gerrit_site,進入到這里目錄,然后進入到里面的bin目錄,我們看到一個gerrit.sh的文件,執行命令:
sh gerrit.sh restart
6.登陸網頁
在瀏覽器上輸入http://192.168.8.204:81即可,然后輸入剛才步驟4里的用戶名密碼即可。然后回引導你做基本的設置,填寫fullname 和'SSH Public Keys',這兩個都很簡答,就不細說了,ssh public keys是為了能下載代碼。創建一個新的工程test,你就可以在本地下載代碼了(ssh public keys和電腦是強相關的,如果你要在主機A上下載,就要把主機A的public key放上去,如果要在主機B上下,就要把主機B的public key放上去,如果主機重裝系統了,你必須重新生成public key放上去,復雜不能下載;我的生成命令:ssh-keygen -t rsa -C anl@hpplay.cn;cat ~/.ssh/id_rsa.pub (public key還有其他生成方式,根據自己的情況可以參考其他人的))
7.commit-msg關聯jira單號
查了很多,關於這方面的資料很少,並且有的說要裝插件,可是我還是不行,其實簡單的改下gerrit.config的配置就可以了,如上,我的gerrit路徑是/home/gerrit/gerrit_site,修改這個目錄下的etc/gerrit.config,添加如下內容:
[commentlink "jira"]
match = ([A-Z]+-[0-9]+)
link = http://你的jira_url/browse/$1
其中link中需要填寫你的jira的url,比如我的是“link = http://jira.hpplay.cn:6060/browse/$1 ”
你可能會問,“$1”是什么,要怎么傳入,他怎么識別提交的commit message的哪些是單號,至少要有個什么標志之類的,怎么觸發這個配置生效呢,開始的時候,我也一直在思考這些問題,也一直想不明白,然后就先放一下(后面想通了,這個$1對應的就是math匹配到的字段,格式是“大寫字母-數字”),重啟了gerrit服務(sh /home/gerrit/gerrit_site/bin/gerrit.sh restart ), 並提交了一次代碼,刷新界面或者重新登陸,commit message中包含了我的jira單號,結果達到效果了,如下:
看,變成藍色的超鏈接了,點擊就可以打開jira上這個單號的詳細內容,如下:
到此,gerrit上的commit message中關聯jira單號算是打通。這樣做的好處,是方便代碼review的時候能方便看到具體解決了什么問題。
如果你在參考本博客配置的過程中有什么問題,歡迎留言。
其他備注:
(1)yum install -y gitweb 安裝gitweb 個人覺得沒什么用
(2)ssh -p 29418 gerrit@192.168.8.204 gerrit plugin ls 查看已經安裝的插件
(3)fatal: remote installation is disabled 要開啟,配置如下:
[plugins]
allowRemoteAdmin = true
(4)ssh -p 29418 admin@192.168.8.204 gerrit plugin ls報錯Permission denied (publickey):
參考:https://blog.csdn.net/pengjin1985/article/details/7789909
(5)插件安裝:
參考:http://192.168.8.204:8080/Documentation/cmd-plugin-install.html
ssh -p 29418 admin@192.158.8.204 gerrit plugin install -n download-commands -<download-commands.jar
ssh -p 29418 admin@192.158.8.204 gerrit plugin install -n download-commands.jar -<./tools/download-commands.jar
command 注意點備份:
su gerrit
java -jar gerrit-2.12.4.war init -d ~/gerrit_site
驗證類型一定要選http
最后的gerrit插件直接會出默認是不安裝的,所以如果要安裝要選y才會安裝
ssh -p 29418 admin@192.168.8.204 gerrit plugin ls
vim gerrit_site/etc/gerrit.config
listenUrl = proxy-http://*:8080/
[plugins]
allowRemoteAdmin = true
sh gerrit_site/bin/gerrit.sh start
exit
如果是好久沒用機器了,記得先啟動nginx,然后再啟動gerrit: service nginx restart;sh gerrit_site/bin/gerrit.sh start
http://192.168.8.204:81
admin admin
cat ~/.ssh/id_rsa.pub
systemctl status nginx
systemctl start nginx #啟動
systemctl stop nginx #停止
systemctl restart nginx #重啟
systemctl status nginx #查看運行狀態
ssh -p 29418 admin@192.168.8.204 gerrit plugin install -n download-commands.jar /home/gerrit/tools/download-commands.jar
mysql -u root -p123456
gerrit新用戶權限開通命令:
htpasswd -b /home/gerrit/gerrit.password username password
gerrit搭建參考:
https://blog.csdn.net/zql3315/article/details/54924689
https://blog.csdn.net/peterxiaoq/article/details/73330314