一、写在前面
公司安卓部门在扩张,尤其是我们这一拨新人进来后,本来负载就很重的Gerrit服务器更加吃不消了。前段时间,我有幸全程参与搭建了Gerrit服务器集群,在这里也将搭建过程总结记录下来,给自己也给他人做一个参考,有误或者有更好的建议都期待指教~
二、Gerrit服务器简介
简言之,就是基于Git引入的强制代码审核机制,原来是git push->Git库,现在则变成了git push->Gerrit(代码管理者审核通过)->Git库。当然这是个不严谨的描述,较为详细的介绍请参见http://www.worldhello.net/2010/11/10/2059.html
三、安装Gerrit
在探索用什么样的方案搭建服务器集群前,我们还是需要先熟悉如何搭建一个Gerrit服务器。关于这方面网上资料挺多的,这里总结了用PostgreSQL数据库+LDAP认证方式的搭建配置。
LDAP是一种轻量目录访问协议,可以近似视为一个数据库,百科告诉我它与一般数据库的区别在于,它的目标是快速响应和大容量查询并且提供多目录服务器的信息复制功能。嗯所以MIS 部门用这个来存储全公司员工的账号密码,对我们而言,只需要在Gerrit的认证部分配置好LDAP服务器,大家就可以免去注册,直接用自己的账号密码登陆了。
Gerrit初始化时支持三种数据库选择,分别是H2、MySQL和PostgreSQL。选择PostgreSQL数据库,主要是为了便于多服务器间实时共享数据库数据,MySQL也可以做到,至于为什么需要实时共享数据库,后续会进一步说明。
1、安装前准备
(1)git安装
sudo apt-get install git-core
(2)java安装
sudo apt-get install openjdk-7-jdk
(3)数据库安装+初始化(仅需要在Master上完成)
apt-get install postgresql-9.4
postgresql在安装后会默认创建用户,名为postgres。第一次登陆时软件会自动给分配一个md5加密的密码,所以虽然第一次登陆不需要输入密码,也需要修改用户postgres的密码,否则在下次登陆这个用户时会因为密码错误失败的(如果遇到这个情况可以通过修改配置文件pg_hba.conf解决)。具体流程如下:
#登陆默认用户 su postgres #进入数据库操作界面 psql #修改默认用户密码 alter user postgres with password ‘新密码‘; #创建新角色,这里命名为gerrituser,并授予创建db、role、user和登录的权限,登陆密码为777777 create role gerrituser createdb createrole createuser login password ‘777777‘; #退出当前用户 \q #登陆新用户数据库 psql -U git -h localhost -d postgres #新建database,这里命名为gerritdb create database gerritdb;
2、gerrit安装+详细配置
(1)gerrit安装
java -jar gerrit-2.9.4.war init -d review_site
(2)gerrit配置文档
在gerrit初始化完成后,会在网站目录下的etc文件夹中生成gerrit.config文件,记录当前配置信息。此时文件内容如下:
[gerrit] basePath = git #制定Git库存放位置,此时完整路径是Gerrit_Site下的子目录git。 canonicalWebUrl = http://localhost:8080/ [database] type = postgresql #下面填写刚刚创建好的数据库信息,注意密码不会显式呈现在这个配置文件。 database = gerritdb hostname = localhost username = gerrituser [index] type = LUCENE [auth] type = LDAP [ldap] server = ldap://* #LDAP认证方式,这里配置涉及敏感信息,省略。 [sendemail] smtpServer = localhost [container] user =XX #你的电脑主机名 javaHome = /usr/lib/jvm/jdk1.8.0_31/jre [sshd] listenAddress = *:29418 #通过ssh协议下载时监听的端口号,默认为29418 [httpd] listenUrl = http://*:8080/ #Gerrit服务器Web界面监听的端口 [cache] directory = cache
(3)如果需要访问远程数据库,需要修改的部分:
——对于Master(这里指创建数据库的主机)
a.修改/etc/postgresql/9.4/main/postgresql.conf中
原内容:#listen_addresses = ‘localhost‘ 修改后(去掉#注释符):listen_addresses = ‘*‘ #监听来自所有ip的访问数据库请求
b.修改/etc/postgresql/9.4/main/pg_hba.conf(hba=host-based authentication)
# IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 10.64.58.0/24 md5 #新增内容,可以新增若干ip段,表示允许该网段的主机连接与使用数据库
——对于Slaves(这里指有访问需求的主机)
注意需要通过交互界面初始化,而不是直接改config文件,因为过程中会要求输入该database的密码,这里填远程主机对应数据库的密码。
[database] type = jdbc #Gerrit服务器还提供了接口访问数据库,人性化,赞~ database = gerritdb #注意与远程主机gerrit的database名称一致 hostname = localhost #这里需要改为远程主机的ip username = gerrituser #注意与远程主机管理该database的用户名一致 url = jdbc:postgresql://Master的IP地址:5432/gerritdb #jdbc的url格式,这里ip指远程主机的ip,port为PostgreSQL用的port,默认值为5432 driver = org.postgresql.Drive