转载自: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. 啥也不是 -「OI 易犯错误整理」

    原帖出自 Nefelibata,不过他不想维护,所以就交给 STrAduts 了 awa.因为一些不可抗力,帖主转移至 XSC062.申请置顶! 前言 Nefelibata:因为笔者弱到无法形容,因此 ...

  2. Flink Window&Time 原理

    Flink 中可以使用一套 API 完成对有界数据集以及无界数据的统一处理,而无界数据集的处理一般会伴随着对某些固定时间间隔的数据聚合处理.比如:每五分钟统计一次系统活跃用户.每十秒更新热搜榜单等等 ...

  3. C++ 内存模型 write_x_read_y 试例构造

    之前一段时间偶然在 B 站上刷到了南京大学蒋炎岩(jyy)老师在直播操作系统网课.点进直播间看了一下发现这个老师实力非凡,上课从不照本宣科,而且旁征博引又不吝于亲自动手演示,于是点了关注.后来开始看其 ...

  4. 推荐几款最好用的MySQL开源客户端,建议收藏!

    一.摘要 众所周知,MYSQL 是目前使得最广泛.最流行的数据库技术之一,为了更方便的管理数据库,市场上出现了大量软件公司和个人开发者研发的客户端工具,比如我们所熟知的比较知名的客户端: Navica ...

  5. Luogu4391 [BOI2009]Radio Transmission 无线传输 (KMP)

    \(最小循环节\) \(=\) \(lenghth - next[lenghth]\) #include <iostream> #include <cstdio> #inclu ...

  6. bs4爬虫的一点心得----坑

    bs4 里提取a标签里的坑啊 今天遇到了一个很坑的事情 使用bs4(全称:BeautifulSoup)提取一个网页里所有a标签里的href属性 比较坑的地方是这个网页里有的a标签里没有href属性,所 ...

  7. 虚拟DOM解析及其在框架里的应用

    虚拟DOM解析及其在框架里的应用 浏览器是怎样解析HTML并且绘出整个页面的 上图为webkit引擎浏览器的处理流程,如上图大致分为4大步: 第一步,HTML解析器分析html,构建一颗DOM树: 第 ...

  8. 第七十三篇:解决Vue组件中的样式冲突

    好家伙, 1.组件之间的样式冲突 默认情况下,写在.vue组件中的样式会全局生效,因此很容易造成多个组件之间的样式冲突问题. 举个例子: 我们在Left.vue的组件中添加样式 <templat ...

  9. 第六十篇:Vue的基本使用

    好家伙,要来了,经典"hello world" 试用一下vue ① 导入 vue.js的 script 脚本文件 ② 在页面中声明一个将要被vue所控制的DOM区域 ③ 创建vm实 ...

  10. Linux常用基础命令三

    一.ln 软链接 软链接也称为符号链接,类似于 windows 里的快捷方式,有自己的数据块,主要存放 了链接其他文件的路径. 在查看文件目录中,软连接是以'l'开头 创建软链接 ln -s [原文件 ...