gerrit部署使用
前言
gerrit是基于git的工具,code review功能是开发中很方便,此外它可以配合Jenkins进行自动化的编译工作。今天给大家分享一下gerrit在ubuntu的安装使用
作者:良知犹存
转载授权以及围观:欢迎关注微信公众号:羽林君
或者添加作者个人微信:become_me
Gerrit简介
Gerrit 是建立在Git版本控制系统之上并且基于Web的一个免费开源的轻量级代码审查工具。 作为开发者和Git之间的一层屏障,不允许直接将本地修改内容同步到远程仓库中。 与Jenkins集成后,可以在每次提交代码后,人工审核代码前,通过Jenkins任务自动运行单元测试、构建以及自动化测试,如果Jenkins任务失败,会自动打回本次提交。
一般Git、Gerrit和Jenkins集成后的使用流程
- 1.开发者提交代码到Gerrit
- 2.触发对应的Jenkins任务,通过以后Verified加1
- 3.人工审核,审核通过后code review加2,触发对应的Jenkins任务
- 4.通过以后确认本次提交,Gerrit执行与Git仓库的代码同步操作
- 5.代码进入Git仓库

Gerrit 安装
安装需要内容,gerrit文件,环境有git、jdk环境、反向代理工具nginx(帮助登录网页)
本文在nginx安装部分是最后解决问题时候,才发现反向代理工具的是必须的,最后才安装。
先下载 gerrit文件
下载链接:https://www.gerritcodereview.com/#download,官网可达
也可以使用wget工具命令行下载:wget https://gerrit-releases.storage.googleapis.com/gerrit-3.1.3.war
官网安装指导文档:
https://gerrit-review.googlesource.com/Documentation/index.html
https://gerrit-documentation.storage.googleapis.com/Documentation/3.6.2/install.html
下载下来等待其他环境安装好之后进行使用。
jdk环境
直接apt install进行安装sudo apt install openjdk-11-jdk 安装之后使用java -version命令查看是否安装成功 
git环境
gerrit需要git环境,直接安装git sudo apt-get install git

