gitlab旧版本经常会曝出一些远程代码执行漏洞,需要升级到安全版本,这里记录一下rpm升级操作步骤,其他方式比如yum安装的gitlab可以参考官网说明:
1.gitlab不允许直接跨大版本升级,需要先升级到当前大版本的最后一个小版本,然后再升级下一个大版本的第一个小版本,
比如:11.0.x -> 11.11.x -> 12.0.x -> 12.10.x -> 13.0.x
2.下载对应版本的RPM包,下载地址:https://packages.gitlab.com/gitlab/gitlab-ce,例如gitlab-ce-13.9.7-ce.0.el7.x86_64上传到
3.停止当前的gitlab进程,执行以下命令:
gitlab-ctl stop puma
gitlab-ctl stop sidekiq
gitlab-ctl stop nginx
4.rpm -Uvh gitlab-ce-13.9.7-ce.0.el7.x86_64
5.一般而言RPM升级结束后会自动重启gitlab,可以使用命令gitlab-ctl status查看,所有子进程都为run状态则说明重启成功。如果有部分子进程没有重启,则手动执行以下命令重启:
gitlab-ctl restart
======================== gitlab 升级后500解决办法 ========================
升级以后如果访问出现500页面,可能是数据库关系迁移失败导致的:
1.执行 gitlab-rake db:migrate:status 查看,如果有down状态的,则执行步骤2
2.gitlab-rake db:migrate 升级数据库关系
3.重复步骤1,如果全部up,则执行 gitlab-ctl reconfigure
======================== 13.9.7升级14.8.4排坑 =======================
1.按照之前的方式,下载了13.12.15、14.0.0和14.8.4的包,依次升级到14.8.4后reconfigure报错
2.此时先修改gitlab.rb中gitlab_rails[auto_migrate]配置项为false(否则无法reconfigure成功,则无法回退版本)
3.执行reconfigure成功后,执行rpm -Uvh --oldpackage回退到14.0.0版本,此时访问500
4.执行gitlab-rake db:migrate:status 发现有很多down的任务,执行gitlab-rake db:migrate,然后reconfigure,访问正常
5.升级到14.8.4后执行gitlab-rake db:migrate时出现错误关键字CopyColumnUsingBackgroundMigrationJob,
在官网查看得到结果(https://docs.gitlab.com/ee/user/admin_area/monitoring/background_migrations.html#database-migrations-failing-because-of-batched-background-migration-not-finished)
发现有以下几句:
Instances running 14.0.0 - 14.0.4 should not upgrade directly to GitLab 14.2 or later, because of batched background migrations.
Upgrade first to either:
14.0.5 or a later 14.0.Z patch release.
14.1.0 or a later 14.1.Z patch release.
Batched background migrations need to finish before you update to a later version and may take longer than usual.
于是知道需要先升级到14.0.5,并且需要在升级前完成所有的后台数据迁移任务
继续查看升级到14.2.X的说明,也进一步证实这点
6.于是下载14.0.5和14.2.0的包,先升级到14.0.5,然后有以下两种方式查看后台迁移任务是否完成:
用管理员账号登录gitlab,点击Menu -> Admin -> Monitoring > Background Migrations. 查看后台迁移任务状态
执行gitlab-rails dbconsole命令,然后select * from batched_background_migrations where status <> 3;
7.如果所有后台迁移任务都完成,则继续升级到14.2.0
8.等待一天发现14.0.5有一个events表的后台迁移任务仍然无法结束,根据文档使用以下命令尝试手动结束任务
gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,events,id,'[["id"]\, ["id_convert_to_bigint"]]']
结果命令无法识别,发现这是14.1的命令,于是尝试先升级到14.1.0
9.升级到14.1.0后,使用步骤8命令停止后台迁移进程成功,使用步骤6方法连接db,
执行select * from batched_background_migrations where job_class_name = 'CopyColumnUsingBackgroundMigrationJob',发现events任务状态为3(结束)
10.升级到14.8.4成功
总结:
第一步:13.9.7 -> 13.12.15 -> 14.0.0
第二步:14.0.0 -> 14.1.0,等待后台迁移任务(这一步耗时较长,可能需要几个小时,但是务必等待大部分任务结束,否则可能需要回退版本再次等待,回退版本命令 rpm -Uvh --oldpackage gitlab-xxx.rpm)
第三步:如果有后台迁移任务卡住无法结束,则使用gitlab-rake gitlab:background_migrations:finalize手动结束,gitlab-rake db:migrate:status查看是否有down状态任务,有则需要gitlab-rake db:migrate和reconfigure
第四步:14.1.0 -> 14.8.4