Gerrit 是一个基于 Web 的代码评审工具,它基于 Git版本控制系统。Gerrit 旨在提供一个轻量级框架,用于在代码入库之前对每个提交进行审阅。更改将上传到 Gerrit,但实际上并不成为项目的一部分,直到它们被审阅和接受。
Gerrit 是标准开源过程的一个简单工具,用来支持提交补丁程序,然后由项目成员在应用到代码库之前进行评审。Gerrit 事实上是一个临时区域,在提交的代码成为代码库的一部分之前,团队成员可以对其修改进行检查。
安装步骤
首先,需要在滴滴云上购买一台云主机。
由于安装 Gerrit 需要 JDK8、MySQL 和 Nginx 反向代理,因此在这里可以直接选择一键部署镜像——“Java on CentOS:7.4 集成软件:JDK 1.8.0/Mariadb(Mysql) 5.5.56/Tomcat 7.0.76/Nginx 1.12.2”,该镜像已经为用户默认安装好了 JDK8、MariaDB 等依赖软件,无需用户再花额外的时间和精力去安装。
云主机选择 2核 4G内存 40G磁盘的规格。
现在就可以开始 Gerrit 的搭建了。
建库
Gerrit 默认使用 H2 内嵌数据库,但是在大型项目组中并不推荐,为了方便后期管理和交互,在安装的过程中我们使用 MySQL 数据库。
这里我们需要创建 Gerrit 用户和 ReviewDB 数据库,因此需要以 root 账号登录:
sudo su //切换到root账号。
service mariadb stop //停止mariadb服务
mysqld_safe --skip-grant-table & //跳过授权表启动
mysql -uroot //不用密码登陆
修改 root 账号密码:
use mysql;
update user set password=password('newpassword') where user='root';
exit;
最后,杀掉 MariaDB 进程并重启服务(如果杀不掉则可以直接在滴滴云控制台重启 VM)。
接下来,就可以创建 Gerrit 账号和数据库了:
CREATE USER 'gerrit'@'localhost' IDENTIFIED BY 'secret';
CREATE DATABASE reviewdb DEFAULT CHARACTER SET 'utf8';
GRANT ALL ON reviewdb.* TO 'gerrit'@'localhost';
FLUSH PRIVILEGES;
安装 Gerrit
sudo adduser gerrit
sudo su gerrit //切换到gerrit账号
cd /usr/local/
wget https://gerrit-releases.storage.googleapis.com/gerrit-2.15.5.war
java -jar gerrit-2.15.5.war init -d /usr/local/gerrit
现在进行到 Gerrit 的初始化交互界面,除了 SQL Database 选择 MySQL,其他地方都选择默认的即可。
同时在初始化过程中如果遇到一些需要的包,会提示你进行下载:
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
[2019-02-18 12:58:45,899] [main] INFO com.google.gerrit.server.config.GerritServerConfigProvider : No /home/gerrit/gerrit/etc/gerrit.config; assuming defaults
*** Gerrit Code Review 2.15.5
***
Create '/home/gerrit/gerrit' [Y/n]? y
*** Git Repositories
***
Location of Git repositories [git]: git
*** SQL Database
***
Database server type [h2]: mysql
Gerrit Code Review is not shipped with MySQL Connector/J 5.1.43
** This library is required for your configuration. **
Download and install it now [Y/n]? Y
Downloading https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.43/mysql-connector-java-5.1.43.jar ... OK
Gerrit 在一个本地目录中存储配置文件、服务器 SSH key 和需要管理的 Git 仓库(site_path),这里的 site_path 为 ~/gerrit。
初始化完成之后,可以在 ~/gerrit/etc/gerrit.config 中查看配置文件,如下所示:
[gerrit]
basePath = git
serverId = d2033d5c-7a67-47e0-9c98-22d828728ffc
canonicalWebUrl = http://localhost/
ui = polygerrit
enableGwtUi = true
[database]
type = mysql
hostname = localhost
database = reviewdb
username = gerrit
[noteDb "changes"]
disableReviewDb = true
primaryStorage = note db
read = true
sequence = true
write = true
[index]
type = LUCENE
[auth]
type = OPENID
[receive]
enableSignedPush = false
[sendemail]
smtpServer = localhost
smtpUser = libi
[container]
user = gerrit
javaHome = /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.191.b12-1.el7_6.x86_64/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8081/
[cache]
directory = cache
现在就可以通过浏览器进行登录了 VMIP:8081。
对于 Gerrit 来说,第一个成功登录的用户具有特殊意义,它会直接被赋予管理员权限。
配置 Nginx 反向代理
为了通过更为强大的 Web 服务器来对外提供服务,同时方便 Gerrit Server 的 HTTP 用户认证方式可以正常工作,需要设置Nginx反向代理。
首先更改 Gerrit 配置,使之能够起到代理的效果;另外,使用反向代理后就可以直接使用 Nginx 的 80 端口访问了,需要把 canonicalWebUrl 中的 8080 去掉,Gerrit Server 监听的端口也改为 8081。
Gerrit Server 强制要求使用反向代理,通过反向代理服务器提供的 Authorization 等 HTTP 头来获得用户认证信息。
最后配置 Nginx,修改 Nginx 的配置文件 /etc/nginx/nginx.conf,在它的 HTTP 块中加入如下内容:
server {
listen 80;
server_name localhost;
auth_basic "Welcome to Gerrit Code Review !";
auth_basic_user_file ~/gerrit/review_site/etc/passwd;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
修改之后,让 Nginx 重新加载配置文件,这样就可以直接通过 Nginx 监听的 80 端口访问 Gerrit Server 了。
总结
Gerrit 是一种基于 Web 的代码评审工具,结合 Git 和浏览器,能够显示代码的每一步变化,使项目组代码协作、CodeReview 变得更加容易了。
本文在滴滴云 DC2 一键部署镜像的基础上,快速搭建了 Gerrit 工具,希望能够帮助到有此需求的项目团队。