- 过时导入
- 错误:
404 群组未找到
- 其他
404
错误 - 不匹配的群组或项目路径名称
- 错误:
命令以错误代码 15 退出,并且无法将 [FILTERED] 保存到 [FILTERED]
- 错误:
批次导出 [batch_number] 从源实例失败
{{< 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
的最大中断计数:-
添加以下配置以将限制增加到
20
(默认值为3
):sidekiq_options max_retries_after_interruption: 20
-
重启 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:
- 在左侧边栏中,选择 搜索或转到 并找到您的群组。
- 选择 设置 > 通用。
- 展开 高级。
- 在 更改群组 URL 下,将群组 URL 更改为包含非数字字符。
其他 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 作业
- 数据库语句超时
要解决此问题:
- 确定并修复源实例上的问题。
- 从目标实例中删除部分导入的项目或群组,并开始新的导入。