在滴滴云 DC2 上搭建 Gerrit 代码审查工具

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 工具,希望能够帮助到有此需求的项目团队。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值