转载自:https://cloud.tencent.com/developer/article/1010629

说到gerrit,没听说的同学可能会感到比较陌生,那么先来copy一段关于gerrit的说明:

Gerrit 是一个免费、开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件程序员,可以相互审阅彼此修改后的程序代码,决定是否能够提交,退回或者继续修改。

我在解释一下,gerrit是使用 Git 作为底层版本控制系统,通过网页界面,能方便的做代码审核工作的一个轻量型框架,出自google团队的开源项目。

好了,不多扯了,这里我介绍下前期版本选择,

1、刚开始本打算用最新版gerrit的docker镜像2.13.x搭建环境,好处就是安装配置简单,容器化移植性好,但是经过实践,发现gerrit版本的升级,数据库mysql表结构会发生很大变化,如果直接拷贝原版本数据,发现启动gerrit失败,而且用户也不希望在重新配置各种组权限、ssh密钥等,同时考虑到新版本用老版本数据库表会存在兼容性问题,后期扩展插件问题,所以pass掉这种方案。

2、使用跟原系统gerrit版本一致,重新搭建新环境,做到数据环境一致平滑迁移(不要问我为啥不用docker镜像搭建,因为原系统版本很老了,木有现成的docker镜像了,自己在写一个镜像也是很麻烦的。。。)。

so,现在开始记录迁移过程。

gerrit 2.8.4环境安装及配置流程

一、安装环境

  • jdk: java 1.7.0
  • apache: httpd-2.2.32.tar.gz
  • git: Git-1.8.3.1.tar.gz
  • gerrit: gerrit-2.8.4.war
  • gitweb: yum install gitweb
  • mysql: 5.1 +
说明:
1、gerrit是由java代码编写的,所以jdk环境必须。
2、apache作为代理服务,代理gerrit服务。
3、git作为gerrit底层版本控制系统。
4、gitweb这个是git的一个可视化操作的环境,界面操作,直观。
5、mysql我们这里使用mysql作为gerrit的数据存贮。
6、gerrit,跟原系统版本一致选择2.8.4

二、安装配置步骤

1、安装jdk

    忽略安装过程,Linux系统默认有安装,若无则手动安装,完成以后使用java -version查看版本信息

2、安装git

    1)# tar -xzf git-1.8.1.5.tar.gz
2)# cd git-1.8.1.5
3)# make prefix=/usr/local all
4)# make prefix=/usr/local install
5)# git --version

3、安装gitweb

    1)# yum install gitweb
2)修改git.conf
# vi /etc/httpd/conf.d/git.conf
将 "Alias /git /var/www/git" 改为 "Alias /gitweb /var/www/git"
3)修改gitweb.conf
# vi /etc/gitweb.conf
将$projectroot = "/home/xxx" 设置为git代码库所在的文件夹,这里我们设置为gerrit配置的代码库路径/data1/gerrit2.8.4/git

4、安装并配置apache

    下载:
http://archive.apache.org/dist/httpd/
安装:
1) # tar -xvzf httpd-2.2.32.tar.gz
2) # cd httpd-2.2.32
3) # ./configure --prefix=/usr/soft/apache --enable-mods-shared='proxy proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http proxy_rewrite'
4) # make
5) # make install 配置:修改httpd.conf
<VirtualHost *:80>
ServerName GerritServer
ProxyRequests Off
ProxyVia Off
ProxyPreserveHost On <Proxy *>
Order deny,allow
Allow from all
</Proxy> <Location /gerrit/login/>
# AuthType Basic
# AuthName "Gerrit Code Review"
# Require valid-user
# AuthUserFile /usr/soft/git/htpasswd
</Location> AllowEncodedSlashes On
RedirectMatch ^gerrit$ /gerrit/
ProxyPass /gerrit/ http://xx.xx.xx.xx:9080/gerrit/ nocanon
ProxyPassReverse /gerrit/ http://xx.xx.xx.xx:9080/gerrit/ nocanon
</VirtualHost>
注意:
1、这里apache监听了80端口,通过代理/gerrit/请求转发到gerrit服务上去,还需要配置 ServerName xx.xx.xx.xx:80
2、这里Location下边的配置是为了配置apache的简单登陆验证,若使用需要命令`htpasswd -cmb 目录及文件名 用户名 密码` 生成,例如:htpasswd -cmb user abc 123456, 这个登陆我使用了gerrit的ldap配置登陆,所以不需要apache登陆验证。
3、这里我使用了apache代理了gerrit服务。访问http://xx.xx.xx.xx/gerrit/则将服务代理到gerrit服务:http://xx.xx.xx.xx:9080/gerrit/
4、nocanon 这里如果不设置,gerrit访问时可能会出现404 access权限问题。 调优:修改httpd.conf、extra/httpd-mpm.conf
压测时,发现并发量大时,会出现访问拒绝,所以需要调整Apache的最大并发数
1、首先查看当前apache的使用的MPM模块
# httpd -l 或者 apachectl -l
2、在httpd.conf文件中放开引用该模块配置注释
# Include conf/extra/httpd-mpm.conf
3、修改extra/httpd-mpm.conf,找到对应的当前apache使用模块对应部分,修改配置。
例如mpm_perfork模块:
<IfModule mpm_prefork_module>
ServerLimit 1000 #推荐设置:与MaxClients的值保持一致
StartServers 10 #推荐设置:小=默认 中=20~50 大=50~100
MinSpareServers 10 #推荐设置:与StartServers保持一致
MaxSpareServers 20 #推荐设置:小=20 中=30~80 大=80~120
MaxClients 1000 #推荐设置:小=500 中=500~1500 大型=1500~3000
MaxRequestsPerChild 0 #推荐设置:小=10000 中或大=10000~500000
</IfModule>

