docker 方式部署的gitlab 升级

发布时间 2023-05-25 16:17:59作者: 大葱丁

升级背景: 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

  1. 准备新服务器
    安装docker
  2. 拷贝备份(2种方式)
    1. 拷贝备份 1684908745_2023_05_24_11.1.4_gitlab_backup.tar
    2. 拷贝挂载目录 略
      =======以下均按第一种方式还原
  3. 运行容器
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




  1. 将备份文件拷贝至容器/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

  1. 注意: 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这样的。

14.1.1直接升级至14.3会出现报错,中间需过渡14.2.1
15.4.6 升级中间需过渡15.5.9