通过直接转移来迁移极狐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 个实体(针对每一个运行的导入进程)。否则,可能会出现延迟和潜在的超时,因为目标实例正在等待导出的数据变得可用。

将项目分布在不同的群组能够避免超时。如果同一个群组中有多个大型项目,您可以:

  1. 将大型项目移动到不同群组或子群组。
  2. 为每个群组或子群组启动单独的迁移。

极狐GitLab UI 仅能够迁移顶级群组。使用 API,您还可以迁移子群组。

限制

硬编码限制适用于直接传输的迁移。

限制 描述
6 每个用户每分钟目标极狐GitLab 实例允许的最大迁移数。引入于极狐GitLab 15.9
210 秒 等待解压缩归档文件的最大秒数
50 MB NDJSON 行可以具有的最大长度
5 分钟 引发源实例上的空导出状态之前的最大秒数

当然,也存在其他配置限制

在极狐GitLab 16.3 及以后版本,以下先前硬编码的配置也是可以配置的了:

  • 从源头实例下载的最大关系大小(设置是 5GB)
  • 解压缩后的最大文件大小(设置是 10GB)。

您可以使用以下 API 测试最大关系大小限制:

如果任一 API 生成的文件大于最大关系大小限制,则通过直接传输进行的群组迁移将失败。

可见性规则

迁移后:

  • 私有群组和项目依旧保持私有。
  • 内部群组和项目:
    • 当拷贝进内部群组时依旧为内部项目,除非内部可见性被限制。在那种情况下(指内部可见性被限制),群组和项目变为私有。
    • 当拷贝进私有群组时变为私有。
  • 公共群组和项目:
    • 当拷贝进公共群组时保持为公共项目,除非公共可见性被限制。在那种情况下(指公共可见性被限制),群组和项目变为内部。
    • 当拷贝进内部群组时变为内部项目,除非内部可见性被限制。在那种情况下(指内部可见性被限制),群组和项目变为私有。
    • 当拷贝进私有群组时变为私有项目。

如果在源实例上使用专用网络向公众隐藏内容,请确保在目标实例上进行类似设置,或导入到专用组中。

通过直接转移的迁移流程

查看通过使用直接转移迁移群组和项目指南

技术支持

如果您在迁移过程中遇到任何问题,您可以在极狐GitLab 官方论坛上发帖求助,您也可以直接扫描下方二维码咨询专业人员:

direct-transfer