由于公司之前使用的是 Gitlab 9.5.5 版本,有些新功能特性是没有的,截至写该文为止,Gitlab 的最新版本为:13.2.4,本文主要谈谈我是如何从 9.5.5 升级到最新版本的。
值得注意的是:Gitlab 跨大版本升级需要把当前版本升级为当前版本的最新版本才能升级下一版本。
在整个升级过程中踩了一些坑,这里做个记录。Gitlab 版本下载地址:
这里使用的 CentOS 7 的清华源,下载速度超级快,Gitlab 安装包文件很大。
备份数据
备份的命令如下:
gitlab-rake gitlab:backup:create
此时,Gitlab 会在目录 /var/opt/gitlab/backups 生成备份压缩文件,如我这里的:1597372719_2020_08_14_9.5.5_gitlab_backup.tar
该文件包含备份的时间戳,备份的 Gitlab 版本,这些标识在我们恢复的时候会用到。
恢复数据
首先需要断开数据连接服务:
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
恢复备份:
# 修改备份文件权限,否则会报错权限不足 chmod 777 /var/opt/gitlab/backups/1597372719_2020_08_14_9.5.5_gitlab_backup.tar # 指定恢复的备份 gitlab-rake gitlab:backup:restore BACKUP=1597372719_2020_08_14_9.5.5
注意文件权限问题和恢复的版本,Gitlab 要求我们备份的 Gitlab 版本和恢复的 Gitlab 版本必须一直,否则无法恢复。
将备份文件复制到新的机器上面恢复就实现了 Gitlab 的迁移。
卸载服务
我在安装的时候一开始以为大版本内部小版本可以直接数据恢复,于是在新的机器上直接安装的该大版本的最新小版本,结果发现报错无法恢复,于是需要卸载重新安装 9.5.5 版本。
# 停止服务器 gitlab-ctl stop # 卸载服务 rpm -e gitlab-ce # 停止其它服务,通过 ps 可以看到还有 gitlab 进程残余,就是那个很多 ........ 的,把它 kill 掉 ps -ef kill -9 xxx # 删除数据目录 rm -rf /opt/gitlab rm -rf /var/opt/gitlab
安装服务
我们可以直接 yum 或者 rpm 安装下载的 rpm 包完成服务的安装:
yum install gitlab-ce-9.5.5-ce.0.el7.x86_64.rpm
安装完成之后执行初始化命令
gitlab-ctl reconfigure
如果你是卸载之后再安装的,可以会卡在:ruby_block[supervise_redis_sleep] action run
解决办法: Ctrl + c 停止安装,然后执行下面命令:
systemctl restart gitlab-runsvdir
gitlab-ctl reconfigure
此时就可以顺利初始化完成!
版本升级
以我这里的升级为例,从 9.5.5 --> 13.2.4
升级思路:
1. 准备一台机器,安装当前生产在用的 Gitlab 一样的版本,这一步很重要,如果无法满足,风险不可估量。
2. 备份当前生产的 Gitlab 的数据,传输一份到新的环境备用。
3. 准备整个升级的安装包,以我这里为例:
gitlab-ce-9.5.5-ce.0.el7.x86_64.rpm gitlab-ce-9.5.9-ce.0.el7.x86_64.rpm gitlab-ce-10.8.7-ce.0.el7.x86_64.rpm gitlab-ce-11.11.8-ce.0.el7.x86_64.rpm gitlab-ce-12.0.9-ce.0.el7.x86_64.rpm gitlab-ce-12.10.9-ce.0.el7.x86_64.rpm gitlab-ce-13.0.9-ce.0.el7.x86_64.rpm gitlab-ce-13.2.4-ce.0.el7.x86_64.rpm
可以发现,再 12 版本和 13 版本这里存在两个版本,原因是它后一个版本必须要前一个小版本才能升级过去,否则无法跨大版本升级。
4. 在新准备的环境导入备份的数据,此时我们可以得到一个和现在生产环境一模一样的 Gitlab,此时可以简单的访问测试。
5. 验证没问题后,开始升级,从先往后安装即可,如:
yum install gitlab-ce-9.5.9-ce.0.el7.x86_64.rpm
此时系统会自动帮我们升级,在升级过程中可能会让用户输入 yes 确认。
另外在升级之前 Gitlab 会进行一次自动的系统备份,如果你的数据量大,可能那一步会卡一段时间,等着就行。
以此内推,升级成功一个版本再升级下一个版本即可。升级完成后不用用户手动重启服务,服务可以照常访问。
可以通过:
http://xxx.xxx.xxx.xxx/help
这个你自己的链接查看当前 Gitlab 的版本,比如我的:
当然,某些版本在升级之后可能会报错 500+ 的问题无法访问,此时需要重新执行下配置即可:
gitlab-ctl reconfigure
6. 整个升级完成之后建议重启下 Gitlab,至此升级完成!
gitlab-ctl restart
总结:
1. 数据只需要在最初版本导入一次即可。
2. 如果出现无法访问就执行:gitlab-ctl reconfigure
3. 如果报错说升级某个版本需要至少 xxx 版本,只需要在升级过程中加入该版本即可。