You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab Omnibus升级后NullifyOrphanRunnerIdOnCiBuilds迁移任务卡73%失败求助

GitLab Omnibus 迁移任务「NullifyOrphanRunnerIdOnCiBuilds: ci_builds」失败排查与解决

基本信息

  • 安装方式:自托管GitLab Omnibus
  • 当前版本:15.11.6
  • 升级路径:从12.8.1多次升级至15.11.6

问题现象

升级完成后,后台迁移任务「NullifyOrphanRunnerIdOnCiBuilds: ci_builds」中途失败,始终卡在73.00%进度,重试后仍卡在该节点并再次失败。

任务运行状态截图

任务运行截图

报错消息截图

报错消息截图

解决办法

1. 定位具体报错原因

先查看迁移日志和数据库日志,确定卡顿/失败的根源:

# 查看GitLab迁移日志
sudo gitlab-ctl tail gitlab-rails/migration.log

# 查看PostgreSQL日志
sudo gitlab-ctl tail postgresql

重点关注是否存在锁表、数据量过大、数据约束冲突等问题。

2. 手动分批处理迁移数据

若因ci_builds表数据量过大导致超时,可手动拆分迁移操作:

  1. 暂停GitLab服务避免数据写入干扰:
sudo gitlab-ctl stop
  1. 进入PostgreSQL控制台:
sudo gitlab-psql
  1. 分批更新孤儿runner_id记录:
-- 先统计待处理记录数
SELECT COUNT(*) FROM ci_builds WHERE runner_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ci_runners WHERE id = ci_builds.runner_id);

-- 每次更新1000条,重复执行直到完成
UPDATE ci_builds SET runner_id = NULL WHERE runner_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ci_runners WHERE id = ci_builds.runner_id) LIMIT 1000;
  1. 标记迁移任务为已完成:
sudo gitlab-rails runner "Migration.where(name: 'NullifyOrphanRunnerIdOnCiBuilds').update_all(status: 2)"
  1. 重启GitLab服务:
sudo gitlab-ctl start

3. 调整迁移超时配置

若为超时导致失败,可临时延长迁移超时时间:

  1. 编辑GitLab配置文件:
sudo nano /etc/gitlab/gitlab.rb
  1. 添加或修改超时设置:
gitlab_rails['db_migration_timeout'] = 3600 # 设置为1小时,可按需调整
  1. 重新配置并重启服务:
sudo gitlab-ctl reconfigure
sudo gitlab-ctl restart
  1. 重新执行迁移:
sudo gitlab-rake db:migrate

4. 修复数据异常

若日志显示数据约束冲突,先修复异常数据:

-- 查找异常记录
SELECT * FROM ci_builds WHERE runner_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ci_runners WHERE id = ci_builds.runner_id);

-- 修复异常记录
UPDATE ci_builds SET runner_id = NULL WHERE runner_id IS NOT NULL AND NOT EXISTS (SELECT 1 FROM ci_runners WHERE id = ci_builds.runner_id);

内容的提问来源于stack exchange,提问作者Felipe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:57:27