转载自: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. 5-3 Dubbo | 负载均衡

    Dubbo概述 什么是RPC RPC是Remote Procedure Call的缩写 翻译为:远程过程调用 目标是为了实现两台(多台)计算机\服务器,互相调用方法\通信的解决方案 RPC的概念主要定 ...

  2. Nginx配置解决NetCore的跨域

    使用Nginx配置解决NetCore的跨域 废话不多说,直接上Nginx配置 server { listen 80; server_name 你的Id或域名; location / { add_hea ...

  3. VS Code + GitHub

    来到博客园学着别人美化了一下自己的博客页面,蛮好看的,然后右上角有一个"Fork me on GitHub".之前就因为好奇而注册过GitHub,但一直不会使,现在正式开始编程学习 ...

  4. mysql like 命中索引

    反向索引案例:CREATE TABLE my_tab(x VARCHAR2(20)); INSERT INTO my_tab VALUES('abcde'); COMMIT; CREATE INDEX ...

  5. 新型MPP的Doris数据库:数据模型和数据分区使用详解

    Apache Doris是一个现代化的MPP分析性数据库产品.是一个由百度开源,在2018年贡献给Apache基金会,成为有顶级开源项目.仅需要亚秒级响应时间即可获得查询结果,可以有效地支持实时数据分 ...

  6. Docker部署kafka|Go操作实践

    前言 写作本文的背景是由于字节的暑期青训营中,某个项目要求编写一个简易的流处理引擎(flink),开发语言不限,推荐Java,本着好奇心的驱使,我打算使用Go语言进行部分尝试. 既然是流处理引擎,那么 ...

  7. 议题征集令 | Apache DolphinScheduler Meetup 2021 来啦,议题征集正式开启!

    点击上方 蓝字关注我们 社区的小伙伴们,经过精心筹备,我们很高兴地宣布,Apache DolphinScheduler Meetup 2021 将于 2021 年 11 月 27 日到来! 在 Mee ...

  8. 数据分表Mybatis Plus动态表名最优方案的探索

    一.应用场景 大家在使用Mybatis进行开发的时候,经常会遇到一种情况:按照月份month将数据放在不同的表里面,查询数据的时候需要跟不同的月份month去查询不同的表. 但是我们都知道,Mybat ...

  9. Sonatype Nexus3 搭建私有仓库

    Nexus是Sonatype提供的仓库管理平台,Nuexus Repository OSS3能够支持Maven.npm.Docker.YUM.Helm等格式数据的存储和发布:并且能够与Jekins.S ...

  10. Win32 - 窗口

    Win32 - 窗口 目录 Win32 - 窗口 前言 流程图 创建项目 VS MinGW Win32API字符串 Unicode 和 ANSI 函数 TCHAR WinMain:Win32 Appl ...