Skip to content

排障

返回总览

这一页按常见症状组织,不按模块组织

步骤没有出现

优先检查四件事

  1. initialValues 是否已经让该步骤被跳过
  2. when 是否返回了 false
  3. 是否存在更早命中的同名步骤
  4. 是否从 checkpoint 恢复后把该步骤标记为已完成

select 或 autocomplete 的 initialValues 报错

这类错误通常意味着预填值不在 options 范围内

处理方式很直接

  • 校对 initialValues
  • 校对 options 的 value 类型
  • 如果值来自 CLI,检查 parse 是否把字符串转成了预期类型

history 没有生效

先检查这几项

  1. createWorkflowKit 是否开启了 history
  2. 本次 run 是否把 history 显式关掉了
  3. workflow 是否成功运行到保存快照阶段
  4. 是否已经传入 initialValues 且没有显式要求 reuse

最后一种情况最容易误判,因为运行时会优先尊重本次外部传值

checkpoint 没有恢复

优先检查

  1. createWorkflowKit 是否开启了 checkpoints
  2. 上次运行是否在失败或取消时留下 checkpoint
  3. 本次 checkpoint.resume 是否为 never
  4. 本次是否传入 initialValues 且没有显式要求恢复

成功完成的 workflow 会自动清理 checkpoint,这不是丢失,而是预期行为

日志没有落盘

优先检查

  1. createWorkflowKit 是否开启了 logs
  2. 本次 run 的 logs.enabled 是否被关掉
  3. workflow.log.completion 是否配置为 false
  4. 保存目录是否可写

如果只是想临时保存,也可以直接调用 result.saveLog()

命令输出看不到

通常是 renderer 选择问题

  • task-log 只展示结构化输出与保留日志
  • quiet 不实时展开 stdout 和 stderr
  • renderer=inherit 会把输出写回当前终端

如果是 docker build、交互式进度条或依赖真实 TTY 的命令,还要再配 tty: 'passthrough'

设置 tty: 'passthrough' 后,这次命令会自动按 renderer=inherit 的语义处理,所以通常不用再额外写一遍 renderer

先确认 command 步骤的 renderer 配置,再确认是否真的往 io.stdout 或 io.stderr 写了内容

git clone --progress 这类命令会把进度写到 stderr,这不代表失败 clack-kit 会在执行结果里保留原始 stdout 和 stderr,但 live task-log 会按可见日志展示它们

CLI 参数没有映射到步骤

依次检查

  1. createWorkflowCliBridge 是否接收了正确的 steps
  2. bridge.apply(cli) 是否执行了
  3. bridge.getInitialValues(parsed.options) 是否传给了 run
  4. 字段是否被 optionKey 或 parse 改名、改形

workflow 在取消时抛错

这是 run 和 runSafely 的行为差异

  • run 在取消时抛错
  • runSafely 在取消时返回 null

需要安静处理取消时,优先选 runSafely

相对路径解析不对

相对路径默认基于 projectRoot 解析,而 createWorkflowKit 用来设置它的字段现在叫 cwd

检查点包括

  • createWorkflowKit 的 cwd
  • command 的 cwd
  • scriptFile 是否以项目根目录为基准书写

下一步建议