通过使用直接转移迁移群组和项目

要使用直接转移迁移极狐GitLab 群组和项目,您需要:

  1. 满足先决条件。
  2. 连接源极狐GitLab 实例。
  3. 选择要迁移的群组和项目并开始迁移。
  4. 查看导入结果。

如果遇到任何问题,您可以: 1. 取消或重试迁移。 1. 查看故障排除信息.

先决条件

  • 要求维护者角色而不是开发者角色引自极狐GitLab 16.0 并后向兼容 15.11.1 和 15.10.5。

使用直接转移迁移之前,查看如下先决条件。

网络

  • 实例之间的连接或和 JihuLab.com 之间的连接必须支持 HTTPS。
  • 防火墙不能阻止源和目标极狐GitLab/GitLab 实例之间的连接。

版本

如要增加迁移的成功率和性能,您应该:

  • 将源和目标极狐GitLab/GitLab 实例升级到极狐GitLab/GitLab 16.8 或更高版本,以使用批量导入和导出关系。
  • 迁移的版本之间尽可能是新的版本。将源和目标实例尽可能升级到最新的版本以利用的随时间修复的缺陷和改进。
  • 正确地配置 Sidekiq

我们已经成功测试了在 16.2 版本的源实例和 16.8 的目标实例之间进行迁移。

配置

  • 管理员必须在极狐GitLab/GitLab 实例上启用通过直接转移迁移群组和项目功能。
  • 您必须有一个针对源实例的个人访问令牌
    • 对极狐GitLab 15.1 及以后版本的源实例,个人访问令牌必须具有 api 范围。
    • 对于极狐GitLab 15.0 及以前版本的源实例,个人访问令牌必须具有 apiread_repository 范围。
  • 您必须在源群组具有拥有者角色。
  • 您必须在目标命名空间具有创建子群组的权限。
  • 为了导入存储在对象存储中的条目,您必须:
    • 配置 proxy_download
    • 确保目标极狐GitLab/GitLab 实例可以访问源极狐GitLab/GitLab 实例的对象存储。
  • 当源实例或群组将 默认项目创建保护 设置为 No one 时,您无法导入具有项目的群组。如果需要,此设置可以更改:

用户贡献和成员关系映射

  • 将共享和继承的共享成员直接映射为直接成员,引自极狐GitLab 16.3。
  • 如果共享和继承的共享成员在被导入的群组或项目中已经是共享或继承的共享成员,则他们将不再被映射为直接成员,此功能引自极狐GitLab 16.11。
  • 对于继承成员关系映射的支持,引自极狐GitLab 17.1。
  • 在极狐GitLab 17.5中,为了支持替代方案,从 JihuLab.com中移除了直接迁移传输功能。

极狐GitLab 私有化部署实例在无需开启任何功能标志的情况下就可以使用用户贡献和成员关系映射功能。有关极狐GitLab 私有化部署和 JihuLab.com 上更多关于启用了功能标志后可用功能的信息,可以查看用户贡献和成员关系映射

在迁移期间将不会创建用户。相反,源实例上的用户贡献和成员关系会映射到目标极狐GitLab/GitLab 实例上的用户。用户的成员关系类型取决于源实例上的成员关系类型

  • 直接成员关系会在目标实例上被映射为直接成员关系。
  • 继承成员关系会在目标实例上被映射为继承成员关系。
  • 共享成员关系会在目标实例上被映射为直接成员关系,除非用户有既有的共享成员关系。

当映射继承和共享成员关系时,如果用户在目标命名空间存在既有成员关系且角色高于被映射的角色时,成员关系就会被映射为直接成员关系。这样是为了确保成员不会被提升权限。

NOTE: 存在影响共享成员关系映射的已知问题

在目标实例上配置用户

为了确保极狐GitLab 在源实例和目标实例之间正确映射用户和他们的贡献:

  1. 在目标极狐GitLab 实例上创建必要的用户。您只能在私有化部署实例上使用 API 创建用户,因为这需要管理员权限。当要迁移到 JihuLab.com 或私有化部署实例时,您可以:
  2. 确保用户在源极狐GitLab 实例上有与目标极狐GitLab 实例上任何已确认的电子邮件地址相匹配的公共电子邮件。大多数用户会收到一封电子邮件,要求他们确认自己的电子邮件地址。
  3. 如果目标已经存在于目标实例上,并您已经在使用JihuLab.com 群组的 SAML SSO 功能,所有用户必须将他们的 SAML 身份识别链接到他们的 JihuLab.com 账号

无法在极狐GitLab UI 或通过 API 来为用户自动设置公共邮箱。

连接源极狐GitLab 实例

