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

如何在GitHub Workflow中基于同分支上一次运行状态触发通知?

基于GitHub Workflow上一次运行状态执行条件步骤的实现

可以实现需求,GitHub原生Context确实没有直接提供上一次同分支同工作流的运行状态,但可以通过调用GitHub API获取该数据,再基于此设置步骤的执行条件。具体实现如下:

实现思路

  1. 调用GitHub API获取当前分支下,同工作流的上一次已完成运行的状态结论(排除当前运行)。
  2. 将获取到的状态保存为步骤输出变量,供后续步骤判断使用。
  3. 在通知步骤中设置条件:仅当当前工作流运行成功,且上一次运行失败时,执行通知操作。

具体工作流示例

jobs:
  notify-on-fix:
    runs-on: ubuntu-latest
    steps:
      - name: 获取上一次工作流运行状态
        id: last_run_status
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          REPO: ${{ github.repository }}
          WORKFLOW_ID: ${{ github.workflow_id }}
          BRANCH: ${{ github.ref_name }}
          CURRENT_RUN_ID: ${{ github.run_id }}
        run: |
          # 调用API获取上一次同分支同工作流的完成运行记录
          LAST_RUN_CONCLUSION=$(curl -s -H "Authorization: token $GITHUB_TOKEN" \
            "https://api.github.com/repos/$REPO/actions/workflows/$WORKFLOW_ID/runs?branch=$BRANCH&status=completed&per_page=1" \
            | jq -r ".workflow_runs[] | select(.id != $CURRENT_RUN_ID) | .conclusion")
          
          # 处理首次运行的情况(无历史记录),默认设为success避免误触发
          if [ -z "$LAST_RUN_CONCLUSION" ] || [ "$LAST_RUN_CONCLUSION" == "null" ]; then
            LAST_RUN_CONCLUSION="success"
          fi
          
          echo "conclusion=$LAST_RUN_CONCLUSION" >> $GITHUB_OUTPUT

      - name: 发送修复完成通知
        if: job.status == 'success' && steps.last_run_status.outputs.conclusion == 'failure'
        run: |
          # 这里替换为你的通知逻辑,比如发送Slack消息、邮件等
          echo "✅ 工作流已修复:当前分支的${{ github.workflow }}工作流运行成功,上一次运行失败"

注意事项

  • 默认的GITHUB_TOKEN已经具备actions:read权限,无需额外配置权限。
  • 示例中使用curl和jq来调用API和解析结果,GitHub托管的Runner默认已安装这两个工具;如果是自托管Runner,需要确保已安装。
  • 若需要支持手动触发的工作流,可以根据github.event_name调整条件,比如添加|| github.event_name == 'workflow_dispatch'。
  • 首次运行工作流时,由于没有历史记录,会默认将上一次状态设为success,不会触发修复通知,符合预期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 20:55:09