如何在GitHub Actions中展示某一步骤的所有输出?
GitHub Actions遍历步骤输出的问题解决
问题所在
你直接在shell循环里引用${{ steps.captureStatus.outputs }}是行不通的,因为steps.<id>.outputs是GitHub Actions的上下文对象,它会被渲染成类似[object Object]或者无结构的键值对字符串,shell没法把它当作可遍历的数组或集合处理,最终循环只会把整个字符串当作单个项执行。
正确的解决方法
方法1:用JSON解析遍历键值对
借助toJSON函数把输出对象转成标准JSON字符串,再用jq工具解析遍历:
- name: Display all step outputs run: | # 把输出对象转成JSON后用jq遍历每个键值对 echo '${{ toJSON(steps.captureStatus.outputs) }}' | jq -r 'to_entries[] | "\(.key): \(.value)"'
这个方法能清晰输出每个输出的键和对应的值,GitHub托管的runner默认自带jq工具,无需额外安装。
方法2:通过环境变量遍历
GitHub Actions会自动将步骤的每个输出注入为环境变量,变量名格式为STEPS_<步骤ID大写>_OUTPUTS_<输出名大写>,用bash的变量扩展可以匹配这些变量:
- name: Display outputs via environment variables run: | # 遍历所有以STEPS_CAPTURESTATUS_OUTPUTS_开头的环境变量 for var in "${!STEPS_CAPTURESTATUS_OUTPUTS_@}"; do echo "$var = ${!var}" done
注意这里步骤IDcaptureStatus要转成全大写的CAPTURESTATUS,输出名也会自动转成大写格式。
方法3:直接打印完整JSON(快速调试)
如果只是想快速查看所有输出的结构,直接打印转成JSON的结果即可:
- name: Print all outputs as JSON run: echo '${{ toJSON(steps.captureStatus.outputs) }}'
内容的提问来源于stack exchange,提问作者Warpspace
相关产品推荐
相关产品推荐

