从其它实例迁移群组

  • 引入于 13.7 版本。
  • 部署于功能标记之后,默认禁用。
在自助管理实例上,此功能默认启用。要隐藏此功能,询问管理员禁用名为 bulk_import 的功能标志。

您可以将现有的顶级群组迁移到以下任何一个:

  • 另一个极狐GitLab 实例。
  • 另一个顶级群组。
  • 任何现有顶级群组的子组。

迁移群组与群组导入/导出不同:

  • 群组导入/导出要求您将群组导出到文件,然后将该文件导入另一个极狐GitLab 实例。
  • 群组迁移使此过程自动化。

将您的群组导入极狐GitLab

迁移群组时,您连接到极狐GitLab 实例,然后选择要导入的群组。并非所有数据都迁移,查看迁移的资源列表,获取详细信息。

note您可能需要重新配置防火墙,以免阻止自助管理实例上的连接。

连接到远端极狐 GitLab 实例

在开始之前,请确保目标极狐GitLab 实例可以通过 HTTPS 与源实例通信(不支持 HTTP)。您可能需要重新配置防火墙,以免阻止自助管理实例上的连接。

然后创建要导入的群组,并连接:

  1. 创建一个新群组或子组:

    • 在顶部栏上,选择 +,然后选择 新建群组
    • 或者,在现有群组页面的右上角,选择 新建子组
  2. 选择 导入群组
  3. 输入极狐GitLab 实例的源 URL。
  4. 在远端极狐GitLab 实例上,生成或复制具有 apiread_repository 范围的个人访问令牌
  5. 输入远端极狐GitLab 实例的个人访问令牌
  6. 选择 连接实例

选择要导入的群组

在您授权访问极狐GitLab 实例后,您将被重定向到 GitLab Group Migration 导入器页面,列出了您拥有所有者角色的远端群组。

  1. 默认情况下,建议的群组命名空间与远端实例中存在的名称匹配,但根据您的权限,您可以选择在继续导入任何名称之前,编辑这些名称。
  2. 在要导入的群组旁边,选择 导入
  3. 状态 列显示每个群组的导入状态。如果您让页面保持打开状态,它会实时更新。
  4. 导入群组后,选择其极狐GitLab 路径,打开其极狐GitLab URL。

Group Importer page

迁移的资源

仅将以下资源迁移到目标实例。任何其它项目都迁移:

  • 群组(引入于 13.7)
    • 描述
    • 属性
    • 子组
    • 头像(引入于 14.0)
  • 群组标记(引入于 13.9)
    • 标题
    • 描述
    • 颜色
    • 创建时间(引入于 13.10)
    • 更新时间(引入于 13.10)
  • 成员(引入于 13.9) 在以下情况下,群组成员与导入的群组相关联:
    • 该用户已经存在于目标实例中并且
    • 用户在源实例中拥有与目标实例中确认的电子邮件,匹配的公共电子邮件
  • 史诗(引入于 13.7)
    • 标题
    • 描述
    • 状态(开放/已关闭)
    • 开始日期
    • 截止日期
    • 看板上的史诗顺序
    • 机密性
    • 标记(引入于 13.9)
    • 作者(引入于 13.9)
    • 父史诗(引入于 13.9)
    • 使用 emoji(引入于 13.9)
    • 事件(引入于 13.10)
  • 里程碑(引入于 13.10)
    • 标题
    • 描述
    • 状态(启用/已关闭)(active / closed)
    • 开始日期
    • 截止日期
    • 创建时间
    • 更新时间
    • iid(引入于 13.11)
  • 迭代(引入于 13.10)
    • iid
    • 标题
    • 描述
    • 状态 (即将到来 / 已开始 / 已结束)
    • 开始日期
    • 截止日期
    • 创建时间
    • 更新时间
  • 徽章(引入于 13.11)
    • 名称
    • 链接 URL
    • 图片 URL
  • 看板
  • 看板列表
  • 发布
    • 里程碑(引入于 15.0)

群组迁移故障排查

rails 控制台会话中,您可以使用以下命令查找群组导入尝试的失败或错误消息:

# Get relevant import records
import = BulkImports::Entity.where(namespace_id: Group.id).map(&:bulk_import)

# Alternative lookup by user
import = BulkImport.where(user_id: User.find(...)).last

# Get list of import entities. Each entity represents either a group or a project
entities = import.entities

# Get a list of entity failures
entities.map(&:failures).flatten

# Alternative failure lookup by status
entities.where(status: [-1]).pluck(:destination_name, :destination_namespace, :status)

过时的导入

引入于 14.10 版本

在对群组迁移进行故障排除时,导入可能无法完成,因为导入 workers 的执行时间超过 8 小时。在这种情况下,BulkImportBulkImport::Entitystatus3timeout):

# Get relevant import records
import = BulkImports::Entity.where(namespace_id: Group.id).map(&:bulk_import)

import.status #=> 3 means that the import timed out.