5、安装并配置gerrit

    下载:
https://gerrit-releases.storage.googleapis.com/index.html
安装:
1) # java -jar gerrit-2.8.4.war init -d /data1/gerrit2.8.4
2) 根据安装提示依次输入信息,输入的信息最终生成到{$review_site}/etc/gerrit.conf上去,可以在安装完成后修改gerrt.conf配置文件 配置:修改gerrit.conf
[gerrit]
basePath = /data1/gerrit2.8.4/git
canonicalWebUrl = http://xx.xx.xx.xx/gerrit
[database]
type = mysql
hostname = xx.xx.xx.xx
port = 3306
database = reviewdb
username = xxx
password = ******
[auth]
type = LDAP
[container]
user = root
javaHome = /usr/lib/jvm/java-1.7.0-openjdk-1.7.0.121-2.6.8.0.el7_3.x86_64/jre
[sshd]
listenAddress = *:29418
[httpd]
listenUrl = proxy-http://xx.xx.xx.xx:9080/gerrit
[cache]
directory = cache
[sendemail]
smtpServer = xx.xx.com.cn
smtpServerPort = 587
smtpEncryption = TLS
enable = true
smtpUser = xxx@xxx.com.cn
smtpPass = ******
from = Code Review <xxx@xxx.com.cn>
[ldap]
server = ldap://ip:port
sslVerify = false
username = CN=xx,OU=xx,OU=xx,DC=xx,DC=xx,DC=com,DC=cn
password = ******
referral = follow
accountBase = OU=xx,DC=xx,DC=xx,DC=com,DC=cn
groupBase = OU=xx,DC=xx,DC=xx,DC=com,DC=cn
[gitweb]
cgi = /var/www/git/gitweb.cgi
[plugins]
allowRemoteAdmin = true
[theme]
backgroundColor = FCFEEF
textColor = 000000
trimColor = D4E9A9
selectionColor = FFFFCC
topMenuColor = D4E9A9
changeTableOutdatedColor = F08080
[theme "signed-in"]
backgroundColor = FFFFFF 注意:
1、这里配置gerrit使用了mysql数据库、认证方式为ladp、发送邮件配置、以及gitweb。
2、这里仓库目录为:/data1/gerrit2.8.4/git 默认为gerrit安装目录的git目录下。
3、gitweb配置,如果已经安装,那么gerrit会自动获取路径配置,如果之后安装,这里可以手动配置下路径。
4、sshd默认端口为29418,httpd默认监听端口为8080,这里我修改了端口为9080。
5、ldap配置比较这块稍麻烦,需要多次尝试,这里的groupName若不配置,则默认是跟accountBase相同,如不同,可以另行配置。
6、启动gerrit,如果使用mysql作为数据库存储,那么第一次启动时,还需要将mysql数据库驱动mysql-connector-java-5.1.21.jar拷贝到/data1/gerrit2.8.4/lib/目录中去,否则报错,默认为H2数据库。
7、这里的mysql数据库密码、sendmail密码、ladp密码如果通过安装步骤2中的方式填写的,gerrit会自动将密码保存到磁盘指定路径下/data1/gerrit2.8.4/etc/secure.config文件中。
8、plugins里面设置allowRemoteAdmin = true默认false,这里重载gerrit的replication的同步服务时,需要指定为true,否则可能会报错fatal: remote plugin administration is disabled
9、theme 主题设置,可以修改简单修改当前gerrit系统的主题颜色。