在目标极狐GitLab 实例上,创建您要导入的群组并连接源极狐GitLab 实例:

  1. 创建:
    • 新的群组。在左侧导航栏顶部,选择 创建新的 ( ) 和 新建群组。然后选择 导入群组
    • 新的子群组。在既有的群组页面:
      • 选择 新的子群组
      • 在左侧导航栏顶部,选择 创建新的 ( ) 和 新建子群组。然后选择 导入现有群组 链接。
  2. 输入极狐GitLab 实例的基础 URL。
  3. 输入您源极狐GitLab 实例的个人访问令牌
  4. 选择 连接实例

选择导入的群组和项目

  • 自极狐GitLab 15.8 引入,您可以导入项目具有项目的群组或仅导入群组。
  • 导入用户成员关系 勾选框引自极狐GitLab 17.6。

在您获得源极狐GitLab 实例的访问后,您被重定向到极狐GitLab群组导入器页面。这里您可以看到您在源极狐GitLab 实例上具有 Owner 角色的所有顶级群组的列表。

如果您不想从源实例上导入所有的用户成员关系,确保清除了 导入用户成员关系 勾选框。比如,源实例可能有 200 个成员,倒是您仅想导入 50 个成员。导入完成后,您就可以向群组或项目添加更多成员了。

  1. 默认情况下,提议的组命名空间与源实例中存在的名称相匹配,但是基于您的权限,您可以选择在您执行导入之前对他们进的名称进行编辑。群组和项目路径必须符合命名规则,如果需要,会自动进行规范化以避免导入失败。
  2. 找到您要导入的群组,选择:
    • 带项目导入。如果此选项不可用,可查看先决条件
    • 不带项目导入
  3. 状态 列显示每个群组的导入状态。如果页面保持打开状态,它会实时更新。
  4. 当群组被导入后,选择其极狐GitLab 路径来打开其极狐GitLab URL。
caution 导出带有项目的群组处于 beta。此功能尚未生产就绪,不建议在生产上使用。

群组导入历史

  • 部分完成 状态引自极狐GitLab 16.7。

您可以查看您通过直接转移迁移的所有群组的列表。该列表包括:

  • 源群组路径。
  • 目标群组路径。
  • 每一个导入的开始时间。
  • 每一个导入的的状态。
  • 如果出现任何错误,还包括错误详情。

为了查看群组导入历史:

  1. 登录到极狐GitLab。
  2. 在左侧导航栏,在顶部,选择 创建新的 ( ) 和 新群组
  3. 选择 导入群组
  4. 在右上角,选择 历史
  5. 如果出现任何错误,选择 显示错误 来查看它们的详情。

审核导入结果

Version history
  • 引自极狐GitLab 16.6,使用名为 bulk_import_details_page 的功能标志引入。默认情况下启用。
  • 功能标志 bulk_import_details_page 在极狐GitLab 16.8 被移除。
  • 部分完成和全部完成详情自极狐GitLab 16.9 被添加进来。
  • 在极狐GitLab 17.0 中,引入了 导入 徽章,以指示设计、史诗、问题、合并请求、注释(系统注释和评论)、片段和用户个人资料活动是否已导入。
  • Feature flag bulk_import_details_page removed in GitLab 16.8.
  • Details for partially completed and completed imports added in GitLab 16.9.

要审查某个导入的结果:

  1. 前往 劝阻导入历史页面
  2. 要查看失败导入的详情,在任何具有 失败的部分完成 状态的导入上选择 显示错误 链接。
  3. 如果导入具有 部分完成完成 状态,要查看哪些项目被导入和未被导入,选择 查看详情

当您在GitLab用户界面中看到某些项目上有导入徽章时,也可以知道该项已经被导入。

取消运行的迁移

如果需要,您可以通过 REST API 或 Rails 控制台来取消运行的迁移。

使用 REST API 取消

使用 REST API 来取消运行迁移的更多详情,可以查看取消迁移

使用 Rails 控制台取消

如要使用 Rails 控制台取消正在运行的迁移:

  1. 在目标极狐GitLab/GitLab 实例上开启一个Rails 控制台会话
  2. 使用如下命令找到最新且正在运行的迁移。将 USER_ID 替换为您启动导入的用户 ID:

    bulk_import = BulkImport.where(user_id: USER_ID).last
    
  3. 通过下面命令让导入及与其相关联的条目全部失败:

    bulk_import.entities.each do |entity|
      entity.trackers.each do |tracker|
        tracker.batches.each(&:fail_op!)
      end
      entity.trackers.each(&:fail_op!)
      entity.fail_op!
    end
    bulk_import.fail_op!
    

取消 bulk_import 不能够停止在源实例上导出项目的工作器,但可以防止目标实例:

  • 询问源实例导出更多的项目。
  • 对源实例进行其他 API 调用以进行各种检查和信息。

重试失败的或部分成功的迁移

如果您的迁移失败了,或者部分成功但缺少条目,您可以重试迁移。要重试迁移:

技术支持

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

direct-transfer