概述
Gerrit,一種開放源代碼的代碼審查軟件,使用網頁界面。利用網頁瀏覽器,同一個團隊的軟件開發者,可以相互審閱彼此修改后的代碼,決定是否能夠提交,回退或是繼續修改。
應用場景:
- 代碼審核:審核review +1, +2
- 門禁自動化:自動構建,代碼度量,開源代碼掃描等
- 多分支管理:入庫代碼同步到其它分支
- 上庫歷史:根據上庫歷史排查修改點
環境搭建
依賴組件:
- 【ubuntu 18.04 server版本】
- 【gerrit-2.12.2.war】:官網已經更新到了3.4.1版本,但當前版本功能已經足夠 |
git clone https://gitee.com/whilewell/tools-gerrit.git
- 【jre】:1.8版本(jre是java運行環境,jdk是java開發環境)|
sudo apt-get install openjdk-8-jre
- 【postgresql】:數據庫 |
sudo apt-get install postgresql
- 【nginx】:反向代理 |
sudo apt-get install nginx
- 【htpasswd】:http認證方式 |
apt-get install apache2-utils
- 【git】:服務器版本自帶
安裝后的效果圖:
給數據庫增加賬號
postgresql安裝后會默認生成獨立賬號postgres,數據內容進行獨立管理。下面也需要使用postgres賬號創建新賬號
創建賬號:wsk
sudo -u postgres createuser -RDIElPS wsk
創建數據庫:reviewdb
sudo -u postgres createdb -E UTF-8 -O wsk reviewdb
確認數據庫創建結果:
sudo -u postgres psql
gerrit2@wsk:/home$ sudo -u postgres psql
[sudo] password for gerrit2:
psql (10.19 (Ubuntu 10.19-0ubuntu0.18.04.1))
Type "help" for help.
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
postgres | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
reviewdb | wsk | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
template0 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | en_US.UTF-8 | en_US.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(4 rows)
postgres=#\q
gerrit2@wsk:/home$
增加gerrit2賬號
gerrit使用獨立賬號進行管理
sudo adduser gerrit2
su gerrit2
初始化gerrit
下面不是首次初始化log,僅供參考。
gerrit2@wsk:~/gerrit$ java -jar gerrit-2.12.2.war init -d review
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by com.google.inject.internal.cglib.core.$ReflectUtils$2 (file:/home/gerrit2/.gerritcodereview/tmp/gerrit_3113595962757483013_app/guice_library.jar) to method java.lang.ClassLo
ader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain)
WARNING: Please consider reporting this to the maintainers of com.google.inject.internal.cglib.core.$ReflectUtils$2
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
*** Gerrit Code Review 2.12.2
***
*** Git Repositories
***
Location of Git repositories [/home/gerrit2/git]: /home/gerrit2/git
*** SQL Database
***
Database server type [postgresql]: postgresql
Server hostname [localhost]:
Server port [(postgresql default)]:
Database name [wsk]: reviewdb
Database username [wsk]: wsk
Change wsk's password [y/N]? y
wsk's password :
confirm password :
*** Index
***
Type [LUCENE/?]:
The index must be rebuilt before starting Gerrit:
java -jar gerrit.war reindex -d site_path
*** User Authentication
***
Authentication method [HTTP/?]: http
Get username from custom HTTP header [y/N]?
SSO logout URL :
Enable signed push support [y/N]?
*** Review Labels
***
Install Verified label [y/N]?
*** Email Delivery
***
SMTP server hostname [localhost]:
SMTP server port [(default)]:
SMTP encryption [NONE/?]:
SMTP username :
*** Container Process
***
Run as [gerrit2]:
Java runtime [/usr/lib/jvm/java-8-openjdk-amd64/jre]:
Upgrade review/bin/gerrit.war [Y/n]?
Copying gerrit-2.12.2.war to review/bin/gerrit.war
*** SSH Daemon
***
Listen on address [*]:
Listen on port [29418]:
*** HTTP Daemon
***
Behind reverse proxy [Y/n]? y
Proxy uses SSL (https://) [y/N]?
Subdirectory on proxy server [/]:
Listen on address [127.0.0.1]:
Listen on port [8081]:
Canonical URL [http://127.0.0.1/]:
*** Plugins
***
Installing plugins.
Install plugin singleusergroup version v2.12.2 [Y/n]? y
version v2.12.2 is already installed, overwrite it [Y/n]? y
Install plugin commit-message-length-validator version v2.12.2 [Y/n]? y
version v2.12.2 is already installed, overwrite it [Y/n]? y
Install plugin reviewnotes version v2.12.2 [Y/n]? y
version v2.12.2 is already installed, overwrite it [Y/n]? y
Install plugin replication version v2.12.2 [Y/n]? y
version v2.12.2 is already installed, overwrite it [Y/n]? y
Install plugin download-commands version v2.12.2 [Y/n]? y
version v2.12.2 is already installed, overwrite it [Y/n]? y
Initializing plugins.
No plugins found with init steps.
Initialized /home/gerrit2/gerrit/review
上面的過程會生成gerrit配置文件review/etc/gerrit.config
,下面關鍵參數需要與系統保持一致。
gerrit2@wsk:~/gerrit$ cat review/etc/gerrit.config
[gerrit]
basePath = /home/gerrit2/git # 說明:git工程根目錄
canonicalWebUrl = http://127.0.0.1/
[database]
type = postgresql
hostname = localhost
database = reviewdb # 說明:數據庫
username = wsk # 說明:數據庫賬號
[index]
type = LUCENE
[auth]
type = HTTP # 說明:認證方式,與nginx配置有關聯
[receive]
enableSignedPush = false
[container]
user = gerrit2
javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
[sshd]
listenAddress = localhost:29418
[httpd]
listenUrl = proxy-http://127.0.0.1:8081/
[cache]
directory = cache
配置nginx反向代理
sudo vi /etc/nginx/site-enable/default
server {
listen 8888;
server_name localhost;
location / {
auth_basic "Gerrit2 Code Review";
auth_basic_user_file /home/gerrit2/gerrit/htpasswd.conf;
proxy_pass http://127.0.0.1:8081;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
location /login/ {
proxy_pass http://127.0.0.1:8081;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
注意點:
listen 8888
: nginx server 監聽的端口,盡量不要使用知名端口80,我這里面換成了8888端口/home/gerrit2/gerrit/htpasswd.conf
: 這個是http認證使用的文件,后面需要配置
增加賬號和密碼
只有第一次增加賬號和密碼的時候需要攜帶-c參數,后續新增賬號時,可以安裝其help提示進行增加
htpasswd -c /home/gerrit2/gerrit/htpasswd.conf wsk wsk
配置並啟動gerrit
sudo vi /etc/default/gerritcodereview
GERRIT_SITE=/home/gerrit2/gerrit/review
重連終端, 然后啟動gerrit
${GERRIT_SITE}/bin/gerrit.sh start
啟動成功后,會顯示下面LOG
Starting Gerrit Code Review: OK
注:自己的幾次啟動失敗都是由於java版本不匹配,如果出現失敗問題,就需要考慮是否java版本問題
登錄gerrit
輸入下面鏈接,就可以登錄到gerrit頁面。
192.168.83.128
:是主機地址8888
: 是nginx監聽的地址,不是gerrit配置的8081(這就是反向代理的作用)。
http://192.168.83.128:8888/
參考
https://www.shangmayuan.com/a/0b4f8fb2012e447b89131b51.html | 強烈推薦
https://linjinze999.github.io/gerrit/#軟件介紹