如何在 GitHub actions 工作流程中检查作业是否被拒绝?

问题描述 投票:0回答:1

有什么方法可以确定工作流程中等待批准的作业是否被手动拒绝?我知道手动拒绝的作业现在具有

failure
状态,但这不是作业执行中的错误,如果我手动拒绝它,这是预期的行为(例如,我拒绝部署到生产环境的作业)。如果我需要将 Slack 通知作为最后一个作业发送,以防使用
if: ${{ failure() }}
条件的作业出现任何失败,它也会在之前的作业之一被手动拒绝时发送通知。

github continuous-integration github-actions continuous-deployment continuous-delivery
1个回答
0
投票

已找到此问题的解决方案。通过为需要手动批准/拒绝的作业设置输出参数,可以区分“真正失败”的作业和“被拒绝”的作业,然后在我们想要检查是否存在“真正失败”的下游作业中使用它在工作流程或作业中手动执行拒绝 jobs: job1: runs-on: ubuntu-latest environment: staging outputs: approved: ${{ steps.set-outputs.approved }} steps: - name: Set outputs id: set-outputs run: | echo "approved=true" >> $GITHUB_OUTPUT job2: runs-on: ubuntu-latest environment: prod outputs: approved: ${{ steps.set-outputs.approved }} steps: - name: Set outputs id: set-outputs run: | echo "approved=true" >> $GITHUB_OUTPUT notify-on-error: runs-on: ubuntu-latest if: ${{ failure() && github.event_name == 'push' && (needs.job1.result != 'failure' || (needs.job1.result == 'failure' && needs.job1.outputs.approved == 'true')) && (needs.job2.result != 'failure' || (needs.job2.result == 'failure' && needs.job2.outputs.approved == 'true')) }} steps: - name: Slack Notification ... 此配置效果很好,但不会涵盖以下情况:如果需要手动审批的作业被批准,然后在执行过程中失败,如果我们重新运行它并拒绝它,它将被视为失败的作业。它仅与重新运行相关,特别是通过单击带箭头的圆圈或通过“重新运行失败的作业”选项来重新运行此作业。对于“重新运行所有作业”选项,在这种情况下一切正常。

© www.soinside.com 2019 - 2024. All rights reserved.