心辰·Dev

搭建 Gerrit 代码评审服务器

最近入职新公司实习,随着组内成员的增加,版本控制和代码审核等团队协作方面的问题已经不是公司原有 SVN 系统所能完美解决的,于是我和小伙伴就琢磨着搭建了 GitWeb + Gerrit 服务。下面分享下搭建 Gerrit-2.11 的全过程。

前期准备

Git

1
2
$ git --version
git version 2.4.9 (Apple Git-60)

Java 环境

1
2
3
4
$ java -showversion
java version "1.8.0_60"
Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)

Apache 配置

因为团队在 Gerrit 使用上选择了 HTTP 的认证方式,需要 Apache 进行反向代理。如果系统默认安装的 Apache 已经包括了反向代理的模块,不用重新安装。在路径/private/etc/apache2找到httpd.conf文件打开并在末尾添加如下设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Listen 80
<VirtualHost *:80>
ServerName localhost
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

<Location "/login/">
AuthType Basic
AuthName "Gerrit Code Review"
Require valid-user
#下面路径保存默认登陆密码
AuthUserFile /private/etc/apache2/passwd
</Location>

ProxyPass / http://*:8080/
</VirtualHost>

设置修改后保存并重启 Apache 服务:

1
$ sudo /usr/sbin/apachectl restart

安装 Gerrit

到 Google 官方下载 Gerrit 安装的 war 包,终端切换到安装包所在路径并执行如下命令:

1
$ java -jar gerrit-2.11.war init -d review_site

该命令将在所在路径下创建review_site文件夹,安装 Gerrit 。进入交互式安装过程后一路回车使用默认设置即可,需要注意我们这里使用了 HTTP 认证方式,并启动了反向代理。安装后可在./review_site/etc路径找到gerrit.config文件,可以在这里修改自定义配置。最终该配置文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[gerrit]
basePath = git
canonicalWebUrl = http://172.16.40.221:80/
[database]
type = h2
database = db/ReviewDB
[index]
type = LUCENE
[auth]
type = HTTP
[sendemail]
smtpServer = localhost
[container]
user = bx_1512
javaHome = /Library/Java/JavaVirtualMachines/jdk1.8.0_60.jdk/Contents/Home/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8080/
[cache]
directory = cache

配置管理员登陆密码

使用 HTTP 认证方式需要提前指定一个 admin 用户用于登陆,该信息最好保存到 Apache 根目录下,如果保存到其他目录,在启动 Gerrit 服务时可能会引发服务器访问权限的错误。
先切换到上文 Apache 配置中认证用户文件保存路径/private/etc/apache2,运行如下命令生成认证文件:

1
2
$ touch passwd
$ htpasswd -m passwd admin

在启动 Gerrit 服务后,用户通过 Web 登陆 Gerrit 服务器时,会弹出身份验证的提示框。输入正确的用户名(admin)和密码即可进入 Gerrit 主页面。

安装 GitWeb

如果想要随时随地通过 Web 浏览器查看提交到 Gerrit 的代码,需要安装 GitWeb 来建立一个基于网页的简易查看器。可以先在某个 Git 工程目录下运行:

1
$ git instaweb --httpd = webrick

查看 GitWeb 的效果。但如果想要持续地运行这个页面,需要通过 Web 服务器来设置 CGI 脚本。
手动安装 GitWeb 要先获得 Git 的源代码,并生成自定义的 CGI 脚本:

1
2
3
4
$ git clone git://git.kernel.org/pub/scm/git/git.git
$ cd git/
$ make GITWEB_PROJECTROOT="/opt/git" prefix=/usr gitweb
$ sudo cp -Rf gitweb /var/www/

现在,在上文提到的 Gerrit 配置文件打开,添加如下内容:

1
2
[gitweb]
cgi = /var/www/gitweb.cgi

再重启 Gerrit 服务即可在项目列表页面看到对应项目的 GitWeb 链接。