通过直接转移来迁移极狐GitLab
迁移极狐GitLab 群组包括以下类型:
- 从私有化部署版极狐GitLab 迁移到 JihuLab.com。
- 从 JihuLab.com 迁移到私有化部署版极狐GitLab。
- 从一个私有化部署版极狐GitLab 实例迁移到另一个。
- 同一极狐GitLab 实例中的群组之间的迁移。
通过直接转移进行迁移将会创建一个新的群组副本。如果您想移动群组而不是拷贝群组,您可以转移群组,当然,前提是群组在同一个实例上。转移群组而不是迁移群组是一种更快、更完整的选择。
您可以通过两种方式迁移群组:
- 通过直接传输(推荐)。
- 通过上传导出文件。
如果您从私有化部署版极狐GitLab 迁移到 JihuLab.com,管理员可以在私有化部署版实例上创建用户。
在私有化部署版上,迁移群组资源功能默认不可用,要在界面上显示此功能,请让管理员在应用设置中启用它。
通过直接传输迁移群组,将群组从一个地方复制到另一个地方。您可以:
- 一次复制多个群组。
- 将顶级群组复制到:
- 另一个顶级群组。
- 任何现有顶级群组的子组。
- 另一个实例,包括 JihuLab.com
- 在 API 上,将顶级群组或子群组拷贝到对应的位置上。
- 复制群组的同时复制项目(处于 beta 阶段,尚未准备好用于生产)或不复制项目。复制群组的同时复制项目在以下情况可用:
- 在 JihuLab.com 上默认可用。
并非所有群组和项目资源都被复制。请参阅下面的复制资源列表:
如果您想移动群组而不是复制群组,如果群组在同一个实例中,您可以转移群组。转移群组是一种更快、更完整的选择。
预估迁移时间
预估通过直接传输进行迁移所需的时间比较困难。以下因素影响迁移持续时间:
- 源和目标极狐GitLab 实例上可用的硬件和数据库资源。源实例和目标实例上的资源越多,迁移时间就越短,因为:
- 源实例接收 API 请求,并提取和序列化要导出的实体。
- 目标实例运行作业并在其数据库中创建实体。
- 要导出的数据的复杂性和大小。例如,假设您想要迁移两个不同的项目,每个项目有 1000 个合并请求。如果其中一个项目在合并请求上有更多附件、评论和其他内容,则这两个项目需要的迁移时间可能相差非常大。因此,项目上的合并请求数量并不能很好地预测项目迁移所需的时间。 没有确切的公式可以可靠地预估迁移时间。但是,每个流水线 worker 导入项目关系的平均时间可以帮助您大概了解导入项目所需的时间:
项目资源类型 | 导入记录的平均时间(秒) |
---|---|
空项目 | 2.4 |
仓库 | 20 |
项目参数 | 1.5 |
成员 | 0.2 |
标记 | 0.1 |
里程碑 | 0.07 |
徽章 | 0.1 |
议题 | 0.1 |
代码片段 | 0.05 |
代码片段仓库 | 0.5 |
议题板 | 0.1 |
合并请求 | 1 |
外部拉取请求 | 0.5 |
受保护分支 | 0.1 |
项目功能 | 0.3 |
容器到期策略 | 0.3 |
服务台设置 | 0.3 |
发布 | 0.1 |
CI 流水线 | 0.2 |
提交备注 | 0.05 |
Wiki | 10 |
上传 | 0.5 |
LFS 对象 | 0.5 |
设计 | 0.1 |
自动 DevOps | 0.1 |
流水线计划 | 0.5 |
引用 | 5 |
推送规则 | 0.1 |
尽管很难预测迁移时间,但是我们已经看到:
- 100 个项目(19.9k 议题、83k 合并请求、100+ 流水线)在 8h 内完成了迁移。
- 1926 个项目(22k 议题、160k 合并请求、1.1million 流水线)在 34h 内完成了迁移。
如果您正在迁移大型项目并遇到超时或迁移持续时间的问题,请参阅减少迁移持续时间。
减少迁移时间
下面是一些可以减少迁移时间的策略。
将 Sidekiq 工作器添加到目标实例
无论目标极狐GitLab 实例上可用的 Sidekiq 工作器数量有多少,单个直接转移迁移任务每次会只会导入五个实体(群组或项目)。目标实例上更多的 Sidekiq 工作器可以减少每个实体导入所需的时间,只要目标实例有足够的资源来处理额外的并发作业。在极狐GitLab 16.8 及以后版本中,引入了群组或项目关系的批量导入和导出,目标实例上可用的 Sidekiq 工作器数量变得更加关键。
更多关于在目标实例上添加 Sidekiq 工作器的详情,可以查看Sidekiq 配置。
重新分配大型项目或启动单独的迁移
源实例上应该有足够多数量的工作器来并行导出 5 个实体(针对每一个运行的导入进程)。否则,可能会出现延迟和潜在的超时,因为目标实例正在等待导出的数据变得可用。
将项目分布在不同的群组能够避免超时。如果同一个群组中有多个大型项目,您可以:
- 将大型项目移动到不同群组或子群组。
- 为每个群组或子群组启动单独的迁移。
极狐GitLab UI 仅能够迁移顶级群组。使用 API,您还可以迁移子群组。
限制
硬编码限制适用于直接传输的迁移。
限制 | 描述 |
---|---|
6 | 每个用户每分钟目标极狐GitLab 实例允许的最大迁移数。引入于极狐GitLab 15.9 |
210 秒 | 等待解压缩归档文件的最大秒数 |
50 MB | NDJSON 行可以具有的最大长度 |
5 分钟 | 引发源实例上的空导出状态之前的最大秒数 |
当然,也存在其他配置限制。
在极狐GitLab 16.3 及以后版本,以下先前硬编码的配置也是可以配置的了:
- 从源头实例下载的最大关系大小(设置是 5GB)
- 解压缩后的最大文件大小(设置是 10GB)。
您可以使用以下 API 测试最大关系大小限制:
如果任一 API 生成的文件大于最大关系大小限制,则通过直接传输进行的群组迁移将失败。
可见性规则
迁移后:
- 私有群组和项目依旧保持私有。
- 内部群组和项目:
- 当拷贝进内部群组时依旧为内部项目,除非内部可见性被限制。在那种情况下(指内部可见性被限制),群组和项目变为私有。
- 当拷贝进私有群组时变为私有。
- 公共群组和项目:
如果在源实例上使用专用网络向公众隐藏内容,请确保在目标实例上进行类似设置,或导入到专用组中。
通过直接转移的迁移流程
技术支持
如果您在迁移过程中遇到任何问题,您可以在极狐GitLab 官方论坛上发帖求助,您也可以直接扫描下方二维码咨询专业人员: