[toc]
Gerrit,一种开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件开发者,可以相互审阅彼此修改后的代码,决定是否能够提交,回退或是继续修改。它使用版本控制系统Git作为底层,已经被广泛的应用到了各大公司的代码 review中。对于不太习惯使用git diff/difftool来查看两个相邻提交差异的同学来讲,gerrit也是一个不错的选择,当然,这样显然是大材小用了。不管如何,gerrit已经像git一样成为程序员必备的技能了。对于想学习而又没有gerrit环境的同学,可以参考本文在ubuntu电脑上快速搭建一个。
本文将基于以下环境使用nginx实现反向代理来搭建一个gerrit服务器:
- ubuntu版本: 16.04
- kernel版本: Linux version 4.4.0-137-generic
- 服务器IP地址:104.238.167.38
注意:软件版本的不同有可能会导致即使相同的配置,最终不能正常工作。如果对相关软件不太熟悉的,请务必选用与本文一致的软件版本。
一、下载安装必要的软件
1.1 安装java环境
gerrit是一个java软件,因此需要安装JDK,这里我们使用openjdk-8。安装命令如下:
sudo add-apt-repository ppa:openjdk-r/ppa && sudo apt-get update && sudo apt-get install openjdk-8-jdk -y
1.2 安装nginx
Nginx是一款轻量级的web服务器软件,它将提供供我们访问的gerrit服务器。安装命令如下:
sudo apt-get install nginx -y
安装成功后在你的浏览器中输入服务器的IP地址,如果看到下面的显示,则表明Nginx已正确安装。
1.3 安装密码管理器htpasswd
htpasswd
用于建立和更新登陆gerrit服务器的存储用户名/密码的文本文件。它是apache工具集下的一个工具,因此我们需要安装apache-utils。安装命令如下:
sudo apt-get install apache2-utils -y
1.4 下载gerrit安装包
安装包可以直接点击 gerrit release note页面下载 ,或者直接使用下面命令下载:
wget https://gerrit-releases.storage.googleapis.com/gerrit-2.15.4.war
二、配置gerrit
到目前为止安装gerrit依赖的所有软件已经准备完毕,下面我们来开始安装。在安装前,需要说明一点的是:安装gerrit最好在服务器上新建一个user,这个账户只用来安装、配置并启动gerrit服务,因此,不需要赋给它更多的权限(比如root权限),而修改nginx的配置文件需要使用具有root权限的账户。因此,下文中涉及到修改gerrit配置文件,请切换回gerrit专用账户;其他操作(比如修改nginx配置文件),请使用具有root权限的账户。
2.1 创建gerrit专用账户
使用下面的命令创建一个gerrit专用账户,账户名字就叫做gerrit
:
sudo adduser gerrit
su gerrit
cd ~
2.3 安装gerrit
接着使用下面的命令来安装gerrit(注意,这里应该使用gerrit专用账户):
java -jar ./gerrit-2.15.4.war init -d ~/gerrit_site
安装过程很简单,只需要使用默认的配置,一路回车下去就行了,只是在Authentication method
方式时输入http
。
2.4 修改gerrit配置文件
安装的时候我们基本选择了默认配置,但是其中有两项是需要修改的。gerrit的配置文件具体路径为:/home/gerrit/gerrit_site/etc/gerrit.config
完整的文件如下,我们需要只需要修改第4行和第28行即可:
1 [gerrit]
2 basePath = git
3 serverId = 2d5e17e4-a507-424d-b5cd-f63d8e08e6fd
4 canonicalWebUrl = http://104.238.167.38:8085/
5 [database]
6 type = h2
7 database = /home/gerrit/gerrit_site/db/ReviewDB
8 [noteDb "changes"]
9 disableReviewDb = true
10 primaryStorage = note db
11 read = true
12 sequence = true
13 write = true
14 [index]
15 type = LUCENE
16 [auth]
17 type = HTTP
18 [receive]
19 enableSignedPush = false
20 [sendemail]
21 smtpServer = localhost
22 [container]
23 user = gerrit
24 javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
25 [sshd]
26 listenAddress = *:29418
27 [httpd]
28 listenUrl = proxy-http://*:8085/
29 [cache]
30 directory = cache
其中第4行表示要替换成你自己服务器的ip地址(104.238.167.38是我的服务器IP地址),端口号自己选择一个当前未被占用的即可。第28行意思是使用反向代理,端口号要和第4行的设置成一样。
2.5 添加gerrit的nginx配置文件
接下来,需要为nginx添加gerrit的配置文件(注意,这里我们需要切换为拥有root权限的账户)。添加的目录为:/etc/nginx/conf.d
。在其下面新建一个文件命名为gerrit.conf
,然后将下面内容写入该文件,并保存。
server {
listen *:358;
server_name localhost;
allow all;
deny all;
auth_basic "Welcomme to Gerrit Code Review Site!";
auth_basic_user_file /home/gerrit/gerrit_site/etc/gerrit.passwd;
location / {
proxy_pass http://127.0.0.1:8085;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
其中,listen
表示nginx对外监听的端口号,设置成任意一个未被占用的即可(我这里设置成了358
)。proxy_pass
这句里面的端口号应该和gerrit配置文件(即2.4中的gerrit.config
)里设置的一样。
2.6 gerrit用户账号管理
下面我们使用htpasswd
工具来建立和增加可登陆的gerrit账号(注意,这里应该使用gerrit专用账户)。
2.6.1 新建配置文件并添加用户账号
sudo htpasswd -c /home/gerrit/gerrit_site/etc/gerrit.passwd administrator
这里我们在/home/gerrit/gerrit_site/etc/
目录下新建了一个名为gerrit.passwd
的密码配置文件,并添加了一个名为administrator
的用户账号。
2.6.2 增加用户账号
sudo htpasswd -m /home/gerrit/gerrit_site/etc/gerrit.passwd user1
使用-m
参数表示添加一个账户。这里我们在上述密码配置文件中添加了一个名为user1
的用户账号。
2.7 重启服务
2.7.1 重启nginx
使用下列命令重启nginx(注意,这里我们需要切换为拥有root权限的账户):
sudo /etc/init.d/nginx restart
2.7.2 重启gerrit服务
重启gerrit服务(注意,这里应该使用gerrit专用账户):
/home/gerrit/gerrit_site/bin/gerrit.sh restart
然后,打开浏览器访问104.238.167.38:358
(IP地址即为服务器的IP,端口号应为nginx监听的端口号),即可看到gerrit登陆界面:
然后输入账号登陆后,如果显示下面的画面,证明一切配置正常,gerrit就可以正常使用了。
注意,gerrit默认第一次成功登陆的账户为gerrit服务器的管理员账户,它拥有整个gerrit系统的最大权限,包括但不限于新建project,新增group,配置所有用户或者group对project的访问、代码下载、push和submit等权限,所以登陆的时候务必慎重!
三、问题调查
gerrit登陆出错,有各种各样的问题,请试着先从以下思路看看能否解决:
1. 使用2.7.2提供的命令,重启nginx,然后重新gerrit。如果重启失败,查看gerrit启动log,一般位于/home/gerrit/gerrit_site/logs/error_log
。
2. 如果重启成功,但是登陆失败,请查看nginx的log,一般位于:/var/log/nginx
目录下。对于log中的错误,可以自行google解决。
3. 实在不行的话,可以考虑删掉gerrit的安装目录,即/home/gerrit/gerrit_site/
重新安装。