gerrit启动
进入到gerrit*.war文件所在目录,执行以下命令进行交互式安装 java -jar ~/Downloads/gerrit*.war init -d ~/Gerrit/
很多人是把gerrit放入/home/gerrit/目录,但是无法创建,需要创建一个gerrit账号进行访问。
sudo adduser gerrit
sudo su gerrit
类似于如此操作就可以创建一个gerrit目录
最后我选择了本地目录建立 Gerrit ,操作执行 java -jar gerrit*.war init -d ~/Gerrit/
注意: 1、gerrit可以将数据保存到mysql或其他的数据中,如果你需要使用mysql,则需要安装gerrit之前安装mysql,我这里直接使用默认的数据库类型 H2。如果你需要使用其他类型数据库,可以参考下面这个链接:
- https://gerrit-documentation.storage.googleapis.com/Documentation/2.12.2/install.html
2、如果gerrit需要结合jenkins做CI持续构建的话,在交互式安装过程中需要安装Verified label,默认是不安装的:Install Verified label [y/N]? y 这里选择y,安装Verified label。
启动执行具体细节如下:(比较复杂,后期使用需要反复观看里面配置以及解释)
lyn@lyn:~/Downloads$ java -jar gerrit*.war init -d ~/Gerrit/
Using secure store: com.google.gerrit.server.securestore.DefaultSecureStore
[2023-03-11 21:25:46,286] [main] INFO com.google.gerrit.server.config.GerritServerConfigProvider : No /home/lyn/Gerrit/etc/gerrit.config; assuming defaults
*** Gerrit Code Review 3.7.0
***
Create '/home/lyn/Gerrit' [Y/n]? y
*** Git Repositories
***
Location of Git repositories [git]: git #指定Git存储库,最好指定一个不存在的目录,他会自动创建
*** JGit Configuration
***
Auto-configured "receive.autogc = false" to disable auto-gc after git-receive-pack.
*** Index
***
Type [lucene]: #默认即可。
*** User Authentication
***
Authentication method [openid/?]: HTTP #认证方法输入HTTP,我们要使用反向代理
Get username from custom HTTP header [y/N]?
SSO logout URL :
Enable signed push support [y/N]?
Use case insensitive usernames [Y/n]?
*** Review Labels
***
Install Verified label [y/N]? y
*** Email Delivery
***
SMTP server hostname [localhost]: #输入自动发送邮件的smtp服务器
SMTP server port [(default)]: #465/994时SSL协议端口后,25是非SSL协议端口号
SMTP encryption [none/?]: #如果上一步输入的是465/994,此处输入SSL,否则直接回车即可
SMTP username : #此处是你定义自动发送邮件的邮箱地址
#接着我们需要输入2次咱们邮箱的授权码,而非邮箱密码!
*** Container Process
***
Run as [lyn]: gerrit
Java runtime [/usr/lib/jvm/java-11-openjdk-amd64]:
Copy gerrit-3.7.0.war to /home/lyn/Gerrit/bin/gerrit.war [Y/n]?
Copying gerrit-3.7.0.war to /home/lyn/Gerrit/bin/gerrit.war
*** SSH Daemon
***
Listen on address [*]: #指定SSH后台服务的监听地址
Listen on port [29418]: #指定SSH后台服务的端口号
Generating SSH host key ... rsa... ed25519... ecdsa 256... ecdsa 384... ecdsa 521... done
*** HTTP Daemon
***
Behind reverse proxy [Y/n]? y #使用发向代理
Proxy uses SSL (https://) [Y/n]? #不适用SSL
Subdirectory on proxy server [/]: #指定代理服务器的子目录,默认为"/"路径,默认即可
Listen on address [*]: #只当gerrit服务的监听地址
Listen on port [8080]: 8088 #指定gerrit的服务端口
Canonical URL [http://lyn:8080/]: http://lyn:8088 #指定标准连接
*** Cache
***
*** Plugins
***
Installing plugins. #接下来就是询问我们是否安装插件,我们一路”y“ 即可~
Install plugin codemirror-editor version v3.7.0 [y/N]? y
Installed codemirror-editor v3.7.0
Install plugin commit-message-length-validator version v3.7.0 [y/N]? y
Installed commit-message-length-validator v3.7.0
Install plugin delete-project version v3.7.0 [y/N]? y
Installed delete-project v3.7.0
Install plugin download-commands version v3.7.0 [y/N]? y
Installed download-commands v3.7.0
Install plugin gitiles version v3.7.0 [y/N]? y
Installed gitiles v3.7.0
Install plugin hooks version v3.7.0 [y/N]? y
Installed hooks v3.7.0
Install plugin plugin-manager version v3.7.0 [y/N]? y
Installed plugin-manager v3.7.0
Install plugin replication version v3.7.0 [y/N]? y
Installed replication v3.7.0
Install plugin reviewnotes version v3.7.0 [y/N]? y
Installed reviewnotes v3.7.0
Install plugin singleusergroup version v3.7.0 [y/N]? y
Installed singleusergroup v3.7.0
Install plugin webhooks version v3.7.0 [y/N]? y
Installed webhooks v3.7.0
Initializing plugins.
============================================================================
Welcome to the Gerrit community
Find more information on the homepage: https://www.gerritcodereview.com
Discuss Gerrit on the mailing list: https://groups.google.com/g/repo-discuss
============================================================================
Initialized /home/lyn/Gerrit
Init complete, reindexing accounts,changes,groups,projects with: reindex --site-path /home/lyn/Gerrit --threads 1 --index accounts --index changes --index groups --index projects --disable-cache-statsReindexed 0 documents in accounts index in 0.0s (0.0/s)
Index accounts in version 12 is ready
Reindexing groups: 100% (2/2)
Reindexed 2 documents in groups index in 0.8s (2.5/s)
Index groups in version 9 is ready
Reindexing changes: Slicing projects: 100% (2/2), done
Reindexed 0 documents in changes index in 0.0s (0.0/s)
Index changes in version 79 is ready
Reindexing projects: 100% (2/2)
Reindexed 2 documents in projects index in 0.1s (14.6/s)
Index projects in version 5 is ready
Executing /home/lyn/Gerrit/bin/gerrit.sh start
Starting Gerrit Code Review: WARNING: Could not adjust Gerrit's process for the kernel's out-of-memory killer.
This may be caused by /home/lyn/Gerrit/bin/gerrit.sh not being run as root.
Consider changing the OOM score adjustment manually for Gerrit's PID=193375 with e.g.:
echo '-1000' | sudo tee /proc/193375/oom_score_adj
OK
创建gerrit.password文件,并创建用户
htpasswd -c /home/lyn/Gerrit/etc/gerrit.password admin # 创建第一个用户admin,同时会生成一个gerrit.password文件
htpasswd -m /home/lyn/Gerrit/etc/gerrit.password lyn # 在gerrit.password增加用户用 -m
执行上面的命令,会要求多次输入密码,改密码就是对应用户的登录密码。
htpasswd 是apache密码生成工具,如果你的电脑没有这个命令,可以直接安装apache2sudo apt-get install apache2
运行gerrit
在之前安装gerrit的目录下执行脚本,启动gerrit
# 启动gerrit
$ ~/Gerrit/bin/gerrit.sh start
# 停止gerrit
$ ~/Gerrit/bin/gerrit.sh stop
# 重启gerrit
$ ~/Gerrit/bin/gerrit.sh restart
成功之后使用8088端口进行访问:
这个时候我没有开启反向代理,会提示如下问题:

Configuration Error
Check the HTTP server’s authentication settings.
The HTTP server did not provide the username in the Authorization header when it forwarded the request to Gerrit Code Review.
If the HTTP server is Apache HTTPd, check the proxy configuration includes an authorization directive with the proper location, ensuring it ends with ‘/’:
后面还遇到了反向代理设置后,502,403问题。
但都可以归结为一个原因。
错误原因:gerrit.conf 配置错误
gerrit相关配置文件修改,gerrit目录的gerrit.config和nginx的gerrit.conf修改解决。
原因是Gerrit有两种工作方式,我们要采用 http 的工作方式,也就是代码审核人员,可以直接通过Web页面对提交的代码进行评审以及后续的操作。
然后Gerrit要求不能直接请求其端口,必须要使用反向代理才能正确登录。而我们知道Nginx的成功正在于其高效、轻量级以及 反向代理 ,虽然Apache也有反向代理的功能,但是如果你在安装Apache时没有开启,后续的开启过程要相对复杂一点,而Nginx就简单的多了。
https://blog.csdn.net/zhoulr000/article/details/114173876
方法一:安装ngnix sudo apt-get install nginx
设置nginx的gerrit反向代理文件 sudo vi /etc/nginx/conf.d/gerrit.conf
- 配置nginx反向代理,文件内容如下
server {
listen 81;
server_name localhost;
allow all;
deny all;
auth_basic "Welcome to Gerrit Code Review Site!";
auth_basic_user_file /home/lyn/Gerrit/etc/gerrit.password;
location / {
proxy_pass http://127.0.0.1:8088;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
需要注意的部分:
- listen 81: nginx server 监听的端口,尽量不要使用知名端口80,我这里面换成了81端口
- /home/lyn/Gerrit/etc/gerrit.password: 这个是http认证使用的文件,后面需要配置 对应
- gerrit 端口配置为8088
其中还修改了gerrit中etc目录的gerrit.config文件,内容如下:
[gerrit]
basePath = git
canonicalWebUrl = http://lyn:8088/
serverId = f0858671-052c-4ea0-9883-032a598c9aae
[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 = lyn
javaHome = /usr/lib/jvm/java-11-openjdk-amd64
[index]
type = lucene
[auth]
type = HTTP
[receive]
enableSignedPush = false
[sendemail]
smtpServer = localhost
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-https://*:8088/
[cache]
directory = cache
配置完成后重启gerrit~/Gerrit/bin/gerrit.sh restart
配置完成后重启ngnix服务
sudo /etc/init.d/nginx restart # 重启nginx
sudo /etc/init.d/nginx status # 查看状态
或者执行
systemctl restart nginx.service
systemctl status nginx.service
启动之后可以使用工具查看一下自己配置的端口有没有正常工作: sudo netstat -ltpn
ps $(fuser 8088/tcp)这个工具可以直接查看有没有占据这个端口的进程
方法二:安装apache2
我们也可以让Apache2作为反向代理服务器访问Gerrit, 这个没有验证,所以没有过多描述,大家也可以参考此文:https://www.jianshu.com/p/0808559e6e2b 进行apache2配置

登录gerrit
输入下面链接,就可以登录到gerrit页面。
http://192.168.33.128:81/
- 192.168.33.128:是主机地址
- 81: 是nginx监听的地址,不是gerrit配置的8088(这就是反向代理的作用)。
输入刚才htpasswd设置好的用户名和密码登录:
gerrit就可以看到了:

gerrit插件小知识
gerrit 使用过程中,当进行 commit时,必须要生成一个 Change-Id,否则,push到gerrit服务器时,会收到一个错误提醒,而生成Change-Id可以用hooks工具。hooks钩子工具中commit-msg hook可以帮我们生成Change-Id,就是运行gerrit使用安装的插件
插件安装情况可以在gerrit管理员的界面看到
但是当我们想看插件里面的指导文档时候会遇到打不开情况:
这个时候需要我们修改一下访问方式:如下修改 http://192.168.33.128:81/plugins/hooks/Documentation/index.html
这样修改就可以看到插件的指导网页了
此外还有将Gerrit服务器设置开机自启动,Jenkins配置等等,后面我们再描述
结语
这就是我在gerrit部署基本操作的使用分享。如果大家有更好的想法,也欢迎大家加我好友交流分享哈。
作者:良知犹存,白天努力工作,晚上原创公号号主。公众号内容除了技术还有些人生感悟,一个认真输出内容的职场老司机,也是一个技术之外丰富生活的人,摄影、音乐 and 篮球。关注我,与我一起同行。
‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧ END ‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧‧
推荐阅读
【3】CPU中的程序是怎么运行起来的 必读
本公众号全部原创干货已整理成一个目录,回复[ 资源 ]即可获得。
gerrit部署使用的更多相关文章
- Gerrit部署成功后project下不显示clone地址
gerrit部署成功后使用admin账号登录,在project All-projects下不显示clone地址,新建仓库也不显示. 原因是:默认安装没有安装插件download-commands 安装 ...
- gerrit 部署手册
概述 gerrit是谷歌开发用于安卓系统的代码审查的系统,目前已经开源.gerrti使用简单并友好.这里记录了gerrti的部署方法以及其中可能存在的陷阱和问题. 创建专属系统用户 Gerrit co ...
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- Gerrit代码Review入门实战
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...
- CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
原文地址https://www.cnblogs.com/kevingrace/p/5651447.html 近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更 ...
- 转:Gerrit 学习
转载:http://www.scmeye.com/thread-1665-1-1.html 入门Gerrit简介Gerrit是一个建立在Git版本控制系统之上,基于Web的代码审查工具,但如果你已经阅 ...
- [原创]CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接https://www.cnblogs.com/kevingrace/p/5651447.html
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已, ...
- Gerrit代码Review实战
代码审核(Code Review)是软件研发质量保障机制中非常重要的一环,但在实际项目执行过程中,却因为种种原因被Delay甚至是忽略.在实践中,给大家推荐一款免费.开放源代码的代码审查软件Gerri ...
- Gitlab+Gerrit+Jenkins完整对接
近年来,由于开源项目.社区的活跃热度大增,进而引来持续集成(CI)系统的诞生,也越发的听到更多的人在说协同开发.敏捷开发.迭代开发.持续集成和单元测试这些拉风的术语.然而,大都是仅仅听到在说而已,国内 ...
- gerrit使用总结
1. 前言 最近在摸索git + gerrit代码审核的工作模式,需要安装gerrit服务器,经过一阵折腾,走了不少弯路,在此做下笔记,以便自己或者他人参考.有误的地方请指教. 我的环境如下: 环境 ...
随机推荐
- iOS开发之时间格式化
//返回当前时间,以GMT为准 NSDate * date = [NSDate date]; NSLog(@"%@", date); //显示当前时间距离1970-01-01 00 ...
- 实时平台-Flink篇
Flink任务统一通过实时平台统一管理的好处不用多说,这里简单介绍下实时平台-Flink模块的功能以及实现. 主要分为两大块 一.任务管理 任务管理主要包括任务的提交.暂停.下线.重启.历史版本回滚. ...
- Qt实现collapsePanel(折叠)功能
实践过程中,看到C#实现的CollapsePanel功能,比一般的TabWidget更加直观,充分利用了页面空间,遂感到很有兴趣,也查阅了很多资料搜索Qt在这方面的实现. 目前来说,比较常见的作法就是 ...
- 中国人民公安大学 Chinese people’ public security university 网络对抗技术 实验报告4
中国人民公安大学 Chinese people' public security university 网络对抗技术 实验报告 实验四 恶意代码技术 学生姓名 陈禹 年级 2018 区队 ...
- Android自动化测试
一.环境搭建 必备软件: Windows或MacOS系统的电脑 python pycharm Android SDK(需要配置环境变量,网上有教程) Appium客户端(需要配置Android SDK ...
- UEC++学习(1)
第三章 流程控制 第一节 C++和蓝图循环 ForLoop蓝图节点相当于C++中的for循环,ForeLoopWithBreak节点相当于for循环体中加了break语句,当触发某个条件时直接结束. ...
- P1296 奶牛的耳语
P1296 奶牛的耳语 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 本题核心思路: 1.读入后要排序以达到剪枝的目的 2.模拟,遇到不能再交流就转入下一头牛,否则计数器加一 3. ...
- Springboot中@Autowired为何获取了我们没有注入的Bean?
Springboot中@Autowired为何获取了我们没有注入的Bean? 在做仿牛客网项目的时候,有这样一段话: @Autowired private TemplateEngine templat ...
- re相关正则表达式(re.sub、re.I 、re.S、re.M)
re.I 表示忽略大小写 re.S 表示全文匹配 re.M 表示全文拼配行尾段位的字符或者数字,影响^和$ re.sub 表示替换 使用方法: re.sub(pattern, repl, string ...
- vue实现学生管理系统
开发步骤 创建一个空文件夹,取名students-system 方式一:右键新建 方式二:命令行新建(提倡) ##windows系统 md students-system##mac/linux mkd ...