docker 方式部署的gitlab 升级
升级背景: docker部署的gitlab版本11.1.4,需升级至16.0.1
思路:为了不影响目前正在使用的gitlab。
1. 将备份拷贝至另外服务器上,升级至最高版本后,另行还原
2. 直接将挂载目录中的文件拷贝至另外服务器上,升级至最高版本,另行还原--经测试,失败,不推荐使用此方法
2种方式将都进行实验。
以下是升级步骤:
升级路径参考:
https://gitlab-com.gitlab.io/support/toolbox/upgrade-path/?current=11.0.6&distro=docker&auto=true&edition=ce
升级路径:
倒序
gitlab/gitlab-ce:16.0.1-ce.0
gitlab/gitlab-ce:15.11.5-ce.0
gitlab/gitlab-ce:15.5.9-ce.0
gitlab/gitlab-ce:15.4.6-ce.0
gitlab/gitlab-ce:15.1.1-ce.0
gitlab/gitlab-ce:15.0.5-ce.0
gitlab/gitlab-ce:14.10.5-ce.0
gitlab/gitlab-ce:14.9.5-ce.0
gitlab/gitlab-ce:14.3.6-ce.0
gitlab/gitlab-ce:14.2.1-ce.0
gitlab/gitlab-ce:14.1.1-ce.0
gitlab/gitlab-ce:14.0.12-ce.0
gitlab/gitlab-ce:13.12.15-ce.0
gitlab/gitlab-ce:13.8.8-ce.0
gitlab/gitlab-ce:13.1.11-ce.0
gitlab/gitlab-ce:13.0.14-ce.0
gitlab/gitlab-ce:12.10.14-ce.0
gitlab/gitlab-ce:12.1.17-ce.0
gitlab/gitlab-ce:12.0.12-ce.0
gitlab/gitlab-ce:11.11.8-ce.0
gitlab/gitlab-ce:11.1.4-ce.0
- 准备新服务器
安装docker
略 - 拷贝备份(2种方式)
- 拷贝备份 1684908745_2023_05_24_11.1.4_gitlab_backup.tar
- 拷贝挂载目录 略
=======以下均按第一种方式还原
- 运行容器
mkdir /srv/gitlab -p
docker run -d --hostname 192.168.2.150 -p 30900:30800 --name gitlab -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:11.1.4-ce.0
docker run -d --hostname 192.168.2.150 -p 30900:30900 --name gitlab -v /data/gitlab/srv/gitlab/config:/etc/gitlab -v /data/gitlab/srv/gitlab/logs:/var/log/gitlab -v /data/gitlab/srv/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:16.0.1-ce.0
- 将备份文件拷贝至容器/var/opt/gitlab/backups
gitlab-rake gitlab:backup:restore BACKUP=1684908745_2023_05_24_11.1.4. # 注意:后面的_gitlab_backup.tar 不要,会报错文件不存在
# 耐心等待恢复完成
运行完成后,将gitlab.rb 修改
external_url 'http://192.168.2.150:30900'
删除gitlab,重新运行gitlab
- 注意: 13升到14的时候,存储需要migrate_to_hashed
1、正常的存储迁移命令:
gitlab-rake gitlab:storage:migrate_to_hashed #执行后如果有类似Enqueuing migration of 41 projects in batches of 200. Done!的提示,则说明有些项目没有迁移成功
2、readonly的项目会导致存储迁移进入background migration状态,需要进入数据库修改项目为非只读模式:
gitlab-psql #进入pg库客户端
update projects set repository_read_only = 'f'; #执行修改sql,将所有项目设置为非只读
3、几个命令:
gitlab-rake gitlab:storage:hashed_projects #查看hash存储项目总数
gitlab-rake gitlab:storage:list_legacy_projects #查看传统存储项目情况
gitlab-rake gitlab:storage:list_legacy_attachments #查看传统存储项目附件
gitlab-rake gitlab:storage:migrate_to_hashed
# 执行成功后,再次执行,会提示如下内容:
#There are no projects requiring storage migration. Nothing to do!
# 全部迁移成功,以下命令查看所列出的项目总数与页面的理应一致
gitlab-rake gitlab:storage:hashed_projects
# 查看,全部迁移成功以下两条命令应该为 0
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
如果传统存储转HASH显示成功,实际没有成功的情况,可以更新下令牌重新转HASH就可以。
具体如下:
#进入数据库终端
gitlab-rails dbconsole
#执行清空命令
UPDATE projects SET runners_token = null, runners_token_encrypted = null;
#退出
exit;
============
报错:could not open /var/opt/gitlab/.ssh/authorized_keys
在容器启动过程中迅速执行:
chown git /var/opt/gitlab/.ssh/authorized_keys
14之后升级过快
先降级到14.1.1,等迁徙完结之后,再降级到14.2.1这样的。
gitlab web管理界面有部分设置,保存设置出现 500 错误提示,即无法保存设置。
gitlab-ctl reconfigure 执行错误信息(部分):
STDOUT: rake aborted!
StandardError: An error has occurred, all later migrations canceled:PG::CheckViolation: ERROR: check constraint "check_70f294ef54" is violated by some row
……
Caused by:
ActiveRecord::StatementInvalid: PG::CheckViolation: ERROR: check constraint "check_70f294ef54" is violated by some row
……Caused by:
PG::CheckViolation: ERROR: check constraint "check_70f294ef54" is violated by some row
……
..........
STDERR:
---- End output of "bash" ----
Ran "bash" returned 1
上面的意思是说在执行数据库 db:migrate 迁移过程,即执行SQL:ALTER TABLE oauth_access_tokens VALIDATE CONSTRAINT check_70f294ef54 出现错误。
查看数据库迁移状态:
命令: gitlab-rake db:migrate:status
14.1.1直接升级至14.3会出现报错,中间需过渡14.2.1
15.4.6 升级中间需过渡15.5.9
Unexpected Error:
ThreadError: can't create Thread: Operation not permitted
从15.11.5 升级到16.0.1 时会报错以上:
原因是docker版本低造成没有权限
解决办法:
--privileged=true #添加参数,将docker容器提权到root