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

GitHub Actions作业输出异常:仅显示成功,失败时无输出

问题分析及解决方案

核心问题

  1. 命令失败导致步骤终止:GitHub Actions的run步骤默认会在任何命令返回非零退出码时立即终止,所以当./my-command失败时,后续的结果判断和输出命令根本不会执行,无法生成Failure的输出,甚至整个job1会直接失败,依赖它的job2也会被跳过(无输出)。
  2. 输出变量名不匹配:你的job1输出里引用的是steps.step1.outputs.test,但实际在step1中输出的变量是result,这会导致即使./my-command成功,job2也无法正确获取到值(除非你代码里存在笔误)。

修正后的配置

jobs:
  job1:
    runs-on: ubuntu-latest
    outputs:
      output1: ${{ steps.step1.outputs.result }}  # 修正变量名,对应step输出的result
    steps:
      - id: step1
        run: |
          # 关闭命令失败自动终止,确保后续代码能执行
          set +e
          ./my-command
          # 捕获命令的退出码
          exit_code=$?
          # 根据退出码设置结果
          if [ $exit_code -eq 0 ]; then
            result="Success"
          else
            result="Failure"
          fi
          # 将结果输出到GITHUB_OUTPUT
          echo "result=$result" >> $GITHUB_OUTPUT
          # 可选:如果需要让job1的状态与命令结果一致,恢复 errexit 并返回原退出码
          # set -e
          # exit $exit_code
        # 可选:如果希望命令失败时步骤仍标记为成功,保证job1正常完成、job2能运行
        # continue-on-error: true

  job2:
    runs-on: ubuntu-latest
    needs: job1
    # 可选:如果希望job2在job1失败时也能运行,添加此条件
    # if: always()
    steps:
      - run: echo ${{ needs.job1.outputs.output1 }}

关键说明

  • set +e:关闭shell的errexit模式,避免./my-command失败时直接终止步骤,确保后续的结果判断和输出命令能正常执行。
  • 变量名匹配:必须保证job1的outputs引用的变量名和step1中输出的变量名完全一致(均为result),否则无法正确传递值。
  • continue-on-error: true:如果希望./my-command失败时,step1仍标记为成功,让job1正常完成,从而确保job2能运行(默认情况下,依赖的job失败时后续job会被跳过)。如果需要job1的状态与./my-command的结果一致,可以去掉这个配置,并在run末尾恢复set -e并返回原退出码,此时若要让job2在job1失败时也运行,需要给job2添加if: always()。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 16:55:15