6、启动|停止apache和gerrit

启动/停止apache:/usr/soft/apahe/bin/apachectl start|stop
启动/停止gerrit: /data1/gerrit2.8.6/bin/gerrit.sh start|stop

7、访问gerrit页面

访问地址:http://xx.xx.xx.xx/gerrit

8、注意事项

1)在初始化一个版本的gerrit时,它会自动创建项目All-project.git,以及两个用户组Administrators、Non-Interactive Users,如果迁移版本直接使用原版本数据库的话,需要注意修改两点:

1、修改schema_version表的version_nbr字段,因为每个版本的这个字段是固定的,需要修改为当前版本的对应的号,不然启动报错。例如:gerrit2.8.4的schema版本号是84。  

2、Administrators以及Non-Interactive Users组会重新创建新的group_uuid,这个跟数据库account_groups表中对应的原组uuid不一致,会导致系统即使管理员也没有读写权限,需要将数据库中的group_uuid以及owner_group_uuid修改为对应新生成的group_uuid,然后重启gerrit。 

3、获取新生成的Administrators、Non-Interactive Users的group_uuid方法:clone All-Projects到本地,找到groups文件,里面存放的就是GroupName - UUID。

2)每个gerrit版本对应的数据库表结构不一致,不能简单的数据表拷贝以及git仓库数据拷贝,可能会导致gerrit启动失败,以及后期扩展等问题。

基于docker搭建最新版gerrit 2.13.x步骤

1、拉取gerrit镜像

从docker hub官网拉取openfrontier/gerrit镜像
地址:https://hub.docker.com/r/openfrontier/gerrit/
命令:# docker pull openfrontier/gerrit

2、启动gerrit容器

1)启动最简单默认配置
# docker run -d -p 8080:8080 -p 29418:29418 openfrontier/gerrit
2)启动自定义参数
# docker run \
--name gerrit \
-p 8080:8080 \
-p 29418:29418 \
-e WEBURL=http://xx.xx.xx.xx:8080 \
-e DATABASE_TYPE=mysql \
-e DB_PORT_3306_TCP_ADDR=xx.xx.xx.xx \
-e DB_PORT_3306_TCP_PORT=3306 \
-e DB_ENV_MYSQL_DB=reviewdb \
-e DB_ENV_MYSQL_USER=xxx \
-e DB_ENV_MYSQL_PASSWORD=****** \
-e SMTP_SERVER=xx.xx.com.cn \
-e SMTP_USER=xxx@xxx.com.cn \
-e SMTP_PASS=****** \
-e SMTP_FROM='Code Review <xxx@xxx.com.cn>' \
-e AUTH_TYPE=LDAP \
-e LDAP_SERVER=ldap://ip:port \
-e LDAP_ACCOUNTBASE=OU=xx,DC=xx,DC=xx,DC=com,DC=cn \
-e LDAP_USERNAME=CN=xx,OU=xx,OU=xx,DC=xx,DC=xx,DC=com,DC=cn \
-e LDAP_PASSWORD=****** \
-e LDAP_SSLVERIFY=false \
-e LDAP_REFERRAL=follow \
-e GERRIT_INIT_ARGS='--install-plugin=download-commands' \
-v /data1/gerrit/review_site:/var/gerrit/review_site \
openfrontier/gerrit
说明:
1、这里通过-e KEY=VALUE 形式指定配置gerrit的参数类型,这里指定了数据库存储、邮件通知、认证类型及配置、插件。
2、这里KEY跟gerrit.conf文件中的key映射关系,可通过[github openfrontier/docker-gerrit](https://github.com/openfrontier/docker-gerrit) 查看自定义脚本映射关联。

参考资料: gerrit 官网 gerrit 官网 documents github docker-gerrit镜像

记录Gerrit2.8.4环境迁移、安装、配置以及问题解决的更多相关文章

  1. 【转】android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

    原文网址:http://www.cnblogs.com/zdz8207/archive/2012/11/27/android-ndk-install.html android 最新 NDK r8 在w ...

  2. android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创)

      android 最新 NDK r8 在window下开发环境搭建 安装配置与使用 详细图文讲解,完整实际配置过程记录(原创) 一直想搞NDK开发却一直给其他事情耽搁了,参考了些网上的资料今天终于把 ...

  3. Centos 7环境下安装配置Hadoop 3.0 Beta1简记

    前言 由于以前已经写过一篇Centos 7环境下安装配置2.8的随笔,因此这篇写得精简些,只挑选一些重要环节记录一下. 安装环境为:两台主机均为Centos 7.*操作系统,两台机器配置分别为: 主机 ...

  4. Android NDK r8 Cygwin CDT 在window下开发环境搭建 安装配置与使用 具体图文解说

    版权声明:本博客全部文章均为原创.欢迎交流.欢迎转载:转载请勿篡改内容,而且注明出处,谢谢! https://blog.csdn.net/waldmer/article/details/3272500 ...

  5. Linux环境Hive安装配置及使用

    Linux环境Hive安装配置及使用 一.Hive Hive环境前提 二.Hive架构原理解析 三.Hive-1.2.2单机安装流程 (1) 解压apache-hive-1.2.2-bin.tar.g ...

  6. Linux环境ZooKeeper安装配置及使用

    Linux环境ZooKeeper安装配置及使用 一.ZooKeeper 1.1 zookeeper作用 1.2 zookeeper角色 1.3 zookeeper功能 二.集群规划 三.安装流程 (1 ...

  7. MySQL基础环境_安装配置教程(Windows7 64或Centos7.2 64、MySQL5.7)

    MySQL基础环境_安装配置教程(Windows7 64或Centos7.2 64.MySQL5.7) 安装包版本 1)     VMawre-workstation版本包 地址: https://m ...

  8. Windows基础环境_安装配置教程(Windows7 64、JDK1.8、Android SDK23.0、TortoiseSVN 1.9.5)

    Windows基础环境_安装配置教程(Windows7 64.JDK1.8.Android SDK23.0.TortoiseSVN 1.9.5) 安装包版本 1)     JDK版本包 地址: htt ...

  9. Linux基础环境_安装配置教程(CentOS7.2 64、JDK1.8、Tomcat8)

    Linux基础环境_安装配置教程 (CentOS7.2 64.JDK1.8.Tomcat8) 安装包版本 1)     VMawre-workstation版本包 地址: https://my.vmw ...

