gerrit 从安装到出坑

一般公司在做代码审核的时候选择codereview gerrit来处理代码的入库的问题。

它是通过提交的时候产生Change-Id: If4e0107f3bd7c5df9e2dc72ee4beb187b07151b9

来决定是不是入库,一般如果不是通过这个管理,那么就是我们通常的操作

git add .

git commit -m "XXXX"

git push origin master

这种没有代码检视直接入库的行为。

这种的好处的是方便快捷,不好的是,入库很随意,代码质量无法保证。

对于很多的团队也是想搭建自己的gerrit,那么我下面就介绍一下搭建的过程。

参考:(187条消息) 搭建Gerrit环境Ubuntu_ubuntu搭建gerrit_西瓜投手爱吃西瓜的博客-CSDN博客

1.安装apache

    sudo apt-get install apache2
注意:To run Gerrit behind an Apache server using 'mod_proxy', enable the necessary 
Apache2 modules:
执行:sudo a2enmod proxy_http
执行:sudo a2enmod ssl 
使新的配置生效,需要执行如下命令:
  service apache2 restart
2.安装PostgreSQL数据库

sudo apt-get install postgresql

注意:安装完postgresql后,会自动创建一个用户名和密码均为postgres的账户

3.增加Gerrit需要的数据库

执行:sudo -u postgres createuser -RDIElPS zmj  //zmj 是账户名字,你自己可以修改

执行:sudo -u postgres createdb -E UTF-8 -O zmj reviewdb

4.安装Gerrit

在Gerrit官网上下载Gerrit安装包 https://www.gerritcodereview.com/ 点击Download 下载gerrit-3.7.0.war

创建目录 mkdir gerrit

进入目录 cd gerrit

我这边此时下载的是最新的版本:gerrit-3.8.1.war

如果此时得不到的话:可以使用如下链接下载:

链接: https://pan.baidu.com/s/1ti-M13V5GCi-yubktPPYfA?pwd=mpc8 提取码: mpc8 复制这段内容后打开百度网盘手机App,操作更方便哦

我的服务器是有:java的环境所以没有那么多事情,直接执行这个命令正常配置。

如果zmj@ubuntu:~/gerrit$ java -jar gerrit-3.7.0.war init -d review_site   提示
Command 'java' not found, but can be installed with:

sudo apt install default-jre            
sudo apt install openjdk-11-jre-headless
sudo apt install openjdk-8-jre-headless 
下载sudo apt install openjdk-11-jre-headless  后再次执行命令

指定git存储仓库 gerr 把gerr文件名改为git // 我这边比较懒是没有做这个动作的

[root@localhost gerrit]# java -jar gerrit-3.1.3.war init -d review_site

根据提示一步步安装gerrit


*** Gerrit Code Review 3.1.3

***

Create '/usr/local/src/gerrit/review_site' [Y/n]? y  //这个会自动在你的gerrit目录下生成相应的目录

#程序会自动创建该文件,必须输入”Y“,如果输入"N"则程序会退出,默认就是"Y",因此我们直接回车应该也可以的
 

*** Git Repositories

***

Location of Git repositories   [git]:/home/zmj/gerr   //这个是你的仓,地址要写入

#指定Git存储库,最好指定一个不存在的目录,他会自动创建。

*** Index***

Type                           [lucene/?]:        //默认回车就行了

#默认即可。

 
*** User Authentication***

Authentication method          [openid/?]: HTTP  //这个地方是http 

#认证方法输入HTTP,我们要使用反向代理

Get username from custom HTTP header [y/N]? n   //这里按照这个设置

#询问咱们是否从自定义HTTP头获取用户名,我们输入”n“

SSO logout URL                 :               //回车

Enable signed push support     [y/N]? y  //按照这里

#启用签名的推送支持

*** Review Labels***

Install Verified label         [y/N]?      //回车

#安装已验证标签,默认即可。

SMTP server hostname           [localhost]: smtp.exmail.qq.com  //我比较喜欢163的设置,smtp.163.com

#输入自动发送邮件的smtp服务器,这里我们用的是腾讯企业邮箱

SMTP server port               [(default)]: 465 // 163就是25

#465/994时SSL协议端口后,25是非SSL协议端口号

SMTP encryption                [none/?]: SSL   //none  

#如果上一步输入的是465/994,此处输入SSL,否则直接回车即可

SMTP username                  [root]: jsyfzxqa@corp.to8to.com   //这里是你的邮箱,比如我的m135XXXX@163.com

