参考官方文档:https://gerrit-documentation.storage.googleapis.com/Documentation/2.14.2/install.html
- 使用centos6.9系统,注意关闭selinux和iptables防火墙,并创建gerrit2用户:adduser gerrit2
- 安装MySQL或者mariadb,修改utf8编码
[mysqld] ## 该段下增加如下配置:
character_set_server = utf8
character_set_client = utf8
character_set_filesystem = utf8
之后重启mysql服务。
- 安装jre(版本高于1.7,最低1.8): rpm -i jre-8u144-linux-x64.rpm,下载地址官方安装文档里面有链接
- 安装nginx,在/etc/nginx/conf.d/目录下新建或修改文件:
virtual.conf,内容如下:
server {
listen
80
;
server_name
10.0
.
30.121
; ## 本机IP
root /usr/share/nginx/html;
location / {
auth_basic
"Gerrit Code Review"
;
auth_basic_user_file /opt/gerrit2/etc/htpasswd.conf; ### 登录gerrit使用的认证密码文件
proxy_pass http:
//127.0.0.1:8888; ### gerrit监听的端口
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
error_page
404
/
404
.html;
location = /40x.html {
}
error_page
500
502
503
504
/50x.html;
location = /50x.html {
}
}
之后重启nginx服务。
- 初始化数据库
CREATE USER
'gerrit2'
@
'localhost'
IDENTIFIED BY
'123456'
; ### gerrit2为数据库用户名,
123456
为密码,或者直接用root用户和密码访问,root用户密码修改方法请百度,则只需要创建reviewdb数据库即可
CREATE DATABASE reviewdb; ### reviewdb为gerrit使用的数据库名称
GRANT ALL ON reviewdb.* TO
'gerrit2'
@
'localhost'
;
FLUSH PRIVILEGES;
- 安装gitweb:yum install gitweb
- 配置用户登录密码(需要安装httpd-tools,yum install httpd-tools):
cd /opt/gerrit2/etc
htpasswd -c htpasswd.conf admin ###之后输入两次密码,-c表示创建密码文件htpasswd.conf
htpasswd htpasswd.conf user1 ### 添加其他用户
- 初始化gerrit,先下载gerrit-2.14.2.war(https://gerrit-releases.storage.googleapis.com/index.html):
mkdir /opt/gerrit2
cp gerrit-
2.14
.
2
.war /opt/gerrit2
chown gerrit2.gerrit2 -R /opt/gerrit2
su gerrit2
java -jar /opt/gerrit2/gerrit-
2.14
.
2
.war init -d /opt/gerrit2/ # 输入选默认,插件全部安装(选Y),后面会覆盖初始化过程生成的配置文件
初始化完之后会在/opt/gerrit2/etc/目录下生成2个配置文件:
[root
@gerrit
etc]# cat gerrit.config
[gerrit]
basePath = git
serverId = a673cba0-8af3-4f69-90c6-b681bca3b638
canonicalWebUrl = http:
//10.0.30.121/ ### 访问gerrit的IP,需要与nginx配置端口相同,80可不加
[database]
type = mysql
hostname = localhost
database = reviewdb?useUnicode=yes&characterEncoding=UTF-
8
username = root ### 直接用root用户访问数据库
[index]
type = LUCENE
[auth]
type = HTTP
emailFormat = {
0
}
@yunrongtech
.com
[receive]
enableSignedPush =
false
[sendemail]
smtpServer = localhost
[container]
user = gerrit2
javaHome = /usr/java/jre1.
8
.0_144
[sshd]
listenAddress = *:
29418
[httpd]
listenUrl = http:
//*:8888/ ### gerrit服务监听端口,需要与nginx中配置相同
[cache]
directory = cache
[gitweb]
type = gitweb
cgi = /var/www/git/gitweb.cgi
gitweb这里,我一开始参考了很多资料,都没提到要加type这个配置项,都无法显示gitweb链接,浪费了很多时间,后来在官方文档里找到了这个配置项是必须要配置的,否则就相当于关闭了gitweb。https://gerrit-documentation.storage.googleapis.com/Documentation/2.14.2/config-gerrit.html#gitweb
打开changeid超链接,以及关联JIRA单号的超链接设置(追加到gerrit.config文件即可):
123456[commentlink "changeid"]match = (I[0-9a-f]{8,40})link = "#/q/$1" ### 这里要注意,官方文档描述的link参数不正确,新版本的gerrit改成了这个[commentlink "Jira"]match = (VIS-[0-9]{1,5})link = http://10.0.30.101/browse/$1gerrit自带插件也可以之后单独安装:java -jar gerrit.war init -d <SITE_PATH> [–install-plugin=PLUGIN_NAME]
[root
@gerrit
etc]# cat secure.config
[database]
password =
123456
### 数据库密码
[auth]
registerEmailPrivateKey = BfxlQzoFQlk/XGGDgrP75mt0PnLXmMXS6Ak=
之后启动gerrit服务即可:cd /opt/gerrit2/bin, ./gerrit.sh start。
这里遇到一个问题,gerrit在有些发行版部署(可能跟发行版有关,也可能是其他原因,此问题没找到解决方法)之后启动很慢,要10分钟左右,而默认超时时间是90s,导致一直提示”Starting Gerrit Code Review: FAILED”,只能修改超时时间来处理,修改方法,在gerrit.conf文件中的[container]段下增加startupTimeout=900,启动慢但是至少能用: ( 。2017-09-18补充:今天同事网上找到了一个java程序启动慢的解决方法,试了下果然有效果(我用的是kvm虚拟机启动的gerrit),首先找到jre的安装目录,可以从gerrit etc目录下的配置文件
gerrit.config
中找到javaHome = /usr/java/jre1.
8
.0_144
,然后进入其下的lib/security/目录,vi打开其中的java.security,找到securerandom.source=file:/dev/random,将file:/dev/random改成file:/dev/urandom即可解决gerrit启动慢的问题。 - 自启动配置
nginx:chkconfig nginx on
gerrit:cd /etc/init.d, ln -s /opt/gerrit2/bin/gerrit.sh gerrit, chkconfig –add gerrit
备份
- crontab脚本
[root
@gerrit
rsync]# cat /etc/cron.d/gerrit
39
2
* * * root /opt/gerrit-backup/backup.sh
[root
@gerrit
rsync]# cat /opt/gerrit-backup/backup.sh
#! /bin/bash
dt=
date +%Y%m%d
# mysql backup
mysqldump -uroot -p123456 reviewdb > /opt/gerrit-backup/reviewdb-${dt}.sql
# gerrit backup
tar Pcf /opt/gerrit-backup/gerrit2-${dt}.tar /opt/gerrit2
- rsync server
[root
@gerrit
rsync]# cat /etc/rc.local
#!/bin/sh
touch /var/lock/subsys/local
rsync --daemon --config=/etc/rsync/rsyncd.conf & ### 添加这行,自动启动rsync服务
[root
@gerrit
rsync]# cat /etc/rsync/rsyncd.conf
# Minimal configuration file
for
rsync daemon
# See rsync(
1
) and rsyncd.conf(
5
) man pages
for
help
# This line is required by the /etc/init.d/rsyncd script
pid file = /var/run/rsyncd.pid
lock file = /var/lock/rsyncd.lock
port =
10873
address =
10.0
.
30.121
uid = root
gid = root
use chroot = no
read only = no
#limit access to
private
LANs
hosts allow=
0.0
.
0.0
/
0
#hosts deny=*
max connections =
32
motd file = /etc/rsync/rsyncd.motd
#This will give you a separate log file
log file = /var/log/rsync/rsync.log
log format = %t %a %m %f %b
syslog facility = local3
timeout =
300
[gerrit]
path = /opt/gerrit-backup
list = no
ignore errors
auth users = gerrit
secrets file = /etc/rsync/rsync.pas
#comment = gerrit backup dir
#exclude =[root
@gerrit
rsync]# cat /etc/rsync/gerrit.pas ### 注意文件权限为
600
********* #### rsync密码[root
@gerrit
rsync]# cat /etc/rsync/rsync.pas ### 注意文件权限为
600
gerrit:******* #### rsync server认证使用的配置文件,包含用户名及密码,这里的密码要与上面gerrit.pas中的完全一致
- rsync client ### 在一台windows7电脑上,配置定时任务,自动执行rsync同步(Linux客户端也一样的配置):
d:\blog\gerrit.bat ### rsync client脚本文件
cd /d c:\Program Files (x86)\ICW\Bin ### rsync windows 客户端安装目录
rsync.exe -vzrtopgu --progress --delete --port=
10873
gerrit
@10
.0.
30.121
::gerrit /cygdrive/d/blog/gerrit-backup < gerrit.pas ### gerrit.pas为密码文件,与server端一致
windows任务计划(每天早上2:33分自动同步rsync server配置的目录/opt/gerrit-backup到d:\blog\gerrit-backup):
gerrit-backup.xml: ### 在任务计划程序中导入这个文件即可
<?xml version=
"1.0"
encoding=
"UTF-16"
?>
<RegistrationInfo>
<Date>
2017
-
08
-22T12:
34
:
50.8871484
</Date>
<Author>VisionStack-pc\Administrator</Author>
</RegistrationInfo>
<Triggers>
<CalendarTrigger>
<StartBoundary>
2017
-
08
-23T02:
33
:
37
</StartBoundary>
<Enabled>
true
</Enabled>
<RandomDelay>PT1H</RandomDelay>
<ScheduleByDay>
<DaysInterval>
1
</DaysInterval>
</ScheduleByDay>
</CalendarTrigger>
</Triggers>
<Principals>
<Principal id=
"Author"
>
<UserId>S-
1
-
5
-
18
</UserId>
<RunLevel>LeastPrivilege</RunLevel>
</Principal>
</Principals>
<Settings>
<MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>
<DisallowStartIfOnBatteries>
true
</DisallowStartIfOnBatteries>
<StopIfGoingOnBatteries>
true
</StopIfGoingOnBatteries>
<AllowHardTerminate>
true
</AllowHardTerminate>
<StartWhenAvailable>
true
</StartWhenAvailable>
<RunOnlyIfNetworkAvailable>
false
</RunOnlyIfNetworkAvailable>
<IdleSettings>
<StopOnIdleEnd>
true
</StopOnIdleEnd>
<RestartOnIdle>
false
</RestartOnIdle>
</IdleSettings>
<AllowStartOnDemand>
true
</AllowStartOnDemand>
<Enabled>
true
</Enabled>
<Hidden>
false
</Hidden>
<RunOnlyIfIdle>
false
</RunOnlyIfIdle>
<WakeToRun>
false
</WakeToRun>
<ExecutionTimeLimit>P3D</ExecutionTimeLimit>
<Priority>
7
</Priority>
</Settings>
<Actions Context=
"Author"
>
<Exec>
<Command>D:\blog\gerrit.bat</Command>
</Exec>
</Actions>
</Task>