GitHub Actions工作流:作业失败时如何无需等全流程结束即可重跑?
解决GitHub Actions并行工作流失败后即时重跑的问题
原生UI即时重跑单个失败作业(最简单方案)
GitHub Actions目前支持在工作流运行过程中单独重跑已失败的作业,无需等待所有并行作业完成或整个工作流失败。操作步骤:
- 打开目标工作流的运行详情页面
- 在左侧「Jobs」列表中找到已失败的作业
- 点击作业右侧的「⋯」菜单,选择「Rerun job」
这样其他并行作业会继续正常运行,你只针对失败的不稳定作业单独重跑,完全不影响并行效率,也不会盲目重跑真实问题的失败作业。
自定义API触发重跑(适合批量/自动化场景)
如果需要更灵活的触发方式(比如本地脚本监控、批量处理),可以通过GitHub REST API实现单个失败作业的即时重跑:
- 生成具有
repo权限的GitHub Token(在个人设置→Developer settings→Personal access tokens中创建) - 用脚本调用API获取当前运行的作业状态:
curl -H "Authorization: token YOUR_GITHUB_TOKEN" \ https://api.github.com/repos/{OWNER}/{REPO}/actions/runs/{RUN_ID}/jobs - 找到失败作业的
id后,调用重跑接口:curl -X POST -H "Authorization: token YOUR_GITHUB_TOKEN" \ https://api.github.com/repos/{OWNER}/{REPO}/actions/runs/{RUN_ID}/jobs/{JOB_ID}/rerun
你可以把这个逻辑封装成简单的监控脚本,或者在工作流中加入一个后台运行的辅助作业来实时检测失败并提醒,手动触发重跑。
专用重跑工作流(适合结构化场景)
如果你的复用工作流可以标准化,比如用矩阵作业定义,可以创建一个单独的重跑工作流,通过workflow_dispatch事件接受参数,只重跑指定的作业:
- 创建
.github/workflows/rerun-failed.yml:name: Rerun Failed Job on: workflow_dispatch: inputs: job_name: description: 'Name of the failed job to rerun' required: true jobs: rerun: runs-on: ubuntu-latest steps: - name: Rerun specified job uses: actions/github-script@v6 with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | const runId = context.payload.workflow_run.id; const jobs = await github.rest.actions.listJobsForWorkflowRun({ owner: context.repo.owner, repo: context.repo.repo, run_id: runId }); const job = jobs.data.jobs.find(j => j.name === '${{ github.event.inputs.job_name }}'); if (job) { await github.rest.actions.rerunJob({ owner: context.repo.owner, repo: context.repo.repo, job_id: job.id }); } - 当某个作业失败时,直接在GitHub UI中触发这个重跑工作流,输入失败作业的名称即可单独重跑,原主流程继续并行运行其他作业。
注意事项
- 所有方案都需要确保你的作业设置了
continue-on-error: true,这样单个作业失败不会终止整个并行工作流,保证其他作业能继续运行。 - 手动触发重跑的方式完全避免了盲目自动重跑的问题,你可以先判断失败原因,再决定是否重跑。
内容的提问来源于stack exchange,提问作者bursted.electricity
相关产品推荐
相关产品推荐

