gerrit简介

在gerrit搭建之前我们先了解一下gerrit的作用,以至于我们可以更好的理解它与其他git版本库的区别。

代码审查对不同的人意味着不同的东西。对一些人来说,这是一次与设计师或一个团队一行一行过代码的正式会议。对其他人来说,就是在提交代码之前,让别人浏览一下代码。

Gerrit的目的就是为代码提交到代码库之前提供一个评审的轻量级框架。代码提交到Gerrit上之后,实际上并没有真正被项目接受,直到被评审通过。

Gerrit在代码被正式接受之前,为代码检查设置了一个staging area,在这里可以对该提交进行修改、讨论、增加注释……

分布式进行、不需要面对面操作

对比gitlab的区别

gitlab的特点

  • 是一个人维系一个分支。
  • 提供了比较多的选择,可以根据需要创建project,每个团队可以根据自己的需求管理自己的代码,方式更加的灵活。
  • 是以merge request作为一次review,merge request中可能包含多个 commit,如果review不通过也不需要发起另一次merge request。
  • 可以选择公开代码,团队间可以看到互相的代码,有利于团队的协作。
  • 可以提供issues,wiki等功能方便开发者与使用者之间的沟通,并且gitlab可以无缝的与一些项目管理工具集成,比如:jira,repo。

gerrit的特点

  • 是一个团队维系一个分支。(这里的分支对应一个业务需求)
  • 比较单一,而且权限配置比较复杂,往往都是要联系管理员做出修改,每个团队很难做到对代码的个性化管理。
  • 是以commit作为一次review,由于changeId的存在,可以对一次commit反复的进行review。
    如果task划分的粒度够细的话,并不会影响各个团队的review习惯。
  • 由于权限控制问题,只能在权限范围内公开代码。
  • 这个方面比较欠缺。

总结

gerrit作为谷歌管理安卓项目的版本管理工具还是有其优点的,
多部门之间的权限隔离,强制review的机制都是其优点,
反观gitlab作为github的开源版,遵循了一套开源的流程,比较符合大多数人得习惯。
所以,通过比较,推荐使用gitlab作为版本管理工具,并且不与gerrit做集成。

gerrit安装准备

  • Ubuntu Server 21.04
  • OpenJdk8
  • Nginx
  • apache2-utils
  • gerrit

1.Ubuntu Server 21.04

首先选择安装的服务器,在此以Ubuntu server21.04为例,当然你们也可以选择桌面版。具体安装自行查阅。
服务器准备好之后,我们最好创建一个专有用户运行gerrit服务。 在此我们单独创建了gerrit用户:

sudo adduser gerrit  			# 创建gerrit用户
sudo usermod -aG sudo gerrit    # 赋予sudo管理权限
su gerrit						# 切换到gerrit用户

2.OpenJdk8

其次,需要安装jdk,在gerrit运行的时候需要jdk8支持, 有的gerrit版还需要安装更高版本的jdk。所以需要安装jdk8及更高级别的jdk才行。 在这里我们下载的gerrit是3.0.0版本,因此jdk8就已经全部支持安装和运行了。

sudo apt install -y openjdk-8-jdk

注意

对应gerrit-3.3.0以上版本好像需要安装jdk8及jdk8以上的更高级别的。
高级别的jdk是用于安装gerrit负责会报错,jdk8只负责运行gerrit。

3.Nginx安装

nginx服务用于代理访问gerrit的管理服务,用于用户访问gerrit的入口。

sudo apt install -y nginx

4.apache2-utils

安装Apache工具用于添加gerrit用户

sudo apt install -y apache2-utils

5.gerrit下载

gerrit的下载链接,里面有很多版本,在此我们选择的版是gerrit-3.0.0.war
下载如下:

# 创建gerrit_server目录
mkdir ~/gerrit_server
# 进入该目录
cd gerrit_server
# 下载gerrit-3.0.0.war
wget https://gerrit-releases.storage.googleapis.com/gerrit-3.0.0.war
ls
gerrit@release:~/gerrit_server$ ls -l
total 216304
-rw-r--r--  1 gerrit gerrit 68714982 Jun 11 08:32 gerrit-3.0.0.war
gerrit@release:~/gerrit_server$

