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

如何获取Github Actions整个工作流状态而非单个作业状态?

解决GitHub Actions获取整个工作流状态的问题

你遇到的核心问题是:${{ job.status }}仅代表当前finally作业的状态——该作业本身的步骤都能正常执行,所以即使依赖的作业失败,它也会返回success。要获取整个工作流的真实状态,需要检查所有被依赖作业的执行结果。

修改方案

通过GitHub Actions表达式判断所有needs中作业的结果,只要有一个作业失败,就将整体状态标记为failure。修改后的完整配置如下:

finally:
  runs-on: ubuntu-latest
  needs: ['ci-build', 'lint-yaml', 'lint-json', 'lint-env-files', 'lint-folders', 'lint-filenames', 'shellcheck', 'lint-dockerfile']
  if: always()

  steps:
    - name: Send pipeline status to Slack
      if: always()
      uses: kpritam/slack-job-status-action@v1
      with:
        job-status: ${{ contains(needs.*.result, 'failure') && 'failure' || (contains(needs.*.result, 'cancelled') && 'cancelled' || 'success') }}
        slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }}
        channel: C0438TFQNPM # pipelines channel

表达式逻辑说明

  • needs.*.result:获取所有被依赖作业的执行结果,可能的值包括success、failure、cancelled、skipped
  • 优先级判断逻辑:
    1. 若任何一个作业结果为failure,整体状态设为failure
    2. 若无失败但存在cancelled的作业,整体状态设为cancelled
    3. 其余情况(所有作业成功或跳过),整体状态设为success

这样就能准确反映整个工作流的真实状态,只要有作业失败,Slack就会收到对应的失败通知。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:05:32