我正在构建 github 操作管道,我想在我的作业中添加自动重试,类似于retry 关键字在 gitlab 中的工作方式,失败时将再次运行完整步骤。github actions 中有什么允许这样做的吗?
这是我正在使用的一个示例作业:
jobs:
env-check:
runs-on: ubuntu-latest
container:
image: myimage
steps:
- uses: actions/checkout@v2
- name: env-check
run: |
echo "foobar"
Run Code Online (Sandbox Code Playgroud)
Von*_*onC 22
GitHub Action 语法中似乎没有重试,这就是为什么您会发现互补的 GitHub Actions,例如:
例子:
uses: nick-fields/retry@v2
with:
timeout_minutes: 10
max_attempts: 3
command: npm run some-typically-slow-script
Run Code Online (Sandbox Code Playgroud)
但这些指令不能与其他
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}
Run Code Online (Sandbox Code Playgroud)
请记住,这只是一种解决方法,可能并不适用于每个操作。
此外,如果您使用的操作没有命令行界面,或者它执行无法使用 shell 命令轻松复制的复杂任务,则此解决方法将不适用。
最后,请注意,重试操作将重试整个命令,因此,如果您有多个命令并且只想重试特定命令,则需要使用重试操作的多个实例。
实际上,经过几个小时的观察,这个重试操作Wandalen/wretry.action似乎确实做了正确的事情:在命令和子操作情况下。
请注意,官方文档仍然是“重新运行工作流程和作业”。
小智 6
您可以使用其他作业重新运行当前工作流程中失败的作业。如果其中任何一个作业失败,它将在所有其他作业之后执行。
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
21032 次 |
| 最近记录: |