如何在GitHub Actions作业失败时自动重试?

19

我正在构建Github Action管道,希望像GitLab中重试关键字的工作方式那样,为我的任务添加自动重试,在失败时重新运行整个步骤。是否有任何在Github Actions上提供此功能的方法?

以下是我正在使用的示例任务:

jobs:
  env-check:
    runs-on: ubuntu-latest
    container:
      image: myimage
    steps:
      - uses: actions/checkout@v2
      - name: env-check
        run: |
          echo "foobar"
2个回答

18

在 GitHub Action 语法中似乎没有重试,这就是为什么你会找到类似的 GitHub Actions:

  • Retry Step:在失败或超时时重试一个 Action 步骤。目前此功能旨在取代 moody 命令的运行步骤。
  • Retry Action:在失败时重试一个 Github Action 步骤或命令。

示例:

uses: nick-fields/retry@v2
with:
  timeout_minutes: 10
  max_attempts: 3
  command: npm run some-typically-slow-script

这些不适用于其他 uses 指令对吧? 所以它们只在你运行显式命令时起作用,没有依赖关系?
正确。像 nick-fields/retry 这样的重试操作通过重新运行您指定的命令来工作,因此它不能直接与其他 uses 指令一起使用。这意味着当您运行显式的 shell 命令时最为适用。
然而,如果您使用的操作可以通过 shell 命令运行,您可能可以绕过这个限制。许多操作实质上只是可以从命令行执行的脚本,因此如果您使用的操作符合这个描述,您可以使用重试操作来重新运行该命令。
例如,如果您正在使用像 actions/checkout@v2 这样的操作,并且它具有命令行界面,您可以进行以下操作:
uses: nick-fields/retry@v2
with:
  timeout_minutes: 10
  max_attempts: 3
  command: |
    git clone https://github.com/{owner}/{repo}.git
    cd {repo}

请记住,这只是一个变通方法,并不适用于每个操作。
此外,如果您使用的操作没有命令行界面,或者执行复杂任务无法轻松使用 shell 命令复制,那么此变通方法将不适用。
最后,请注意重试操作将重新尝试整个命令,因此如果您有多个命令,并且只想重试其中一个特定命令,则需要使用多个重试操作的实例。

一个人评论中补充道:

实际上,在经过几个小时的查找后,这个重试操作 Wandalen/wretry.action似乎确实做到了正确的事情:无论是命令还是子操作的情况。

请注意官方文档仍然是“重新运行工作流和作业”。


2
好的! 但这个是在同一台运行程序上执行吗?如果我们能够在另一个可用的运行程序上重试就好了。在我的设置中,运行程序通常是问题所在。 - Alejandro Cotilla
这些指令不能与其他“uses”指令一起使用,对吗?所以它们只在运行显式命令时有效,没有依赖关系。 - a p
@ap 我相信是的,是的。我已经编辑了答案来回应你的评论。 - VonC
1
实际上,在经过几个小时的查找后,这个重试操作似乎确实做了正确的事情:https://github.com/marketplace/actions/retry-action ,无论是在命令还是子操作的情况下。 - a p
1
@ap 这样它就可以直接与其他使用指令一起工作吗?那就太好了! - VonC
1
@VonC 是的,它确实如此。 - a p

1
你可以通过添加额外的作业来重新运行当前工作流中失败的作业。如果其中任何一个作业失败,它将在所有其他作业之后执行。
rerun-failed-jobs:
    runs-on: ubuntu-latest
    needs: [ job1, job2]
    if: failure()
    steps:
      - name: Rerun failed jobs in the current workflow
        env:
          GH_TOKEN: ${{ github.token }}
        run: gh run rerun ${{ github.run_id }} --failed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接