Gerrit是一个基于web的代码评审工具,它基于Git版本控制系统,由Google内部编写用于代码评审管理。Gerrit旨在提供一个轻量级框架,用于在代码入库之前对每个提交进行审阅。Gerrit提供了一个临时区域,将本地提交与远程仓库隔离开,开发人员将更改上传到Gerrit,在它们被审阅通过前并不会直接上传到远程仓库。
要了解Gerrit如何帮助强化开发人员的工作流程,请考虑如下一个典型的项目。该项目有一个中心源存储库作为项目内容的权威副本,例如Git版本控制系统中的远程仓库。开发者从远程仓库中同步数据,或更新数据到远程仓库中;持续集成服务器从远程仓库中获取代码后自动编译验证等。
而Gerrit取代了这个中心源存储库,并添加了一个附加的概念:挂起的变更存储区(a store of pending changes)。
使用gerrit,当开发人员提交变更时,它将被发送到这个挂起的变更存储区,其他开发人员可以在这里审查、讨论和批准变更。在足够多的审查人员批准后,变更才能成为代码库的正式组成部分。
除此存储挂起的变更外,Gerrit还捕获有关每个变更的说明和评论。这些特性允许开发人员在方便的时候再查看变更,或者当不能面对面地讨论变更时可以线上查看。它们还可以帮助创建有关给定变更的对话记录,从而提供变更发生时间和原因的历史记录。
与任何存储库托管解决方案一样,Gerrit具有强大的访问控制模型,这允许我们控制存储库的访问权限。
方案选择Ubuntu+Gerrit+Nginx,Nginx是用作反向代理的服务。
gerrit是一个java软件,因此需要安装JDK。这里我们需要openjdk-8。但是建议都安装一下openjdk-8和openjdk-11,把默认的设置为openjdk-8就好了。安装命令是:
sudo apt-get install openjdk-8-jdk
sudo apt-get install openjdk-11-jdk
这里要注意的是,由于我选的Gerrit安装包是gerrit-3.0.3.war,根据Gerrit的快速安装指导文档,Java需要的环境要求为1.8(openjdk-8),如下图。当然哈,更了解Java的当然知道满足条件的不只是1.8版本,不过我只知道1.8准没错了。
安装命令:
sudo apt-get install git
Nginx是一款轻量级的web服务器软件,它将提供供我们访问的gerrit服务器,反代理服务,较之apache2,配置简单也更为轻量。安装命令如下:
sudo apt-get install nginx
安装成功与否,在浏览器里输入服务器的ip,就能知道了。
这个是用来查看网络状态,来检查我们nginx和gerrit端口设置,如下图
安装命令如下:
sudo apt-get install net-tools
htpasswd用于建立和更新登陆gerrit服务器的存储用户名/密码的文本文件。它是apache工具集下的一个工具,因此我们需要安装apache-utils。安装命令如下:
sudo apt-get install apache2-utils
安装包可以直接在https://www.gerritcodereview.com/releases-readme.html页面下载 ,或者直接使用下面命令下载:
wget https://gerrit-releases.storage.googleapis.com/gerrit-3.0.3.war
到目前为止安装gerrit依赖的所有软件已经准备完毕,下面我们来开始安装Gerrit。在安装gerrit之前,我们需要创建一个Gerrit专用账户。
使用下列命令来创建
sudo adduser gerrit
chmod 755 /home/gerrit
sudo passwd gerrit
接下来对gerrit的配置就需要进入到gerrit账户中去,使用命令:
su – gerrit
将之前下载的gerrit安装包拷贝到gerrit账户。
在安装之前,我们需要在gerrit账户底下新建一个文件夹,用来安装Gerrit,如下:
mkdir gerrit_project
export GERRIT_SITE=/home/gerrit/gerrit_project
使用如下命令进行安装:
java -jar gerrit-3.0.3.war init -d $GERRIT_SITE
安装过程很简单,只需要使用默认的配置,一路回车下去就行了,只是在Authentication method方式时输入HTTP。
安装到最后,Gerrit会启动,也有可能会启动失败,但是没关系,启动失败基本上是配置上出问题了,待会后续篇章会讲启动失败的原因。如果启动成功了,我们使用命令:
netstat –lptn | grep -i gerrit
使用这个命令来查看gerrit的状态,如下图:
Gerrit的配置文件在/home/gerrit/gerrit_project/etc/gerrit.config
目前我的配置文件如下,可以对比着来修改:
[gerrit]
basePath = git
canonicalWebUrl = http://服务器IP:8089/
serverId = f528c6f9-ef77-4ee2-a68b-ad351a4ded5c
[container]
javaOptions="Dflogger.backend_factory=com.google.common.
flogger.backend.log4j.Log4jBackendFactory#getInstance"
javaOptions = "-Dflogger.logging_context=com.google.gerrit.server.
logging.LoggingContext#getInstance"
user = gerrit
javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre
[index]
type = LUCENE
[auth]
type = HTTP
[receive]
enableSignedPush = false
[sendemail]
smtpServer = localhost
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://*:8089/
[cache]
directory = cache
主要修改和检查以下四处地方。
第5行canonicalWebUrl = http://服务器IP:8089/,填写服务器的IP就好,端口的话就随你心意就好了,这里我选用的就是8089。但也要注意,最好不要选择热门的端口比如8080。
第21行javaHome = /usr/lib/jvm/java-8-openjdk-amd64/jre,这一处标红是需要注意和检查的地方,因为这会导致Gerrit启动失败的地方,这个就是默认你安装的Java环境。我这边就是需要java-8-openjdk。
第29行选择HTTP。
第45行listenUrl = proxy-http://*:8089/,这边的端口号要跟第一处的端口号相同。proxy-http代表的意思是使用反向代理。
检查和修改完配置文件,保存后,将Gerrit重启。使用如下命令:
/gerrit_project/bin/gerrit.sh restart
如下图:
这些操作都在Gerrit账户下完成。
使用htpasswd命令来创建,我们先期就创建一个admin账户。后面再根据需要在创建。
sudo htpasswd -m /home/gerrit/gerrit.password admin
sudo chmod 755 gerrit.password
在一开始我们就已经安装好嘞nginx软件,现在我们只需要配置一下然后重启就好了。
这需要我们到root账户下配置,使用exit命令退出Gerrit账户。
那我就开始配置nginx账户了,进入到/etc/nginx/conf.d/目录下,专门建立一个对Gerrit的配置文件,直接vi gerrit.conf。
这个配置文件可以如下所示:
server {
listen *:89;
server_name 服务器IP;
allow all;
deny all;
auth_basic "Welcomme to Gerrit Code Review Site!";
auth_basic_user_file /home/gerrit/gerrit.password;
location / {
proxy_pass http:// 服务器IP:8089;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
上面有几行需要修改和注意的。
第3行listen *:89是我们监听的反向代理的端口,我这使用的是89端(这个你自己设置就好),举个例子解释一下,反向代理就是当你输入的192.168.12.13:89,实际上nginx将这个转到192.168.12.13:8089(也就是我们在最后一处标红的地方设置的proxy_pass http:// 服务器IP:8089)。
第5行server_name填写自己服务器IP就行了。
第15行auth_basic_user_file /home/gerrit/ gerrit.password,我们就是填写我们创建的登入Gerrit的gerrit.password文件的路径,这也要确保正确,不然到最后登录不上Gerrit。
第21行,proxy_pass http:// 服务器IP:8089;这部分我们要保证跟Gerrit的配置文件gerrit.conf文件里的一致。
将nginx软件配置好后需要重启,输入如下命令:
service nginx restart
重启后,使用netstat命令来查看一下端口情况,如下图:
在配置完gerrit和nginx后,一定要打开我们在这两个软件配置文件中使用到的端口,不然会被拒绝访问的。
如果是自己或者公司买了服务器,就使用命令打开防火墙相关的端口,如果是租用的云服务器,就需要在云服务器后台管理界面打开相关端口。
这里就只讲述第一种情况,自己或者公司买了服务器。
使用如下命令来打开:
sudo firewall-cmd --zone=public --permanent --add-port=80/tcp
sudo firewall-cmd --zone=public --permanent --add-port=89/tcp
打开完后需要重载一下:
sudo firewall-cmd –reload
我们可以使用如下命令来检查是否打开了相关端口:
sudo firewall-cmd --list-all
在我们配置完以上所有的东西后,我们浏览器上输入自己服务器的ip地址再加上我们设置的反向代理的端口号时,如192.168.79.44:89,就能看见如下页面了。
出现如下:
Starting Gerrit Code Review:FAILED
检查方向:
Gerrit的配置文件,/home/gerrit/gerrit_project/etc/gerrit.conf
里面可能导致启动失败的地方可能有:
ip设置有问题
Java环境设置有问题
其它,如数据库,不过一路下来都时按照默认配置,出问题的可能性很小。
排查的手段:
输入命令:
./gerrit_project/bin/gerrit.sh run
这命令会看到Gerrit启动时的log,我们看error的log,定位问题。
登陆时出现如下截图时,说明访问的ip拒绝了你的访问。
最大的可能在于,你访问的ip中的端口没有开放。所以需要在访问的服务器中打开nginx设置的反向代理端口以及Gerrit监听的端口。
如果登录时出现如下截图,就说明你的nginx配置文件有问题。
这个时候我们可以cat /var/log/nginx/error.log,来查看出错的地方在哪。
比如,你设置的服务器IP有问题,你的登录验证文件路径有问题,你需要反向代理的Gerrit的ip和端口有问题。