Gerrit2.16.28升级到Gerrit3.9.9

插件准备

Gerrit安装时,init可以默认安装自带的一些插件,但是我们也安装了其他插件:reviewers.jar
Gerrit不同版本,插件也互不兼容,需要下载对应版本的插件。

Gerrit3.9.9 reviewers.jar下载地址(外网打开):https://gerrit-ci.gerritforge.com/view/Plugins-stable-3.9/job/plugin-reviewers-bazel-stable-3.9/lastSuccessfulBuild/artifact/bazel-bin/plugins/reviewers/reviewers.jar

ai-code-review插件:https://gerrit-ci.gerritforge.com/job/plugin-ai-code-review-mvn-stable-3.9/lastSuccessfulBuild/artifact/target/ai-code-review-3.9.0.jar
ai-code-review-3.9.0.jar
不过实际我并没有用这个jar包,这个是后来升级完Gerrit,找有哪些插件可以用用时,才发现直接就有这个插件,白白自己花时间编译了一把。
插件源码地址:https://gerrit.googlesource.com/plugins/ai-code-review/
clone之后,用的stable-3.8分支自己在本地编译的,根据pom.xml,要求是Java17版本来编译。
ai-code-review

后来下载了Gerrit上的3.9.0.jar版本,发现插件可以加载,但是不能comment到Gerrit上去,也就换回自己编的了。

这是Gerrit最近四个版本的插件下载地址:https://gerrit-ci.gerritforge.com/
对于之前的版本插件下载地址:https://archive-ci.gerritforge.com/view/
网上和ai都说,Gerrit跨大版本升级,最好一级一级的升,不要直接升到高版本,实际操作起来,发现2.16.28直接升到3.9.9是ok的。

Gerrit war包下载

3.3.9包下载(外网):
https://www.gerritcodereview.com/releases-readme.html
https://gerrit-releases.storage.googleapis.com/gerrit-3.9.9.war

升级过程

1,备份2.16.28数据,我是通过rync传输到其他服务器,6T的数据,耗时大概十几个小时。
2,开始升级时,一定要停服,因为数据库需要升级,不支持热升级,否则会出现以下报错:
数据库升级报错
3,如果自己是半路接手的Gerrit,问下之前的负责的同事,git/目录下有没有手动备份过仓库,这边同事备份仓库数据,直接在git/目录下copy目录再改的名字,加了"_bak"之类的跟正式仓库做了区分,升级完Gerrit上出现了一堆这样的仓库,Gerrit reindex操作,会重新index一遍仓库数据,只要是git仓库,不管名字是啥,是不是.git标准后缀,都会index一下,特别耗时。发现有的备份仓库,还报错unknown commit,影响升级。所以提前确认下,升级之前先将备份仓库mv出去,减少升级总时间。
4,准备完毕就可以开始升级了,晚上搜到的升级流程都差不多,先init再reindex再启动

数据库升级

bin/gerrit.sh stop之后,清理日志和插件目录比避免冲突,再进行数据库升级

