You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Github Action无法获取前置步骤超时状态的问题求助

GitHub Action超时步骤的判断方案

问题核心在于:当你给步骤设置了continue-on-error: true时,任何失败(包括超时导致的取消)都会被强制标记为success,所以你读取到的conclusion和outcome都是success,自然触发不了后续判断timeout的步骤。

要正确识别超时场景,你需要关注步骤的status字段,而不是conclusion:

  • 当步骤因超时而被终止时,它的status会是cancelled
  • 正常运行失败的步骤,status是failed

方案一:保留continue-on-error的情况下判断超时

修改后续步骤的判断条件为检查status是否为cancelled:

jobs:
  ...
  steps:
    - name: Run Spectacles Job
      id: spectaclesJob
      timeout-minutes: 1
      continue-on-error: true
      run: ...

    - name: Run only when timed out
      if: ${{ steps.spectaclesJob.status == 'cancelled' }}
      run: echo "The previous step was timed out"

⚠️ 注意:这个条件也会匹配手动取消步骤的场景,如果需要完全区分超时和手动取消,可能需要在步骤中添加自定义日志标记,或者使用第三方Action辅助检测。

方案二:关闭continue-on-error,精准区分失败类型

如果你不需要让流程在步骤失败后继续,只是想在超时场景下执行后续步骤,可以去掉continue-on-error,结合failure()和status判断:

jobs:
  ...
  steps:
    - name: Run Spectacles Job
      id: spectaclesJob
      timeout-minutes: 1
      run: ...

    - name: Run only on timeout
      # 仅当步骤失败且状态为取消(超时触发)时执行
      if: ${{ failure() && steps.spectaclesJob.status == 'cancelled' }}
      run: echo "The previous step was timed out"

    - name: Run on normal failure
      # 正常失败场景下执行
      if: ${{ failure() && steps.spectaclesJob.status == 'failed' }}
      run: echo "The previous step failed normally"

这样就能完美区分超时取消和正常失败两种场景了。

内容的提问来源于stack exchange,提问作者Phoen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 22:55:20