gitlab 14 版本起,全面启用哈希存储,如果从13.X版本直接升级到14.X版本,且其中的传统存储未进行转换的话,将会升级失败,有如下提示:
Legacy storage is no longer supported. Please migrate your data to hashed storage.
Check https://docs.gitlab.com/ee/administration/raketasks/storage.html#migrate-to-hashed-storage for details.
所以我们需要在13.X的最后一个版本,当前13系列最后一个版本为:13.12.12 ,将传统存储转换为哈希存储:
存储库迁移
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
但实际上这边遇到了一个奇怪的问题,每次迁移时都提示成功,多次执行都返回如下内容:
Enqueuing migration of 41 projects in batches of 200. Done!
解决办法
如果传统存储转HASH显示成功,实际没有成功的情况,可以更新下令牌重新转HASH就可以。
具体如下:
#进入数据库终端
gitlab-rails dbconsole
#执行清空命令
UPDATE projects SET runners_token = null, runners_token_encrypted = null;
#退出
exit;
# 然后重新执行 hash转储命令,校验后发现已经迁移成功!
gitlab-rake gitlab:storage:migrate_to_hashed