Gitlab升级14.0.12-->14.3.6遇到的gitlab-ctl reconfigure错误

问题描述

在按照官方文档升级路线11.0.2=>17.2.2的过程中,升级14.0.12--》14.3.6时遇到一个错误:

bash 复制代码
Running handlers:
There was an error running gitlab-ctl reconfigure:

rails_migration[gitlab-rails] (gitlab::database_migrations line 51) had an error: Mixlib::ShellOut::ShellCommandFailed: bash[migrate gitlab-rails database] (/opt/gitlab/embedded/cookbooks/cache/cookbooks/gitlab/resources/rails_migration.rb line 16) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
---- Begin output of "bash"  "/tmp/chef-script20240917-12026-tupa61" ----
。。。中间略过。。。。
-- execute("ALTER TABLE \"vulnerability_finding_evidence_sources\"\nADD CONSTRAINT \"check_86b537ba1a\" CHECK (char_length(\"name\") <= 2048),\nADD CONSTRAINT \"check_0fe01298d6\" CHECK (char_length(\"url\") <= 2048)\n")rake aborted!
StandardError: An error has occurred, all later migrations canceled:

Expected batched background migration for the given configuration to be marked as 'finished', but it is 'paused':      {:job_class_name=>"CopyColumnUsingBackgroundMigrationJob", :table_name=>"ci_builds_metadata", :column_name=>"id", :job_arguments=>[["id"], ["id_convert_to_bigint"]]}

Finalize it manualy by running

	sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_builds_metadata,id,'[["id"]\, ["id_convert_to_bigint"]]']

原因调查

查询chatgpt,这个错误与数据库迁移失败有关,根据错误日志显示,问题出在某个后台迁移任务未完成。GitLab 在进行某些大表的数据迁移时,会将任务分批次处理,而你的迁移任务被暂停了,导致后续的迁移被中止。

具体原因是 GitLab 的 CopyColumnUsingBackgroundMigrationJob 后台任务没有标记为"已完成",而是处于"暂停"状态,任务没有被完全执行,因此阻止了后续迁移。这个问题通常发生在你升级 GitLab 版本时,GitLab 使用后台迁移任务处理大表(如 ci_builds_metadata 表)的数据,以避免在迁移过程中占用大量资源。

解决方案

1、检查数据库连接

bash 复制代码
sudo gitlab-rake db:migrate:status

结果显示,无法连接数据库。

2、重启数据库

bash 复制代码
sudo gitlab-ctl status postgresql
sudo gitlab-ctl start postgresql

3、执行

bash 复制代码
sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,ci_builds_metadata,id,'[["id"], ["id_convert_to_bigint"]]']

sudo gitlab-ctl reconfigure

又遇到了Redis无法连接错误:

bash 复制代码
Caused by:Redis::CannotConnectError: Error connecting to Redis on /var/opt/gitlab/redis/redis.socket (Errno::ENOENT) 

但是检查Redis服务,却是正常运行的。咨询chatgpt,有时候 Redis 启动过程中出现问题,可能导致 GitLab 其他组件无法正常启动。可以尝试重启所有 GitLab 组件。

4、执行如下步骤:

bash 复制代码
sudo gitlab-ctl restart
sudo gitlab-ctl reconfigure

又遇到错误,根据日志信息,执行:

bash 复制代码
sudo gitlab-rake gitlab:background_migrations:finalize[CopyColumnUsingBackgroundMigrationJob,taggings,id,'[["id"\, "taggable_id"]\, ["id_convert_to_bigint"\, "taggable_id_convert_to_bigint"]]']

然后再执行

bash 复制代码
sudo gitlab-ctl reconfigure

没有报错, 再执行:

bash 复制代码
sudo gitlab-rake db:migrate

没有错误,然后检查日志和服务,均已正常。

问题解决,记之。

相关推荐
我就是你毛毛哥1 天前
Docker 安装 GitLab
docker·容器·gitlab
雨声不在3 天前
gitlab中的repo删除特定commit
gitlab
vpk1124 天前
Docker Compose 部署 GitLab
docker·容器·gitlab
Irene19915 天前
什么是 DevOps
gitlab·devops
蓝天星空5 天前
GitLab上传项目到新的分支
gitlab
1candobetter8 天前
GitLab 项目创建与分支管理全流程
gitlab
林鸿群9 天前
Ubuntu 26.04 本地安装 GitLab CE 完整教程(非 Docker 方式)
linux·ubuntu·gitlab·私有部署·代码托管·ubuntu 26.04·omnibus
ascarl201010 天前
IDEA 一直弹 GitLab 登录,VS Code 却能正常 `git push`?问题排查记录
git·gitlab·intellij-idea
企鹅郁金香12 天前
Gitlab和Confluence和Svn的备份
svn·gitlab·confluence·gitlab备份·svn备份·confluence备份
barbyQAQ12 天前
GitLab CI/CD 基本用法指南
java·ci/cd·gitlab