#此处是你定义自动发送邮件的邮箱地址

jsyfzxqa@corp.to8to.com's password :

#接着我们需要输入2次咱们邮箱的授权码。  //这里比较重要,不是邮箱密码,而是授权码,这个地方我是搞错了的。            

confirm password :

Run as                         [root]: #指定容器运行的进程用户,默认为root用户,我们默认即可

Java runtime                   [/yinzhengjie/softwares/jdk1.8.0_201/jre]:             //这里有值我是直接回车

#JAVA的运行环境。如果它识别的有误,你可以指定你服务器的环境

Copy gerrit-3.1.3.war to review_site/bin/gerrit.war [Y/n]? y   

#拷贝gerri安装包

Copy gerrit-3.1.3.war to review_site/bin/gerrit.war

*** SSH Daemon***
 

Listen on address              [*]: n   

#指定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]? n

#不适用SSL

Subdirectory on proxy server   [/]:

#指定代理服务器的子目录,默认为"/"路径,默认即可

Listen on address              [*]:

#只当gerrit服务的监听地址

Listen on port                 [8081]: 8888

#指定gerrit的服务端口

Canonical URL                  [[http://localhost/]:

#指定标准连接,咱们默认即可

按照上面的描述选择对应即可。

5.邮箱配置

进入到对应的目录下 /home/zmj/gerrit/review_site/etc

修改gerrit.config文件 在sendemail部分添加from配置

 [sendemail]     发送邮件
            smtpServer = smtp.mxhichina.com
            smtpServerPort = 25       端口号
            smtpUser = 邮箱地址        
            from=CodeReview<邮箱地址>    代码审查 邮箱地址
            
 [gerrit]
basePath = git
canonicalWebUrl = http://192.168.168.128/                  //nginx的代理端口 

.........

[httpd]
listenUrl = http://*:8080/

6.重启Gerrit

cd gerrit/review_site/

./bin/gerrit.sh restart

7.Apache反向代理配置

编辑/etc/apache2/sites-enabled/000-default.conf

vim 000-default.conf 修改文件,修改文件后现在文件是链接文件,无法保存。

命令行sudo vim 000-default.conf 并输入密码即可

注意:The ProxyPass 8080 must be same with the ./review_site/etc/gerrit.config.
When access the http://192.168.168.128:80,Apache2 will lead you to 
http://192.168.168.128:8080.
ProxyPass 8080必须和./review_site/etc/gerrit.config里的端口配置一致。当登录http://192.168.168.128:80的时候,Apache2会帮助打开http://192.168.168.128:8080。

<VirtualHost 192.168.1.179:80>

        ProxyRequests Off
        ProxyVia Off
        ProxyPreserveHost On
<Proxy *> 
    Order deny,allow
    Allow from all  
</Proxy>
<Location /login/>
    AuthType Basic
    AuthName "Welcome to Gerrit Code Review Site!"
    Require valid-user
    AuthUserFile /home/zmj/gerrit/review_site/etc/passwords
</Location>
AllowEncodedSlashes On
ProxyPass / http://127.0.0.1:8080/
</VirtualHost>
 

8.重启Apache服务

service apache2 restart

9.添加Gerrit账户

touch /home/zmj/gerrit/review_site/etc/passwords     创建密码文件
要在Gerrit的配置文件下创建用户
cd /home/zmj/gerrit/review_site/etc
htpasswd -m passwords zmj     创建zmj用户 密码为1
这个命令有一点说明:这里创建的名字是啥passwords,下面的htpasswd -m passwords 一定要对应,不然会说找不到文件的。 这里的密码都是加密后的铭文显示

10.访问http://192.168.168.128:80

到此gerrit 安装就完成了。但是在实际的操作中有一堆的坑。

比如我们一顿骚操作常常遇到:

那么下面就是围绕这个坑来介绍的:

那么搭建gerrit服务器(apache&nginx反向代理方式)_51CTO博客_nginx反向代理服务器配置

 主要是参考这里配置值

它的逻辑是先配置gerrit 下的gerrit_config

然后配置端口对外访问

1:进入etc路径,即/home/gerrit/review-gerrit/etc,这里贴出gerrit.config文件

2:

例如我们想通过PC浏览器去访问http://192.168.1.6:9999,就是一个反向代理。在/home/gerrit/review-gerrit/etc/gerrit.config中,我们配置gerrit端口bind在10000,为啥外部通过访问端口9999,就可以打开gerrit的web页面?

        原因就是Apache的反向代理功能。那就开始配置Apache吧!

        a.第一步,要在Apache上新增端口9999,用户监听网络事件。修改配置文件/etc/apache2/ports.conf。

这个文件是只读,需要自己去改写sudo chmod 666 ports.conf

b.第二步,增加反向代理的配置。/etc/apache2/sites-enabled/000-default

c.完成以上配置,则成功。然后restart Apache和gerrit服务即可

这里的密码就是上面sshd 创建的名字和密码

你以为照抄就可以搞定了,然而到这里还TM有坑,自古坑多。

然后我又参考这个:https://blog.csdn.net/enlangs/article/details/21221827 

通过摸索修改完成了。

下一篇介绍:gerrit 的启动坑,坑坑走不完的坑

(188条消息) gerrit 的启动坑,坑坑走不完的坑_阿木看源码的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/6806.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】MySQL HeatWave 介绍

HeatWave是一个分布式、可扩展、无共享、内存中、混合柱状的查询处理引擎&#xff0c;专为获得极致性能而设计。可以通过向MySQL数据库系统添加一个HeatWave集群来启用它。 HeatWave 是一种大规模并行、高性能内存查询加速器&#xff0c;可将分析工作负载、混合工作负载和机器…

Linux 学习记录55(ARM篇)

Linux 学习记录55(ARM篇) 本文目录 Linux 学习记录55(ARM篇)一、使用C语言封装GPIO函数1. 封装GPIO组寄存器2. 封装GPIO模式以及相关配置3. 封装GPIO初始化结构体4. 使用自己的封装配置GPIO 一、使用C语言封装GPIO函数 1. 封装GPIO组寄存器 #define GPIOA ((GP…

刷题日记09《图论基础》

图的存储结构 对于图结构而言&#xff0c;常见的存储结构主要有两种&#xff1a;邻接表和邻接矩阵&#xff1a; 邻接表很直观&#xff0c;我把每个节点 x 的邻居都存到一个列表里&#xff0c;然后把 x 和这个列表关联起来&#xff0c;这样就可以通过一个节点 x 找到它的所有相邻…

【算法与数据结构】222、LeetCode完全二叉树的节点个数

文章目录 一、题目二、一般遍历解法三、利用完全二叉树性质四、完整代码 所有的LeetCode题解索引&#xff0c;可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、一般遍历解法 思路分析&#xff1a;利用层序遍历&#xff0c;然后用num记录节点数量。其他的例如…

视频增强技术-去噪

本文介绍了关于视频增强技术的相关方法包括传统方法和基于深度学习的方法&#xff0c;并给出了他们的对比实验结果&#xff0c;最后对它们简单的做了总结&#xff0c;文中有一些图片和总结来自于网上其他博主的文章&#xff0c;已在文中标记并给出了相关的原文链接&#xff0c;…

一文掌握如何前后端分离?

随着科技的进步和发展&#xff0c;低代码开发产品拥有广阔的市场前景。前后端分离似乎早已经是发展趋势了&#xff0c;因为做好前后端分离对于前后端的工程师而言是非常有利的&#xff0c;这样也有利于提升办公协作效率。那么&#xff0c;如何前后端分离&#xff1f;分别都有哪…

【机器学习】支持向量机SVM入门

优化目标 相较于之前学习的线性回归和神经网络&#xff0c;支持向量机&#xff08;Supprot Vector Machine&#xff0c;简称SVM&#xff09;在拟合复杂的非线性方程的时候拥有更出色的能力&#xff0c;该算法也是十分经典的算法之一。接下来我们需要学习这种算法 首先我们回顾…

关于Docker的基本概念和使用

关于Docker的基本概念和使用 一、Docker 概述1、Dcker的概念2、容器的优势3、Docker与虚拟机的区别4、容器在内核中支持2种重要技术5、Docker核心概念 二、安装 Docker1、安装依赖包2、设置阿里云镜像源3、安装 Docker-CE并设置为开机自动启动3、查看 docker 版本信息4、docker…

AI智能化技术对项目管理的挑战与应对︱腾讯CSIG能源行业总经理王磊

腾讯CSIG能源行业总经理王磊先生受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;AI智能化技术对项目管理的挑战与应对。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 自从DALLE、Midjourney、…

linux升级mysql

linux升级mysql 一.介绍二.下载三.文件配置1.查找删除mysql2.解压配置 四.修改配置五.初始化mysql服务六.启动mysql七.配置数据库七.测试 一.介绍 由于最近业务需要&#xff0c;不得不将之前的mysql5.7.26升级到mysql8.0加了 Linux安装mysql&#xff08;5.7.26&#xff09;&…

flask结合mysql实现用户的添加和获取

1、数据库准备 已经安装好数据库&#xff0c;并且创建数据库和表 create database unicom DEFAULT CHARSET utf8 COLLATE utf8_general_ci; CREATE TABLE admin( id int not null auto_increment primary key, username VARCHAR(16) not null, password VARCHAR(64) not null…

初识 Spring (存储和获取 bean)

目录 初识 Spring总结 DI&#xff08;依赖注入&#xff09;Spring 项目的创建创建一个 Maven 项目添加 Spring 框架支持添加启动类 存储 bean 对象创建 bean将 bean 注册到容器中 获取并使用 bean 对象获取 bean 的方法一获取 bean 的方法二获取 bean 的方法三 ApplicationCont…

(Chrome Ext)谷歌扩展程序-谷歌插件渗透测试方法记录

文章目录 前言一、本地获取谷歌插件/扩展程序源码二、工具化信息收集总结 前言 在工作岗位变更之后&#xff0c;越来越多“奇奇怪怪”的东西要去渗透和测试&#xff0c;在我之前干安服的时候&#xff0c;最多的就是测一下web&#xff0c;极少情况下测测app&#xff0c;但是现在…

根据UIL下载图片/视频、根据URL自动下载图片/视频、GUI自动下载想要的图片

1&#xff0c;根据UIL下载图片/视频 def downForInterface(file_path):count 1value_rows []with open(file_path, encodingUTF-8) as file:f_csv csv.reader(file)for r in f_csv:value_rows.append(r)for file_path in value_rows:cunmulu if . in file_path[0]:print(cu…

网页生成PDF表格诡异多出空白

环境&#xff1a; axios: 0.27.0 egg: 2.35.0 pdf-lib: 1.17.1 puppeteer-core: 17.1.3 node: 16.20.0 element-plus: 2.3.2 vue: 3.2.47 背景&#xff1a; 一个报告页面含有多个统计表格和描述文字&#xff0c;生成PDF用于下载查看&#xff0c;页面使用vue3element-plus…

用 Node.js 手写 WebSocket 协议

目录 引言 从 http 到 websocekt 的切换 Sec-WebSocket-Key 与 Sec-WebSocket-Accept 全新的二进制协议 自己实现一个 websocket 服务器 按照协议格式解析收到的Buffer 取出opcode 取出MASK与payload长度 根据mask key读取数据 根据类型处理数据 frame 帧 数据的发…

多种语言示例采集数据【淘宝天猫1688拼多多API系列】可高并发线程

长话短说&#xff0c;节约彼此宝贵时间&#xff0c;我们以淘宝商品详情数据为例&#xff1a; 请求方式&#xff1a;HTTPS POST GET 请求地址&#xff1a;https://o0b.cn/anzexi taobao.item_get 公共参数 名称类型必须描述技术交流18179014480keyString是调用key&#xf…

rust学习-智能指针

适用场景 有一个在编译时未知大小的类型&#xff0c;想在需要确切大小的上下文使用该类型值 示例1 无意义的例子&#xff1a;将一个单独的值存放在堆上并不是很有意义&#xff0c;b更应该放到栈上 fn main() {let b Box::new(5);// box 在 main 的末尾离开作用域时&#x…

[论文阅读笔记24]Social-STGCNN: A Social Spatio-Temporal GCNN for Human Traj. Pred.

论文: 论文地址 代码: 代码地址 作者在这篇文章中直接用GNN对目标的轨迹时空特征进行建模, 并用时序CNN进行预测, 代替了训练难度较大和速度较慢的RNN类方法. 0. Abstract 行人轨迹预测是一个比较有挑战性的任务, 有着许多的应用. 一个行人的轨迹不仅是由自己决定的, 而且受…

产品设计思考:如何平衡用户习惯和用户体验

在产品设计领域&#xff0c;平衡用户习惯与用户体验之间的关系是一个重要而复杂的任务。 用户习惯是指用户在长期使用产品过程中逐渐形成的一种行为模式&#xff0c;而用户体验则是用户在与产品交互时所感受到的整体感受。 在追求良好的用户体验的同时&#xff0c;还需要考虑用…