rm -rf logs/* plugins/*

2.16+ 版本使用 NoteDB 替代 PostgreSQL 存储变更数据,需执行迁移命令。
changes数据在此数据库,需要手动迁移
需要用Java 8 来进行数据库升级,否则会报错
根据服务器实际Java版本,如果默认是1.8,则不用指定,否则需要指定Java版本
–threads 8 是指定多少线程,默认是1,根据服务器的CPU核数来指定,这边服务器是32核的,没有部署其他应用,所以用了24个线程,耗时忘记了,蛮久的,好几个小时。

jdk1.8.0_321/bin/java -jar gerrit/bin/gerrit.war migrate-to-note-db --threads 24 -d gerrit/
[2025-04-15 10:11:43,748] [main] INFO  com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting core.streamFileThreshold to 1783m
[2025-04-15 10:11:44,310] [main] INFO  com.google.gerrit.server.cache.h2.H2CacheFactory : Enabling disk cache /review_site/gerrit/cache
[2025-04-15 10:11:44,361] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'WorkQueue' queue
[2025-04-15 10:11:44,365] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'ReceiveCommits' queue
[2025-04-15 10:11:44,366] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'SendEmail' queue
[2025-04-15 10:11:44,582] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'Index-Interactive' queue
[2025-04-15 10:11:44,584] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'Index-Batch' queue
[2025-04-15 10:11:44,591] [main] INFO  com.google.gerrit.server.rules.PrologEnvironment : reductionLimit: 100000, compileLimit: 1000000
[2025-04-15 10:11:44,774] [main] INFO  com.google.gerrit.server.plugins.PluginLoader : Loading plugins from /review_site/gerrit/plugins
[2025-04-15 10:11:44,789] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'RebuildChange' queue
[2025-04-15 10:11:44,814] [main] INFO  com.google.gerrit.server.config.ScheduleConfig : No schedule configuration for "gc".
[2025-04-15 10:11:44,815] [main] INFO  com.google.gerrit.server.git.GarbageCollection : [All-Users] gc config: gc.aggressive=false;
[2025-04-15 10:11:44,816] [main] INFO  com.google.gerrit.server.git.GarbageCollection : [All-Users] pack config: maxDeltaDepth=50, deltaSearchWindowSize=10, deltaSearchMemoryLimit=0, deltaCacheSize=52428800, deltaCacheLimit=100, compressionLevel=-1, indexVersion=2, bigFileThreshold=52428800, threads=0, reuseDeltas=true, reuseObjects=true, deltaCompress=true, buildBitmaps=true, bitmapContiguousCommitCount=100, bitmapRecentCommitCount=20000, bitmapRecentCommitSpan=100, bitmapDistantCommitSpan=5000, bitmapExcessiveBranchCount=100, bitmapInactiveBranchAge=90, singlePack=false
[2025-04-15 10:11:44,849] [main] INFO  com.google.gerrit.server.git.GarbageCollection : [All-Users] before: sizeOfPackedObjects=0, sizeOfLooseObjects=7956, numberOfPackedObjects=0, numberOfPackFiles=0, numberOfPackedRefs=5, numberOfLooseRefs=6, numberOfLooseObjects=58
collecting garbage for "All-Users":
Pack refs:              100% (10/10)
Counting objects:       55
Finding sources:        100% (55/55)
Getting sizes:          100% (37/37)
Compressing objects:    100% (5115/5115)
Writing objects:        100% (55/55)
Selecting commits:      100% (18/18)
Building bitmaps:       100% (18/18)
Prune loose objects also found in pack files: 100% (53/53)
Prune loose, unreferenced objects: 100% (53/53)
[2025-04-15 10:11:45,018] [main] INFO  com.google.gerrit.server.git.GarbageCollection : [All-Users] after:  sizeOfPackedObjects=6389, sizeOfLooseObjects=54, numberOfPackedObjects=55, numberOfPackFiles=1, numberOfPackedRefs=10, numberOfLooseRefs=1, numberOfLooseObjects=3
[2025-04-15 10:11:45,033] [main] INFO  com.google.gerrit.server.cache.h2.H2CacheFactory : Finishing 1 disk cache updates
NoteDB Migration complete.
Reindexing changes with:
  reindex --site-path gerrit --threads 24 --index changes
[2025-04-15 10:11:45,309] [main] INFO  com.google.gerrit.server.git.LocalDiskRepositoryManager : Defaulting core.streamFileThreshold to 1783m
[2025-04-15 10:11:45,386] [main] INFO  com.google.gerrit.server.cache.h2.H2CacheFactory : Enabling disk cache /review_site/gerrit/cache
[2025-04-15 10:11:45,402] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'WorkQueue' queue
[2025-04-15 10:11:45,402] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'Index-Interactive' queue
[2025-04-15 10:11:45,403] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'Index-Batch' queue
[2025-04-15 10:11:45,415] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'ReceiveCommits' queue
[2025-04-15 10:11:45,415] [main] INFO  com.google.gerrit.server.git.WorkQueue : Adding metrics for 'SendEmail' queue
[2025-04-15 10:11:45,420] [main] INFO  com.google.gerrit.server.rules.PrologEnvironment : reductionLimit: 100000, compileLimit: 1000000
[2025-04-15 10:11:45,724] [main] INFO  com.google.gerrit.server.plugins.PluginLoader : Loading plugins from /review_site/gerrit/plugins
Collecting projects:    6
Reindexing changes: project-slices: 100% (6/6), 100% (5/5), done
Reindexed 5 documents in changes index in 0.3s (16.1/s)
Index changes in version 50 is ready

数据库升级还是顺利的,可以正常升。
数据库升级完毕,修改相关config
etc/notedb.config:
修改前:

[noteDb "changes"]
	autoMigrate = false
	tial = false

修改后:

[noteDb "changes"]
        autoMigrate = false
        trial = false
        write = true
        read = true
        sequence = true
        primaryStorage = note db
        disableReviewDb = true

可以看一下此时Gerrit版本,还是2.16.28
etc/gerrit.config
将javaHome的值换成Java17的地址 ,database的配置可以删了,3.9.9已经不用h2数据库了

javaHome = /usr/local/jdk-17.0.14
ls -la /usr/local/jdk-17.0.14
drwxrwxr-x  9 gerrit gerrit 4096 Apr 17 11:01 .
drwxr-xr-x 21 root   root   4096 Apr 17 11:03 ..
drwxrwxr-x  2 gerrit gerrit 4096 Apr 17 11:01 bin
drwxrwxr-x  5 gerrit gerrit 4096 Apr 17 11:01 conf
drwxrwxr-x  3 gerrit gerrit 4096 Apr 17 11:01 include
drwxrwxr-x  2 gerrit gerrit 4096 Apr 17 11:01 jmods
drwxrwxr-x 72 gerrit gerrit 4096 Apr 17 11:01 legal
drwxrwxr-x  5 gerrit gerrit 4096 Apr 17 11:01 lib
lrwxrwxrwx  1 gerrit gerrit   23 Dec  3 19:07 LICENSE -> legal/java.base/LICENSE
drwxrwxr-x  3 gerrit gerrit 4096 Apr 17 11:01 man
-rw-r--r--  1 gerrit gerrit  290 Dec  3 19:07 README
-rw-r--r--  1 gerrit gerrit 1273 Dec  3 19:07 release

可以看下此时Gerrit版本,还是2.16.28

jdk1.8.0_321/bin/java -jar gerrit/bin/gerrit.war version
gerrit version 2.16.28

accounts和groups数据

都在数据里面,不用单独管

init gerrit 3.9.9

需要先初始化一下升级目标Gerrit,实际升级过程中,本来先init 和 reindex 3.0.0版本,reindex时候,出现一些错误,看起来不是版本问题,处理起来也需要时间,一夜不够,于是直接init和reindex 3.9.9版本,再处理这些问题。
这个时候就需要Java17版本了:https://www.oracle.com/java/technologies/downloads/#java17
下载jdk-17.0.14_linux-x64_bin.tar.gz包,解压到gerrit 账号可以访问的目录
init初始化不会影响已有的仓库数据,配置也会从配置文件读取,安装目录已有的东西都会再次载入。

/usr/local/jdk-17.0.14/bin/java -jar gerrit-3.9.9.war init --batch --install-all-plugins -d gerrit/
Migrating data to schema 185 ...
Migrating label configurations
... using 16 threads ...
... (0.123 s) Migrated label configurations of all 6 projects to schema 185
Initialized /review_site/gerrit

首次init时候,本来很慢也有报错,然后停掉任务,重新执行init任务,很快就完成了,显示成功。后面Gerrit不能通过gerrit.sh start启动,只能守护模式启动,估计是这个问题,抽空再重新Init一次。
Gerrit会读取gerrit.config的数据,一路回车就可以了
此时可以再看下Gerrit版本,已经变成3.9.9了

/usr/local/jdk-17.0.14/bin/java -jar gerrit/bin/gerrit.war --version

重建Gerrit索引

init完,需要重新索引,使用腾讯元宝,想加速reindex过程,发现它说的很多参数,都不支持,reindex就支持这么四个参数。

rm -rf gerrit/index/*
/usr/local/jdk-17.0.14/bin/java -jar gerrit/bin/gerrit.war reindex --index groups -d gerrit/ --threads 24
/usr/local/jdk-17.0.14/bin/java -jar gerrit/bin/gerrit.war reindex --index accounts -d gerrit/ --threads 24
/usr/local/jdk-17.0.14/bin/java -jar gerrit/gerrit.war reindex --index projects -d gerrit/ --threads 24
/usr/local/jdk-17.0.14/bin/java -jar gerrit/gerrit.war reindex --index changes -d gerrit/ --threads 24

accounts和groups reindex都比较顺利,数据不大,changes和projects都遇到了问题,为了顺利升级,直接把这些failed的仓库和change所在的仓库,先mv到其他地方了,升级完毕再处理。
用的是tmux挂后台升级,tmux记录log方法:
开始记录

tmux pipe-pane -o "cat >> /review_site/master_ori_data_back/tmux_0423.log"

停止记录

tmux pipe-pane

从执行reindex语句开始记录,所有完整log都有了,从而找到failed的仓库和change,然后mv走,再次执行。
终于折腾完毕,bin/gerrit.sh 发现直接failed了,logs/error_log也没有任何数据,然后在腾讯元宝查,以daemon模式挂在tmux里面运行中,不影响大家使用Gerrit,再一个个解决reindex遇到的问题

 /usr/local/jdk-17.0.14/bin/java -jar gerrit/bin/gerrit.war daemon -d gerrit/
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值