前言
假设公司有一套旧版本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