随机推荐

  1. 揭开服务网格~Istio Service Mesh神秘的面纱

    目录 一.写在前面 二.微服务与K8S 三.服务网格与K8S 四.常见的产品 五.Istio架构 六.Istio的核心资源介绍 6.1.VirtualService 6.2.Destination R ...

  2. 【C语言】超详讲解☀️指针是个什么针?(一次性搞定指针问题)

    目录 前言 一. 什么是指针? 引例 计算机是怎么对内存单元编号的呢? 内存空间的地址如何得到 想存地址怎么办? ​ 本质目的不是为了存地址 二.指针和指针类型 为什么有不同类型的指针 1.指针的解引 ...

  3. 温控器/胎压检测/电表/热泵显示控制器等,低功耗高抗干扰断/段码(字段式)LCD液晶显示驱动IC-VK2C22A/B,替代市面16C22,44*4/40*4点显示

    产品品牌:永嘉微电/VINKA 产品型号:VK2C22A/B 封装形式:LQFP52/48 产品年份:新年份 概述: VK2C22是一个点阵式存储映射的LCD驱动器,可支持最大176点(44SEGx4 ...

  4. Möbius 反演注记

    目录 基本理论基础 数论函数 线性筛 Mobius 反演 Dirichlet 卷积 数论分块 / 整除分块 拆函数 时间复杂度分析 基本形式 GCD 形 万能 Prod 的莫比乌斯反演 正常例题 YY ...

  5. 筛 sigma_k

    问题 定义 \(\sigma_k(n)\) 表示 \(n\) 的所有约数的 \(k\) 次方和,即 \[\sigma_k(n)=\sum_{d\mid n}d^k \] 问题:求 \(\sigma_k ...

  6. scrollTop实例

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  7. 内网渗透之Windows认证(二)

    title: 内网渗透之Windows认证(二) categories: 内网渗透 id: 6 key: 域渗透基础 description: Windows认证协议 abbrlink: d6b7 d ...

  8. ​在Docker中部署GreatSQL并构建MGR集群

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 为了方面社区用户体验GreatSQL,我们同时还提供Docker镜像,本文详细介绍如何在Docker中部署GreatSQL ...

  9. 一般处理程序ashx接入微信服务器配置

    首先在威信后台填写服务器相关配置,这里按照说明直接填写就好了.配置提交前在需要在我们服务端先准备号接受微信请求的url,对请求内容做验证. 1.准备接口配置信息 A.服务器URL 该URL用于开发者接 ...

  10. 羽夏看Linux内核——引导启动(下)

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.如有好的建议,欢迎反馈.码字不易,如果本篇文章有帮助你的,如有闲钱,可以打赏支持我的创作.如想转载,请把我的转载信息附在文章后面,并 ...