{{< details >}}

  • Tier: 基础版,专业版,旗舰版
  • Offering: JihuLab.com,私有化部署

{{< /details >}}

rails console session 中,您可以使用以下命令找到群组导入尝试的失败或错误信息:

# 获取相关导入记录
import = BulkImports::Entity.where(namespace_id: Group.id).map(&:bulk_import).last

# 按用户进行的替代查找
import = BulkImport.where(user_id: User.find(...)).last

# 获取导入实体列表。每个实体代表一个群组或项目
entities = import.entities

# 获取实体失败列表
entities.map(&:failures).flatten

# 按状态进行的替代失败查找
entities.where(status: [-1]).pluck(:destination_name, :destination_namespace, :status)

您还可以使用 API endpoint 查看所有与任何失败相关的迁移实体。

过时导入

由于源或目标实例上的问题,迁移可能会停止或以 timeout 状态完成。为了解决这些问题,请检查源和目标实例的日志。

源实例

在源实例上,过时的导入通常是由于过度使用内存,可能会重启 Sidekiq 进程并中断导出作业。目标实例可能会等待导出文件,直到迁移最终超时。

要检查 群组项目 关系是否成功导出,请运行以下命令:

curl --request GET --location "https://example.gitlab.com/api/v4/projects/:ID/export_relations/status" \
--header "PRIVATE-TOKEN: <your_access_token>"

如果关系的状态不是 1,则关系未成功导出,问题出在源实例上。

您还可以运行以下命令来搜索中断的导出作业。请注意,Sidekiq 日志在重启后可能会旋转,所以一定要检查旋转后的日志。

grep `BulkImports::RelationBatchExportWorker` sidekiq.log | grep "interrupted_count"

如果 Sidekiq 重启导致问题:

  • 为导出作业配置一个单独的 Sidekiq 进程。有关更多信息,请参阅 Sidekiq configuration。如果问题仍然存在,请减少 Sidekiq 并发以限制同时处理的作业数量。
  • 增加 Sidekiq 内存限制:如果您的实例有可用内存,请 增加最大 RSS 限制 以防止频繁重启。例如,您可以将限制从 2 GB 增加到 3 GB。
  • 增加最大中断计数:为了允许更多中断而不使作业失败,您可以增加 BulkImports::RelationBatchExportWorker 的最大中断计数:

    1. 添加以下配置以将限制增加到 20(默认值为 3):

      sidekiq_options max_retries_after_interruption: 20
      
    2. 重启 Sidekiq 以使更改生效。

您现在可以触发新的迁移或使用关系导出 API 手动触发导出。检查 导出状态 以查看关系是否成功导出。

例如,要触发特定项目的导出,请运行以下命令:

curl --request POST --location "https://example.gitlab.com/api/v4/projects/:ID/export_relations" \
--header "PRIVATE-TOKEN: <your_access_token>" \
--form 'batched="true"'

目标实例

在罕见的情况下,目标实例可能无法成功迁移群组或项目。

要解决此问题,请使用 import API 迁移失败的群组或项目。使用此 API,您可以单独迁移特定的群组和项目。

错误:404 群组未找到

如果您尝试导入路径仅由数字组成的群组(例如 5000),极狐GitLab 会尝试通过 ID 而不是路径查找群组。这会导致极狐GitLab 15.4 和更早版本中的 404 群组未找到 错误。

要解决此问题,您必须更改源群组路径以包含非数字字符,可以使用以下方式:

  • 极狐GitLab UI:

    1. 在左侧边栏中,选择 搜索或转到 并找到您的群组。
    2. 选择 设置 > 通用
    3. 展开 高级
    4. 更改群组 URL 下,将群组 URL 更改为包含非数字字符。
  • 群组 API

其他 404 错误

导入群组时,您可能会收到其他 404 错误,例如:

"exception_message": "Unsuccessful response 404 from [FILTERED] Bo...",
"exception_class": "BulkImports::NetworkError",

此错误表示从源实例转移时出现问题。要解决此问题,请检查您是否已满足源实例上的先决条件

不匹配的群组或项目路径名称

如果源群组或项目路径不符合 命名规则,则路径会被标准化以确保其有效。例如,Destination-Project-Path 被标准化为 destination-project-path

错误:命令以错误代码 15 退出,并且无法将 [FILTERED] 保存到 [FILTERED]

使用直接传输迁移项目时,您可能会在日志中收到错误 命令以错误代码 15 退出,并且无法将 [FILTERED] 保存到 [FILTERED]。如果您收到此错误,可以安全地忽略它。极狐GitLab 会重试已退出的命令。

错误:批次导出 [batch_number] 从源实例失败

在目标实例上,您可能会遇到以下错误:

批次导出 [batch_number] 从源实例失败:[源实例错误]

此错误发生在源实例无法导出某些记录时。最常见的原因是:

  • 磁盘空间不足
  • 由于内存不足而多次中断 Sidekiq 作业
  • 数据库语句超时

要解决此问题:

  1. 确定并修复源实例上的问题。
  2. 从目标实例中删除部分导入的项目或群组,并开始新的导入。

有关导出失败的关系和批次的更多信息,请在源实例上使用项目群组 的导出状态 API 端点。