如何解决GitLab CE 14.1.6版本升级失败的问题
GitLab 14.1.6 升级故障解决步骤
根因说明
- 升级中断根因:GitLab 14.x版本对主键字段做int转bigint的改造,要求所有前置批量后台迁移任务完成后才能执行后续数据库变更,升级时
events表的id迁移任务仍处于运行状态,所以触发报错。 - 手动执行命令报JSON解析错误根因:报错提示里的命令自带HTML转义符和Shell转义反斜杠,直接复制执行会导致传入rake的参数不符合JSON格式要求,触发解析失败。
操作步骤
- 先确认后台迁移任务状态
sudo gitlab-rails runner -e production 'puts Gitlab::Database::BackgroundMigration::BatchedMigration.where(job_class_name: "CopyColumnUsingBackgroundMigrationJob", table_name: "events", column_name: "id").pluck(:status, :job_arguments)'
返回结果中状态为1代表任务仍在运行,若GitLab数据量较大,可先等待30分钟让任务自动完成,再执行sudo gitlab-ctl reconfigure尝试继续升级流程,无需手动执行迁移命令。
- 若等待后任务仍未完成,执行正确格式的手动迁移命令
sudo gitlab-rake 'gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,events,id,[["id"],["id_convert_to_bigint"]]]'
该命令用单引号包裹整个rake任务参数,避免Shell对中括号、双引号做额外转义,可解决JSON解析报错问题。
- 验证迁移任务状态
sudo gitlab-rails runner -e production 'puts Gitlab::Database::BackgroundMigration::BatchedMigration.where(job_class_name: "CopyColumnUsingBackgroundMigrationJob", table_name: "events", column_name: "id").pluck(:status)'
返回结果为3代表任务已完成。
- 继续完成升级流程
# 重新执行GitLab配置初始化 sudo gitlab-ctl reconfigure # 修复dpkg安装中断的报错 sudo apt install -f
- 验证服务状态
sudo gitlab-ctl status
确认所有进程状态为running后,访问GitLab页面验证功能正常即可。
内容的提问来源于stack exchange,提问作者Ragnar
相关产品推荐
相关产品推荐

