Gerrit部署(Ubuntu+Gerrit+Nginx)

1 Gerrit简介

Gerrit是一个基于web的代码评审工具,它基于Git版本控制系统,由Google内部编写用于代码评审管理。Gerrit旨在提供一个轻量级框架,用于在代码入库之前对每个提交进行审阅。Gerrit提供了一个临时区域,将本地提交与远程仓库隔离开,开发人员将‎‎更改上传到Gerrit,在它们被审阅通过前并不会直接上传到远程仓库。

要了解Gerrit如何帮助强化开发人员的工作流程,请考虑如下一个典型的项目。该项目有一个中心源存储库作为项目内容的权威副本,例如Git版本控制系统中的远程仓库。开发者从远程仓库中同步数据,或更新数据到远程仓库中;持续集成服务器从远程仓库中获取代码后自动编译验证等。

Gerrit部署(Ubuntu+Gerrit+Nginx)_第1张图片

而Gerrit取代了这个中心源存储库,并添加了一个附加的概念:挂起的变更存储区(a store of pending changes)。

Gerrit部署(Ubuntu+Gerrit+Nginx)_第2张图片

使用gerrit,当开发人员提交变更时,它将被发送到这个挂起的变更存储区,其他开发人员可以在这里审查、讨论和批准变更。在足够多的审查人员批准后,变更才能成为代码库的正式组成部分。

除此存储挂起的变更外,Gerrit还捕获有关每个变更的说明和评论。这些特性允许开发人员在方便的时候再查看变更,或者当不能面对面地讨论变更时可以线上查看。它们还可以帮助创建有关给定变更的对话记录,从而提供变更发生时间和原因的历史记录。

与任何存储库托管解决方案一样,Gerrit具有强大的访问控制模型,这允许我们控制存储库的访问权限。

2 Gerrit部署

2.1Gerrit部署方案

方案选择Ubuntu+Gerrit+Nginx,Nginx是用作反向代理的服务。

2.2必要的软件安装

2.2.1 安装java环境

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准没错了。

Gerrit部署(Ubuntu+Gerrit+Nginx)_第3张图片

2.2.2 Git安装

安装命令:

sudo apt-get install git
2.2.3 nginx安装

Nginx是一款轻量级的web服务器软件,它将提供供我们访问的gerrit服务器,反代理服务,较之apache2,配置简单也更为轻量。安装命令如下:

sudo apt-get install nginx

安装成功与否,在浏览器里输入服务器的ip,就能知道了。

2.2.4 netstat安装

这个是用来查看网络状态,来检查我们nginx和gerrit端口设置,如下图

Gerrit部署(Ubuntu+Gerrit+Nginx)_第4张图片

安装命令如下:

sudo apt-get install net-tools
2.2.5 安装密码管理器htpasswd

htpasswd用于建立和更新登陆gerrit服务器的存储用户名/密码的文本文件。它是apache工具集下的一个工具,因此我们需要安装apache-utils。安装命令如下:

sudo apt-get install apache2-utils 

2.2.6 Gerrit安装包下载

安装包可以直接在https://www.gerritcodereview.com/releases-readme.html页面下载 ,或者直接使用下面命令下载:

wget https://gerrit-releases.storage.googleapis.com/gerrit-3.0.3.war

2.3 配置Gerrit

到目前为止安装gerrit依赖的所有软件已经准备完毕,下面我们来开始安装Gerrit。在安装gerrit之前,我们需要创建一个Gerrit专用账户。

2.3.1 创建Gerrit账户

使用下列命令来创建

sudo adduser gerrit

chmod 755 /home/gerrit

sudo passwd gerrit


接下来对gerrit的配置就需要进入到gerrit账户中去,使用命令:

su – gerrit
2.3.2 安装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

2.3.3 查看状态

安装到最后,Gerrit会启动,也有可能会启动失败,但是没关系,启动失败基本上是配置上出问题了,待会后续篇章会讲启动失败的原因。如果启动成功了,我们使用命令:

netstat –lptn | grep -i gerrit

使用这个命令来查看gerrit的状态,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FlDeGar5-1645065202001)(file:///C:/Users/zhaixing/AppData/Local/Temp/msohtmlclip1/01/clip_image010.jpg)]

2.3.4 修改配置文件

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代表的意思是使用反向代理。

2.3.5 重启Gerrit

检查和修改完配置文件,保存后,将Gerrit重启。使用如下命令:

/gerrit_project/bin/gerrit.sh restart

如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PDBDzFek-1645065202002)(file:///C:/Users/zhaixing/AppData/Local/Temp/msohtmlclip1/01/clip_image012.jpg)]

这些操作都在Gerrit账户下完成。

2.4 创建Gerrit登录账户

使用htpasswd命令来创建,我们先期就创建一个admin账户。后面再根据需要在创建。

sudo htpasswd -m /home/gerrit/gerrit.password admin

sudo chmod 755 gerrit.password

2.5 配置Nginx

在一开始我们就已经安装好嘞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命令来查看一下端口情况,如下图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1eCpQ1AQ-1645065202004)(file:///C:/Users/zhaixing/AppData/Local/Temp/msohtmlclip1/01/clip_image014.jpg)]

2.6 打开服务器的端口

在配置完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

2.7 登录

在我们配置完以上所有的东西后,我们浏览器上输入自己服务器的ip地址再加上我们设置的反向代理的端口号时,如192.168.79.44:89,就能看见如下页面了。

Gerrit部署(Ubuntu+Gerrit+Nginx)_第5张图片

3、部署时遇见的问题。

3.1 Gerrit启动失败

出现如下:

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,定位问题。

3.2 Gerrit登录超时

登陆时出现如下截图时,说明访问的ip拒绝了你的访问。

Gerrit部署(Ubuntu+Gerrit+Nginx)_第6张图片

最大的可能在于,你访问的ip中的端口没有开放。所以需要在访问的服务器中打开nginx设置的反向代理端口以及Gerrit监听的端口。

3.3 Gerrit登录失败

如果登录时出现如下截图,就说明你的nginx配置文件有问题。

Gerrit部署(Ubuntu+Gerrit+Nginx)_第7张图片

这个时候我们可以cat /var/log/nginx/error.log,来查看出错的地方在哪。

比如,你设置的服务器IP有问题,你的登录验证文件路径有问题,你需要反向代理的Gerrit的ip和端口有问题。

你可能感兴趣的:(Linux,Gerrit/Git,ubuntu,nginx)