温馨提示×

如何升级Linux GitLab版本

小樊
33
2025-12-20 12:38:27
栏目: 智能运维

Linux GitLab 升级实操指南

一 升级前准备

  • 确认安装方式与版本
    • 查看版本:cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
    • 确认安装方式:Omnibus 包(RPM/DEB)源码DockerKubernetes(Helm),不同方式升级步骤不同。建议优先在测试环境演练,生产环境再执行。
  • 规划升级路径
    • 必须遵循官方的升级路线(upgrade paths),先升级到当前大版本的最新补丁版,再跨到下一大版本;不要跨多个大版本直接升级。示例(旧版路径):11.4.3 → 11.11.8 → 12.0.12 → 12.1.17 → 12.10.14 → 13.0.14 → 13.1.11 → 13.8.8 → 13.12.15 → 14.0.12 → 14.3.6 → 14.9.5 → 14.10.5。实际以官方文档对应版本为准。
  • 检查后台迁移是否完成(关键!)
    • 对于 GitLab 14.0+,需同时确认后台迁移批量后台迁移均已完成:
      • 后台迁移剩余量:sudo gitlab-rails runner -e production ‘puts Gitlab::BackgroundMigration.remaining
      • 批量后台迁移状态:在管理员界面 Menu > Admin > Monitoring > Background Migrations 全部为 Finished;或 psql 查询:select job_class_name,table_name,column_name,job_arguments from batched_background_migrations where status<>3;
      • 若未完成,升级会被拦截或导致数据不一致。
  • 完整备份与回滚方案
    • 备份命令:
      • GitLab 12.2+:gitlab-backup create
      • GitLab 12.1 及更早:gitlab-rake gitlab:backup:create
    • 同时手工备份敏感文件:/etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json
    • 备份目录:grep backup_path /etc/gitlab/gitlab.rb(默认 /var/opt/gitlab/backups
    • 回滚要点:恢复时必须使用与备份时完全相同的版本与发行类型(CE/EE)

二 标准升级步骤 Omnibus 包(RPM/DEB)

  • 小版本升级(同一大版本内,如 15.1.x → 15.1.y)
    1. 可选:停止写服务以减少冲突
      • gitlab-ctl stop unicorn
      • gitlab-ctl stop sidekiq
    2. 执行升级
      • RPM:rpm -Uvh gitlab-ce-.rpm
      • DEB:dpkg -i gitlab-ce_.deb
    3. 重载配置并重启
      • gitlab-ctl reconfigure
      • gitlab-ctl restart
    4. 访问页面与版本校验:cat /opt/gitlab/embedded/service/gitlab-rails/VERSION
  • 跨大版本升级(示例思路)
    • 原则:先到当前大版本的最高补丁版,再到下一大版本的最低版,随后继续按“最高补丁版”前进。
    • 示例(历史常见路径):14.2.5 → 14.10.5 → 15.0.0 → 15.3.3(每一步执行“停止写服务 → 安装包 → reconfigure → restart → 校验”)。实际请以官方升级路线为准。
  • 升级后数据库变更
    • 如遇到数据结构变更或组件升级提示,按官方文档执行数据库迁移(例如对 PostgreSQL 的权限与迁移命令),完成后重启相关服务。

三 升级后验证与回滚

  • 快速健康检查
    • 配置与密钥:sudo gitlab-rake gitlab:check;sudo gitlab-rake gitlab:doctor:secrets
    • 页面与功能:登录、项目列表Issues/MRgit clone/pushRunner 取 jobsRegistry 镜像推送拉取等是否正常
    • 如启用 Geo,在各节点执行:sudo gitlab-rake gitlab:geo:check
  • 回滚步骤(仅在升级失败时执行)
    1. 停止服务:gitlab-ctl stop unicorn && gitlab-ctl stop sidekiq
    2. 恢复数据:gitlab-rake gitlab:backup:restore BACKUP=<时间戳_版本>(文件名去掉 “_gitlab_backup.tar” 后的部分)
    3. 还原配置与密钥:恢复 /etc/gitlab/gitlab.rb/etc/gitlab/gitlab-secrets.json
    4. 启动与校验:gitlab-ctl reconfigure;gitlab-ctl restart;访问页面确认版本与数据。

四 常见问题与处理

  • 页面 502 或 “Deploy in progress”
    • 常见于升级期间或 Sidekiq/Unicorn 未完全就绪:
      • systemctl restart gitlab-runsvdir
      • gitlab-ctl restart sidekiq
      • gitlab-ctl hup unicorn
    • 等待数分钟再访问。
  • 后台迁移未完成导致升级拦截
    • 使用上文的 Rails Runner 与 psql 查询检查;必要时增加处理后台迁移的 Sidekiq worker 数量,或在 Rails 控制台对卡住任务进行重试/接管。
  • 大版本间的组件升级耗时
    • 例如 12.0 → 12.1 会升级 Prometheus,数据转换可能耗时较长,请预留维护窗口。
  • 备份与恢复限制
    • 备份不含对象存储数据(如使用 OSS/S3 需单独备份),且恢复时必须与备份时版本与发行类型完全一致

0