故障排查

工具不开始导出

提示信息 含义
give --url, or set JIRA_URL 没有提供站点地址。
give --email and --api-token ... or --pat 没有提供凭据,或者两种凭据都提供了。只提供一种。
... are all set: unset the ones for the other kind of site Cloud 变量和 JIRA_PAT 同时设置了。取消其中一组。
name at least one project key 传入 --project KEY,或设置 JIRA_PROJECTS。
... already holds a bundle / is not empty --out 指向的是已有的导入包,或是一个非空目录。换一个新路径。
put credentials in --email/--api-token or --pat, never in the URL --url 中包含了用户名或密码。把它们去掉。
未知项目(退出状态 2) 项目键不存在,或者该账户无权浏览它。检查项目键和账户的访问权限。
属于另一次导出的状态 之前有一次未完成的运行使用了不同的选项。传入 --restart,或沿用原来的选项。

如果凭据类型与站点不匹配(例如对 Cloud 站点使用个人访问令牌),工具同样会拒绝。请使用身份验证中说明的凭据。

401 和 403 响应

  • 401 表示凭据未被接受。Cloud 站点检查邮箱地址和 API 令牌,Data Center 站点检查个人访问令牌。令牌可能已过期或被撤销。
  • 整个项目返回 403 表示该账户无权浏览这个项目。在 Jira 中给账户授权。
  • 某一类数据返回 403 不会中断导出。工具会计数并继续:
  • 自定义字段上下文(Cloud 上需要 Administer Jira(管理 Jira)权限):该字段随后会应用到有工作项使用它的项目;
  • 关注者(View voters and watchers(查看投票人和关注者)):只统计关注者数量,不迁移;
  • 项目的看板:冲刺以工作项中引用的为准;
  • 附件:计入“被 Jira 拒绝”。

查看清单文件中的 not_carried_over,可以知道发生了哪些情况、各发生了多少次。

附件

  • 附件缺失。超过 --max-attachment-size(默认 100 MB)的文件会被跳过并计数。用更高的限制再运行一次(例如 --max-attachment-size 2G,或 0 表示不限制):工具只下载上一次漏掉的文件。
  • 未找到(404)。Jira 列出了该附件,但文件已经不存在。会被计数。
  • 磁盘空间。大型站点需要足够的空间存放导入包中的附件,以及工作状态。

速率限制与导出缓慢

调用过快时,Jira Cloud 会返回 429 或 503。工具会等待后重试,每个请求最多重试六次(见速率限制)。如果仍然失败,工具会停止并给出提示。稍等一会儿,然后 再次运行同一条命令,已经读取过的数据不会重复读取。

要更温和一些,可以降低 --page-size。一次只导出一个项目也能分散负载。

运行中途停止

再次运行同一条命令即可。见运行中断时。如果工具因状态问题拒绝运行,要么是选项变了(传入 --restart 重新开始),要么是状态由另一个版本的工具写入(删除它,或传入 --restart)。

导入 Specivo 时的问题

现象 处理方法
--validate 报告 unresolved_ref 或 count_mismatch 导入包已损坏或不完整。重新导出。不要编辑这些文件。
某个分包出现 external_ref 警告 按项目逐个导出时属正常现象。见导入各个分包。
导入被拒绝,提示该来源之前已导入过 加上 --continue-import。同一站点从第二次导入起都需要它。
出现重复的状态、追踪器或优先级 导入时加上 --merge-duplicate-statuses。
第二个进行中的冲刺变成了计划中 Specivo 每个项目只允许一个进行中的冲刺。这会在报告中列出,属于预期行为。
有些人的邮箱是 @invalid 地址 Jira 隐藏了他们的邮箱地址。导入后补上真实地址。
提到其他分包中工作项的文字仍是纯文本 另一个分包尚未导入。用同一个 --links-file 导入它。import-map pending 会列出等待处理的内容。
某段文字没有变成链接 导入后有人在 Specivo 中编辑过它。Specivo 从不覆盖已编辑的文字。
导入中途停止 加上 --resume RUN_ID 再运行一次。每个阶段独立提交。

重新运行

整个流程的每一步都可以安全地重复:

  • 再次运行 导出 会继续中断的运行,或开始一次新的运行。
  • 再次导入同一个导入包 不会创建任何新内容(需要 --continue-import)。
  • 导入同一站点的较新导出 只会添加此后新建的记录,不会更新已导入的记录。

如果需要彻底重来,恢复导入前的 Specivo 备份,然后重新导入。

获取帮助

报告问题时,请附上工具版本(specivo-jira-migration --version)、你运行的命令(去掉凭据)、站点是 Cloud 还是 Data Center,以及错误信息。不要发送导入包或状态目录:它们包含你的数据和他人的邮箱地址。