如何获取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- 优先级判断逻辑:
- 若任何一个作业结果为
failure,整体状态设为failure - 若无失败但存在
cancelled的作业,整体状态设为cancelled - 其余情况(所有作业成功或跳过),整体状态设为
success
- 若任何一个作业结果为
这样就能准确反映整个工作流的真实状态,只要有作业失败,Slack就会收到对应的失败通知。
内容的提问来源于stack exchange,提问作者Sebastian Sommerfeld
相关产品推荐
相关产品推荐

