GitLab 安装迁移数据并升级

前言

假设公司有一套旧版本GitLab11.11.8,有需求将版本升级至最新,版本落后太多,按照官方升级文档要求,需逐步进行版本升级,无法跨版本进行升级。
以下搭建一套新环境,将旧环境数据迁移新环境,在新环境下进行升级操作,待升级测试完成后,再切换新环境使用。

迁移步骤

# 添加仓库地址
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash

# 安装指定版本(根据线上要求11.11.8)
yum install gitlab-ce-11.11.8-ce.0.el7.x86_64

# 复制秘钥文件
cp -rp /data/gitlab/gitlab-secrets.json /etc/gitlab/gitlab-secrets.json

# 按需复制主配置文件
mv /etc/gitlab/gitlab.rb /etc/gitlab/gitlab.rb.default
cp -rp /data/gitlab/gitlab.rb /etc/gitlab/gitlab.rb

# 重新配置gitlab
gitlab-ctl reconfigure

# 复制备份文件到指定目录(注意属组一定要一致git)
cp -rp /data/1640718928_2021_12_29_11.11.8_gitlab_backup.tar /var/opt/gitlab/backups

# 还原备份数据,BACKUP参数对应备份文件名前缀序列
gitlab-rake gitlab:backup:restore BACKUP=1571687782_2019_10_22_9.3.0
# 还原数据流程
- 1. 解压备份文件
- 2. 询问是否清空所有数据,覆盖还原
- 3. 询问是否还原authorized_keys

# 重启gitlab
gitlab-ctl restart

# 测试验证

升级步骤

根据版本逐步升级,不能跨大版本升级
查看对应版本
下载安装包
官方建议升级顺序:11.11.8 -> 12.0.12 -> 12.1.17 -> 12.10.14 -> 13.0.14 -> 13.1.11 -> 13.8.8 -> latest 13.12.Z -> latest 14.0.Z -> latest 14.1.Z -> latest 14.Y.Z

# 关闭部分gitlab服务,主要停掉入口及连接
gitlab-ctl stop unicorn sidekiq nginx

# 升级gitalb(每一步升级完成后都需要重新配置并重启)
sudo yum install gitlab-ce-12.0.12-ce.0.el7.x86_64
sudo yum install gitlab-ce-12.1.17-ce.0.el7.x86_64
sudo yum install gitlab-ce-12.2.5-ce.0.el7.x86_64
sudo yum install gitlab-ce-12.10.14-ce.0.el7.x86_64
sudo yum install gitlab-ce-13.0.14-ce.0.el7.x86_64
sudo yum install gitlab-ce-13.1.11-ce.0.el7.x86_64
sudo yum install gitlab-ce-13.8.8-ce.0.el7.x86_64
sudo yum install gitlab-ce-13.12.12-ce.0.el7.x86_64
sudo yum install gitlab-ce-14.0.11-ce.0.el7.x86_64
sudo yum install gitlab-ce-14.1.8-ce.0.el7.x86_64

# 重新配置gitlab
gitlab-ctl reconfigure

# 重启gitlab
gitlab-ctl restart

# 登录检查版本

报错解决方案

问题1:存储库中有传统存储

  • 13 升级到 14 升级过程中可能会报如下的错误,导致原因,14 版不再支持传统存储。
  • 13 版默认启用了hash存储,软件内部会自动做数据迁移,从传统存储转至hash存储。
  • 14 版将不对旧存储提供支持,所以升级 14 版本前,请先做数据迁移。

解决方案:从传统存储迁移至hash存储

注:需先解决项目`read-only`打开导致迁移失败的情况
# 进入 Rails 控制台
gitlab-rails console

# 查询项目 read-only 打开的 
projects = Project.where(repository_read_only: true)

# 关闭项目的 read-only
projects.each do |p|
  p.update!(repository_read_only:nil)
end

# 存储库迁移
gitlab-rake gitlab:storage:migrate_to_hashed

# 查看hash存储项目总数,应与管理页面的一致
gitlab-rake gitlab:storage:hashed_projects

# 查看传统存储项目及附件数,此时应为0
gitlab-rake gitlab:storage:list_legacy_projects
gitlab-rake gitlab:storage:list_legacy_attachments

# 确保存储库都迁移到 hash 再升级
# 重启,重配

常用操作命令

# 查看版本信息
gitlab-rake gitlab:env:info

# 创建备份
gitlab-rake gitlab:backup:create

# 恢复备份
gitlab-rake gitlab:backup:restore BACKUP=1571687782_2019_10_22_9.3.0

# 重新配置GitLab服务
gitlab-ctl reconfigure

# 检查GitLab服务状态
gitlab-rake gitlab:check

# 检查GitLab服务状态
gitlab-ctl status

# 停止所有GitLab服务
gitlab-ctl stop

# 重新启动所有GitLab服务
gitlab-ctl restart

# 可以通过在最后证明服务名称来重新启动特定服务
gitlab-ctl restart logrotate

# 查看所有的logs; 按 Ctrl-C 退出
sudo gitlab-ctl tail

# 拉取/var/log/gitlab下子目录的日志
sudo gitlab-ctl tail gitlab-rails

# 拉取某个指定的日志文件
sudo gitlab-ctl tail nginx/gitlab_error.log

# 查看hash存储项目数及附件数
gitlab-rake gitlab:storage:hashed_projects
gitlab-rake gitlab:storage:hashed_attachments

# 查看传统存储项目及附件数
gitlab-rake gitlab:storage:legacy_projects
gitlab-rake gitlab:storage:legacy_attachments

# 列出传统存储项目列表及附件列表
gitlab-rake gitlab:storage:list_legacy_projects
gitlab-rake gitlab:storage:list_legacy_attachments

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容