在 GitHub Action 语法中似乎没有重试,这就是为什么你会找到类似的 GitHub Actions:
示例:
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
似乎确实做到了正确的事情:无论是命令还是子操作的情况。
请注意官方文档仍然是“重新运行工作流和作业”。