Github Actions 默认情况下不会自动重启并重新运行构建。但是,您可以使用 GitHub Actions 的 workflow_run
事件来完成这项任务。
首先,在您的 workflow 中设置一个 job ,并将其标记为失败时重新尝试:
name: My Workflow
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest]
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Build
run: |
# 将构建命令添加在这里
# 例如:npm install && npm run build
# 标记此 job 为 "失败时重新尝试"
# 设置最大尝试次数为 3 次
# 间隔为 10 秒
retry:
max-tries: 3
delay: 10
# 仅在构建失败时重新尝试
when:
failure: true
接下来,您需要为 workflow_run
事件创建一个触发器,以便可以在前一个构建失败时自动重启。要创建此触发器,请创建一个新的 workflow,并使用 workflow_run
事件。当前工作流中的所有 job 都将被重新运行:
name: Workflow Runner
on:
workflow_run:
workflows: ["My Workflow"]
# 仅在 My Workflow 失败时运行此 workflow
types:
- completed
# 仅当 My Workflow 中的所有 job 都失败时,才重新运行
# 您可以根据需要更改此条件
if: ${{ github.event.workflow_run.conclusion == 'failure' && github.event.workflow_run.jobs.every(job => job.conclusion == 'failure') }}
jobs:
runner:
runs-on: ubuntu-latest
steps:
- name: "Rerun My Workflow"
run: echo "My Workflow Failed. Rerunning..." # 在这里输入您想要运行的命令
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# 声明需要运行的工作流程
uses: peter-evans/workflow-dispatch@v1
with:
workflow: My Workflow
此 workflow 启用 peter-evans/workflow-dispatch
动作以触发 My Workflow
的重新运行。在 peter-evans/workflow-dispatch
动作中,您需要使用 secrets.GITHUB_TOKEN
对工作流程进行身份验证。
这样,每当 My Workflow
失败时,Workflow Runner
就会自动触发并重新运行整个工作流。