1. 基礎(chǔ)知識鋪墊
2. 準備工作
3. 環(huán)境
服務(wù)器:CentOS 7.5 64位
JDK:1.8.0_232
3.1 安裝JDK
yum install java
如果是自己通過自己下載的tar.gz安裝的JDK,需要手動配置好JAVA_HOME等環(huán)境變量。
安裝好之后通過 java -version命令查看JDK是否安裝成功。
3.2 安裝Git
yum install git
PS:安裝過程中會有詢問提示,輸入y就行
安裝完使用下面命令查看Git版本,注意此處是雙中劃線,之前筆者踩過坑以為是單劃線,一直懷疑自己Git沒有裝好。
git --version
3.3. 安裝Mysql
4. Gerrit安裝

下載文件為gerrit-3.1.2.war
運行war包
java -jar gerrit-3.1.2.war init -d review_site
接下來就要小心了,安裝的時候選擇項很多,空白項回車就行
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
[2020-01-07 16:53:32,854] [main] INFO com.google.gerrit.server.config.GerritServerConfigProvider : No /usr/local/program/gerrit/review_site/etc/gerrit.config; assuming defaults
*** Gerrit Code Review 3.1.2
***
Create '/usr/local/program/gerrit/review_site' [Y/n]? y
*** Git Repositories
***
Location of Git repositories [git]: /home/gerrit/gerrit_repo
*** Index
***
Type [lucene]:
*** User Authentication
***
Authentication method [openid/?]: http
Get username from custom HTTP header [y/N]? n
SSO logout URL :
Enable signed push support [y/N]? n
*** Review Labels
***
Install Verified label [y/N]? n
*** Email Delivery
***
SMTP server hostname [localhost]: smtp.163.com
SMTP server port [(default)]: 25
SMTP encryption [none/?]:
SMTP username [root]: li525917388@163.com
li525917388@163.com's password :
confirm password :
*** Container Process
***
Run as [root]:
Java runtime [/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.232.b09-0.el7_7.x86_64/jre]:
Copy gerrit-3.1.2.war to review_site/bin/gerrit.war [Y/n]? y
Copying gerrit-3.1.2.war to review_site/bin/gerrit.war
*** SSH Daemon
***
Listen on address [*]:
Listen on port [29418]:
Generating SSH host key ... rsa... ed25519... ecdsa 256... ecdsa 384... ecdsa 521... done
*** HTTP Daemon
***
Behind reverse proxy [y/N]? y
Proxy uses SSL (https://) [y/N]? n
Subdirectory on proxy server [/]:
Listen on address [*]: 172.0.0.1
Listen on port [8081]:
Canonical URL [http://172.0.0.1/]: http://localhost:8081
*** Cache
***
*** Plugins
***
Installing plugins.
Install plugin codemirror-editor version v3.1.2 [y/N]? y
Installed codemirror-editor v3.1.2
Install plugin commit-message-length-validator version v3.1.2 [y/N]? y
Installed commit-message-length-validator v3.1.2
Install plugin delete-project version v3.1.2 [y/N]? y
Installed delete-project v3.1.2
Install plugin download-commands version v3.1.2 [y/N]? y
Installed download-commands v3.1.2
Install plugin gitiles version v3.1.2 [y/N]? y
Installed gitiles v3.1.2
Install plugin hooks version v3.1.2 [y/N]? y
Installed hooks v3.1.2
Install plugin plugin-manager version v3.1.2 [y/N]? y
Installed plugin-manager v3.1.2
Install plugin replication version v3.1.2 [y/N]? y
Installed replication v3.1.2
Install plugin reviewnotes version v3.1.2 [y/N]? y
Installed reviewnotes v3.1.2
Install plugin singleusergroup version v3.1.2 [y/N]? y
Installed singleusergroup v3.1.2
Install plugin webhooks version v3.1.2 [y/N]? y
Installed webhooks v3.1.2
Initializing plugins.
Initialized /usr/local/program/gerrit/review_site
Reindexing projects: 100% (2/2) with: reindex --site-path review_site --threads 1 --index projects
Reindexed 2 documents in projects index in 0.5s (4.1/s)
5. 安裝Nginx
這里不過多贅述,大家可以自行百度搜索,一大把,筆者推薦一個傻瓜式詳細Nginx安裝教程,沒有彎路,全程復制粘貼命令就行,地址如下:
https://www.runoob.com/linux/nginx-install-setup.html
安裝完成之后,修改Nginx安裝目錄:
vim /usr/local/webserver/nginx/conf/nginx.conf
內(nèi)容如下:
server {
listen *:8080;
server_name localhost;
allow all;
deny all;
auth_basic "Welcomme to Gerrit Code Review Site!";
auth_basic_user_file /usr/local/webserver/nginx/gerrit/htpasswd.conf;
location / {
proxy_pass http://localhost:8081;
}
}
6. 安裝Apache
yum install httpd
在nginx目錄下新建一個目錄,后續(xù)用來存放gerrit的初始管理員密碼文件
mkdir /usr/local/webserver/nginx/gerrit
然后使用htpasswd 命令。
htpasswd -c /usr/local/webserver/nginx/gerrit/htpasswd.conf admin
這個時候會提示你輸入密碼,然后輸入你自己設(shè)置的管理員密碼即可,如下
[root@VM_0_3_centos gerrit]# htpasswd -c /usr/local/webserver/nginx/gerrit/htpasswd.conf admin
New password:
Re-type new password:
Adding password for user admin
[root@VM_0_3_centos gerrit]#
此時會生成一個 gerrit/htpasswd.conf 密碼文件,很多朋友在執(zhí)行上述命令的時候可能會出現(xiàn)如下問題,主要是因為我們沒有安裝Apache,解決這個問題就是把Apache裝好。
-bash: htpasswd: command not found
7. 啟動
7.1. 重啟Nginx
由于我們修改了nginx配置,所以需要重新加載一下配置文件
/usr/local/webserver/nginx/sbin/nginx -s reload
然后重新啟動Nginx
/usr/local/webserver/nginx/sbin/nginx -s reopen
7.2 啟動 Gerrit
cd /usr/local/program/gerrit/review_site/bin/
./gerrit.sh start
這里可能會有小伙伴們出現(xiàn)啟動失敗的情況,修改一下gerrit的配置文件,把listenUrl 換成localhost,詳情去參考文章的后面章節(jié)的踩坑合集。
啟動成功之后,在瀏覽器輸入:http://你服務(wù)器的ip:8080,成功進入gerrit頁面,此時會彈框提示輸入賬號密碼,輸入之前我們通過htpasswd 命令創(chuàng)建的admin賬號和密碼登錄即可。

在這里,可能會有一部分新手小菜用的是云服務(wù)器,如阿里云、騰訊云,出現(xiàn)沒有正常跳轉(zhuǎn)到Gerrit頁面,此時需要檢查你的服務(wù)器是否開放了相應(yīng)的端口。
踩坑分析
坑1
啟動gerrit的時候,一直報錯如下錯
[root@VM_0_3_centos review_site]# ./bin/gerrit.sh restart
Stopping Gerrit Code Review: OK
Starting Gerrit Code Review: FAILED
查看日志發(fā)現(xiàn)
cat /usr/local/program/gerrit/review_site/logs/error_log
[2020-01-08 13:48:41,635] [main] INFO org.eclipse.jetty.server.handler.ContextHandler : Started o.e.j.s.ServletContextHandler@757f47f0{/,null,AVAILABLE}
[2020-01-08 13:48:41,637] [main] ERROR com.google.gerrit.pgm.Daemon : Unable to start daemon
java.lang.IllegalStateException: Cannot start HTTP daemon
at com.google.gerrit.pgm.http.jetty.JettyServer$Lifecycle.start(JettyServer.java:103)
at com.google.gerrit.lifecycle.LifecycleManager.start(LifecycleManager.java:95)
at com.google.gerrit.pgm.Daemon.start(Daemon.java:349)
at com.google.gerrit.pgm.Daemon.run(Daemon.java:255)
at com.google.gerrit.pgm.util.AbstractProgram.main(AbstractProgram.java:61)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.google.gerrit.launcher.GerritLauncher.invokeProgram(GerritLauncher.java:224)
at com.google.gerrit.launcher.GerritLauncher.mainImpl(GerritLauncher.java:120)
at com.google.gerrit.launcher.GerritLauncher.main(GerritLauncher.java:65)
at Main.main(Main.java:28)
Caused by: java.io.IOException: Failed to bind to /172.0.0.1:8081
at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:346)
at org.eclipse.jetty.server.ServerConnector.open(ServerConnector.java:308)
at org.eclipse.jetty.server.AbstractNetworkConnector.doStart(AbstractNetworkConnector.java:80)
at org.eclipse.jetty.server.ServerConnector.doStart(ServerConnector.java:236)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at org.eclipse.jetty.server.Server.doStart(Server.java:396)
at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:68)
at com.google.gerrit.pgm.http.jetty.JettyServer$Lifecycle.start(JettyServer.java:89)
... 12 more
Caused by: java.net.BindException: Cannot assign requested address
at sun.nio.ch.Net.bind0(Native Method)
at sun.nio.ch.Net.bind(Net.java:433)
at sun.nio.ch.Net.bind(Net.java:425)
at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
at org.eclipse.jetty.server.ServerConnector.openAcceptChannel(ServerConnector.java:342)
... 19 more
自己網(wǎng)上也搜了一下原因,大致說法有兩個 gerrit_site 目錄權(quán)限的問題,或者因為安裝的 gerrit的是時候有一項 type = LUCENE; 然后系統(tǒng)缺少LUCENE導致的,但是筆者都試了一遍不行。經(jīng)過我不斷的嘗試,發(fā)現(xiàn)后來改了一個地方就好了。
vim /usr/local/program/gerrit/review_site/etc/gerrit.config
然后把 listenUrl 中的172.0.0.1換成localhost就好了
[httpd]
listenUrl = proxy-http://localhost:8081/
具體啥原因,希望大佬們來評論解析一下,畢竟筆者自己也是一只菜鳥。