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

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

问题解决,记之。

相关推荐
李迟11 小时前
CICD实例:解决GitLab Runner无法执行CICD问题
gitlab
hanjq_code2 天前
gitlab本地文件 跨分支 忽略改动 不提交
gitlab
极小狐2 天前
极狐GitLab集群高可用方案,多节点架构与故障自愈实践
架构·gitlab·高可用·极狐gitlab
极小狐3 天前
极狐GitLab主备同步延迟治理,复制滞后监控与优化方法
gitlab·极狐gitlab·geo容灾
极小狐4 天前
跨项目流水线报 404 Not Found?CI_JOB_TOKEN 允许名单 9 步排查
ci/cd·gitlab·devops·权限管理·流水线·极狐gitlab·作业令牌
极小狐4 天前
极狐GitLab双机热备搭建指南,主机备机部署与切换实操
gitlab·高可用·极狐gitlab
有同事要进步11 天前
如何在github或者是gitlab上创建空文件
gitlab·github
GoodStudyAndDayDayUp12 天前
gitlab私有化跑CICD
gitlab·gitlab私有化跑cicd
成为你的宁宁12 天前
【Gitlab测试项目】
gitlab·devops
_可乐无糖14 天前
GitLab CI 脚本之 CI_COMMIT_AUTHOR
ci/cd·gitlab