在github操作中重试失败的作业

时间:2019-12-16 12:18:58

标签: continuous-integration github-actions

我正在尝试使用GitHub Actions进行CI测试,到目前为止,我的测试工作流程如下:

name: test

on: [push]

jobs:
  test:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/checkout@v1
      - uses: actions/setup-node@v1
        with:
          node-version: 12
      - run: npm install
      - name: test
        run: |
          npm run lint
          npm test
        env:
          CI: true

.github / workflows / test.yml

一切正常,除了如果测试失败,我想重试test步骤(或整个工作)一次。

基本上,您使用travis-retry时会得到相同的行为:

script:
  - npm run lint
  - travis_retry npm test

或使用Gitlab CI:

test:
  stage: test
  retry: 1
  script:
    - npm run lint
    - npm test

不确定是否可以采用这种方法或一种相对简单的解决方法

4 个答案:

答案 0 :(得分:3)

对于您的特定用例,只需执行以下操作:

npm test || npm test

答案 1 :(得分:2)

我要说的是,您需要在代码级别上管理重试逻辑。意味着,实施/集成这样的机制以仅处理并再次执行失败的测试。恐怕

  

如果测试失败,想重试一次测试步骤(或整个作业)。

将执行所有测试,甚至可能覆盖输出,例如首次运行时的报告和日志。

根据我的经验,我使用了包装器(shell)脚本。这是可以实现的方法:

#!/usr/bin/env bash
{ # try
    # your npm test command here, that saves as output -  failed tests
} || { # catch
    # retry failed tests
      if [ -f ./rerun-failed-file ]; then
        echo "============= [WARN] Rerun file found! =============="
        echo "============= [WARN] Rerunning FAILED tests mode. =============="
        # run npm test command that picks up the failed tests & aggregate test artifacts
      fi
} 

答案 2 :(得分:2)

Action Retry在我的测试中似乎效果很好

https://github.com/nick-invision/retry/

只要它们是单行代码,我就可以将其与多部分命令一起使用(例如do-this && do-that

答案 3 :(得分:0)

不幸的是,doesn't look like the feature exists yet

作为一项手动工作,我不得不使用重新运行所有检查按钮来重新触发失败的工作流程,您可以在viewing a failed workflow时在右上角找到该按钮。