如何获取GitHub复合动作的执行结果?
问题分析与解决方案
你碰到的steps.first.outcome为空的问题,核心原因其实是GitHub复合动作的默认行为限制:当某个步骤失败且没有设置continue-on-error: true时,整个复合动作会直接终止,后续步骤(哪怕加了always()条件)根本没机会执行。这就导致最后一步永远读不到第一步的outcome值——动作在第一步失败后就停了,根本走不到最后一步。
要解决这个问题,你需要做两个关键调整:
1. 给第一步添加continue-on-error: true
这个设置会让复合动作在第一步失败后继续执行后续步骤,这样第一步的执行结果(failure或success)才会被正确记录到steps.first.outcome中,后续步骤才能读取到这个值。
2. 优化最后一步的条件判断
保留always()确保最后一步不会被任何前置步骤的状态跳过,同时明确判断第一步的结果为失败时才执行。
修改后的完整配置如下:
runs: using: "composite" steps: - name: 'First step' id: first run: some-command shell: bash continue-on-error: true # 关键:允许动作在第一步失败后继续执行 # [some more steps] - name: 'Last step' if: ${{ always() && steps.first.outcome == 'failure' }} run: another-command shell: bash
额外说明
如果你需要中间步骤的失败也不影响最后一步执行,可以给中间步骤也加上continue-on-error: true;或者保持中间步骤的默认失败终止行为,但此时如果中间步骤失败,最后一步依然会因为always()执行——但此时steps.first.outcome依然是有效的,因为第一步已经完成并记录了结果。
内容的提问来源于stack exchange,提问作者chrisb89
相关产品推荐
相关产品推荐

