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

如何在GitHub Actions中捕获步骤的完整输出与退出状态码?

问题:GitHub Actions中捕获命令完整stdout并保留退出码

我已经知道如何在GitHub Actions中获取步骤的简单输出,但想知道在步骤中运行命令时,如何捕获完整的stdout供其他步骤使用,同时不拦截命令的退出状态码?

测试用的bash脚本mimick-output.sh如下:

#!/usr/bin/env bash

echo "Output 1..."
sleep 1
echo "Output 2..."
sleep 1
echo "Output 3..."
sleep 1
exit 123

我尝试了两种方式,但都没能成功捕获输出:

方法1

- name: Produce Some Output
  id: run-produce-output
  run: echo $(foo_output=./mimick-output.sh) >> $GITHUB_OUTPUT
- name: Echo output
  run: echo ${{ steps.run-produce-output.outputs.foo_output }}

此方法中foo_output为空,因为语法错误——foo_output=./mimick-output.sh仅完成变量赋值,并未执行脚本。

方法2

- name: Produce output.
  id: run-produce-output
  run: ./mimick-output.sh
- name: Echo output
  if: always()
  run: echo ${{join(steps.run-produce-output.outputs.*, '\n')}}

此方法同样无法获取输出,因为GitHub Actions步骤的outputs不会自动捕获命令的stdout,必须显式写入$GITHUB_OUTPUT。

我的期望是:后续步骤能打印出完整的脚本输出:

Output 1...
Output 2...
Output 3...

同时run-produce-output步骤的退出状态码保持为123。


解决方案

要同时实现捕获完整stdout和保留原始退出码,可通过以下步骤完成:

- name: Produce and capture output
  id: run-produce-output
  run: |
    # 捕获脚本stdout到变量,同时记录退出码
    output=$(./mimick-output.sh)
    exit_code=$?
    # 用Here Document写入多行输出到GITHUB_OUTPUT,避免换行丢失
    echo "foo_output<<EOF" >> $GITHUB_OUTPUT
    echo "$output" >> $GITHUB_OUTPUT
    echo "EOF" >> $GITHUB_OUTPUT
    # 以脚本的原始退出码结束步骤
    exit $exit_code
- name: Echo captured output
  if: always()
  run: |
    echo "Captured output:"
    echo "${{ steps.run-produce-output.outputs.foo_output }}"

关键说明

  1. 捕获输出与退出码:output=$(./mimick-output.sh)捕获脚本所有标准输出,exit_code=$?保存脚本执行后的退出状态。
  2. 处理多行输出:使用Here Document(<<EOF)格式写入$GITHUB_OUTPUT,确保换行符被完整保留,避免单行输出截断多行内容。
  3. 保留退出状态:最后执行exit $exit_code,让步骤的退出状态与原始脚本一致,GitHub Actions会正确识别步骤的成败。

设置完成后,后续步骤可通过${{ steps.run-produce-output.outputs.foo_output }}获取完整输出,且run-produce-output步骤的退出码为123。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:39:23