gerrit服务器安装

以上准备工作都完成之后,接下来将正式开始安装gerrit的服务了。

# 安装之前先创建一个存放git的仓库目录,如果不创建的话将会默认到gerrit安装目录中,
# 个人习惯将安装目录和仓库目录分开放
mkdir ~/repositories
# gerrit安装
# -d 后面是指定gerrit将要安装到哪个位置,需要指定一个目录
java -jar gerrit*.war init -d review_site

执行上面命令后,将会输出以下配置信息:

Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
[2021-06-23 14:49:12,928] [main] INFO com.google.gerrit.server.config.GerritServerConfigProvider : No /home/user/gerrit_server/gerrit.mydomain.com/etc/gerrit.config; assuming defaults
*** Gerrit Code Review 3.0.0***
*** Git Repositories***
// 设置gerrit仓库目录, 即上面创建的repositories目录
Location of Git repositories [git]: /home/gerrit/repositories
*** Index***
Type [lucene/?]: lucene
*** User Authentication***
// 设置为http认证模式
Authentication method [openid/?]: http
Get username from custom HTTP header [y/N]?
SSO logout URL :
Enable signed push support [y/N]?
*** Review Labels***
Install Verified label [y/N]? y
*** Email Delivery***
// 最好要写上邮箱服务,省的后面还是需要配置
// 在这写的是公司邮箱服务,如果是qq可以这样写: smtp.163.com
SMTP server hostname [localhost]: mail.xxxx.com.cn
SMTP server port [(default)]: 25
SMTP encryption [none/?]:
SMTP username : djzheng@wxxxx.com.cn
*** Container Process***
Run as [user]:
Java runtime [/usr/lib/jvm/java-8-openjdk-amd64/jre]:
Copy gerrit-3.0.0.war to gerrit.mydomain.com/bin/gerrit.war [Y/n]?Y
Copying gerrit-3.0.0.war to gerrit.mydomain.com/bin/gerrit.war
*** SSH Daemon***
Listen on address []:
Listen on port [29418]:
Generating SSH host key … rsa… ed25519… ecdsa 256… ecdsa 384… ecdsa 521… done
*** HTTP Daemon
**
Behind reverse proxy [y/N]?
Use SSL (https://) [y/N]?
Listen on address []:
Listen on port [8443]:
Canonical URL [https://ubuntu:8081/]: http:10.66.210.123:8081
Create new self-signed SSL certificate [Y/n]?
Certificate server name [gerrit.mydomain.com]:
Certificate expires in (days) [365]:
*** Cache
**
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/oauth_tokens.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/web_sessions.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/mergeability.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/diff.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/pure_revert.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/conflicts.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/diff_summary.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/diff_intraline.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/git_tags.lock.db [y/N]?
Delete cache file /home/user/gerrit_server/gerrit.mydomain.com/cache/change_kind.lock.db [y/N]?
*** Plugins***
Installing plugins.
Install plugin codemirror-editor version v3.0.0 [y/N]? y
Installed codemirror-editor v3.0.0
Install plugin commit-message-length-validator version v3.0.0 [y/N]? y
Installed commit-message-length-validator v3.0.0
Install plugin delete-project version v3.0.0 [y/N]? y
Installed delete-project v3.0.0
Install plugin download-commands version v3.0.0 [y/N]? y
Installed download-commands v3.0.0
Install plugin gitiles version v3.0.0 [y/N]? y
Installed gitiles v3.0.0
Install plugin hooks version v3.0.0 [y/N]? y
Installed hooks v3.0.0
Install plugin plugin-manager version v3.0.0 [y/N]? y
Installed plugin-manager v3.0.0
Install plugin replication version v3.0.0 [y/N]? y
Installed replication v3.0.0
Install plugin reviewnotes version v3.0.0 [y/N]? y
Installed reviewnotes v3.0.0
Install plugin singleusergroup version v3.0.0 [y/N]? y
Installed singleusergroup v3.0.0
Install plugin webhooks version v3.0.0 [y/N]? y
Installed webhooks v3.0.0
Initializing plugins.
Initialized /home/user/gerrit_server/gerrit.mydomain.com
Reindexing projects: 100% (2/2) with: reindex --site-path gerrit.mydomain.com --threads 1 --index projects
Reindexed 2 documents in projects index in 2.1s (0.9/s)

如此,gerrit就安装完成了,可以通过ps查看是否已经运行:

# ps -aux | grep gerrit
gerrit      1910  0.0  0.0   9056  5880 pts/0    Ss   Jun22   0:00 -bash
gerrit      7363  0.2  4.2 25553812 1365204 ?    Sl   Jun22   3:52 GerritCodeReview -Dflogger.backend_factory=com.google.common.flogger.backend.log4j.Log4jBackendFactory#getInstance -Dflogger.logging_context=com.google.gerrit.server.logging.LoggingContext#getInstance -jar /home/gerrit/gerrit_server/review_site/bin/gerrit.war daemon -d /home/gerrit/gerrit_server/review_site --run-id=1624360603.7326

gerrit配置和代理设置

上一小节,gerrit已经安装好了。那么接下来是否可以正确访问了呢。
我们试一下:
在浏览器中输入:上面设置的IP地址: 10.66.210.123:8081

在这里插入图片描述

但是此时访问存在配置问题,因为当启用http方式验证的时候,gerrit禁止直接通过端口与gerrit相连,此时需要借助Nginx反向代理访问,因而需要配置Nginx反向代理。
输入本机ip测试nginx是通的。
在这里插入图片描述
接下来我们需要设置一下代理:
首先,先确认并修改一下合适的端口,编辑gerrit配置文件:

vi ~/gerrit_server/review_site/etc/gerrit.config

在这里插入图片描述其次, 接下来设置nginx反向代理:

# 创建一个gerrit.conf server配置文件,并设置内容如下:
cat /etc/nginx/sites-enabled/gerrit.conf
server {
	# 设置访问代理端口
     listen *:8443;
     server_name localhost;
     location / {
                auth_basic              "Welcomme to Gerrit Code Review Site";
                #确保passwd路径正确, 该passwd后面将会讲到。在此我们先将passwd放置到gerrit安装目录下的etc目录中
                auth_basic_user_file    /home/gerrit/gerrit_server/review_site/etc/passwd;
                # 该代理要和前面gerrit.config中设置的端口保持一致性
                proxy_pass              http://localhost:8081;
                proxy_set_header        X-Forwarded-For $remote_addr;
                proxy_set_header        Host $host;
        }
        location /login/ {
        		# 该代理要和前面gerrit.config中设置的端口保持一致性
                proxy_pass              http://localhost:8081;
                proxy_set_header        X-Forwarded-For $remote_addr;
                proxy_set_header        Host $host;
        }
}

注意:

我用的nginx的版本是nginx version: nginx/1.18.0 (Ubuntu)。 所以直接创建一个配置放到/etc/nginx/sites-enabled目录中,重启nginx即可。
如果是其他版本的nginx要视具体情况添加配置。有的版本需要添加到/etc/nginx/nginx.conf中。

然后, 给gerrit创建一个用户,还记得前面提到的passwd文件吗? 接下来我们就要创建它

# 和Linux正常添加用户密码一样
# 这里我们第一次创建通过-c 并设置第一个用户为gerrit
# 即执行如下命令,并根据提示设置密码
sudo htpasswd -c ~/gerrit_server/review_site/etc/passwd gerrit

最后, 我们将对以上的改动重启服务,生效

# 重启nginx服务
service nginx restart
# 重启gerrit服务
~/gerrit_server/review_site/bin/gerrit.sh restart

接下来, 我们在通过浏览器访问gerrit,注意端口是nginx设置的访问端口8443
当输入浏览器后, 提示输入密码:
在这里插入图片描述
输入密码登录后, 将弹出确认信息:

在这里插入图片描述

注意:

如果是第一次登录,那么该账号将作为管理权限账号使用。

点击close进入到dashboard显示页面, 至此gerrit的安装已经完成了。
在这里插入图片描述
gitlab自动同步gerrit关联设置,请看下一章节

参考:
https://blog.csdn.net/CyrilTaylor/article/details/89463271

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