记录Gerrit2.8.4环境迁移、安装、配置以及问题解决

前段时间,由于公司内部调整,需要将原gerrit系统中部分业务拆分迁移到新gerrit系统中,这里我就将整个环境迁移、环境搭建、环境配置、版本选择等做一下记录,分享给大家。

说到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镜像

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏python3

LDAP认证服务器

1.要准备的环境与软件(这里测试环境是Centos6.0-64位系统) alfresco-community-4.2.c-installer-linux-x64...

1532
来自专栏Netkiller

跟我学 systemd

跟我学 systemd 摘要 我的系列文档 Netkiller Architect 手札Netkiller Developer 手札Netkiller PHP ...

35912
来自专栏Golang语言社区

Go语言实现的WebSocket

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

1832
来自专栏Java帮帮-微信公众号-技术文章全总结

Web-第十九天 Linux学习【悟空教程】

UNIX操作系统是商业版,需要收费,价格比Microsoft Windows正版要贵一些。不过UNIX有免费版的,例如:NetBSD等类似UNIX版本。

1164
来自专栏逢魔安全实验室

中间件安全-Tomcat安全测试概要

关注我们,掌握成员招募最新动态! Web安全中很重要的一个部分就是中间件的安全问题,而中间件的安全问题主要来源于两部分,一个是中间件本身由于设计缺...

3498
来自专栏互联网杂技

Linux常用命令大全

系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecod...

2677
来自专栏苍云横渡学习笔记

【Django】在项目中配置Mailgun并发送邮件

原文链接:http://www.cloudcrossing.xyz/post/26/

55710
来自专栏沈唁志

在Debian 7上安装和配置OSSEC

OSSEC是一个开源的,基于主机的入侵检测系统(HIDS),可执行日志分析,完整性检查,rootkit检测,基于时间的警报和主动响应,使其成为服务器监控的理想选...

1132
来自专栏blackpiglet

使用 Docker 部署 MediaWiki

MediaWiki 是 Wikipedia 使用的网站解决方案的开源版,以个人观点来看,Wiki 在这个时代显得不够时尚,且不支持 MarkDown 等新兴的标...

1254
来自专栏owent

Lnmp yum 安装脚本 (for CentOS)

心情大好,给VPS升级了一下系统,然后自己配了LNMP安装脚本,用yum源安装的话更新比较方便点哈 ​​这个过程挺麻烦啊,所以果断要记下来,以防以后要用到 ...

1371

扫码关注云+社区