如何在 GitHub 操作失败时重新运行 docker 容器,但工作流仍然通过?

How to rerun a docker container on failure in GitHub Actions, but still have the workflow pass?

我有一个测试套件有点不稳定,有时会失败,但如果重新 运行 它会通过。每当在 GitHub.

上的存储库上发生推送时,此测试就是 运行

到目前为止,我已经通过让我的工作流程的一部分检查第一次尝试是否失败,然后再次 运行 再次执行相同的命令,自动将测试第二次 运行 。这是一个工作流文件,说明了我的意思:

  jobs:
    run_tests:
      steps:

        - name: Run Test
        id: first-attempt
        run: docker run test

        - name: Retry again on failure
        id: second-attempt
        if: ${{ failure() }}
        run: docker run test

如您所见,运行 是第一次尝试,如果失败,运行 会再次尝试。这可行,但问题是如果第二次尝试成功,测试状态仍然是“失败”,因为第一次尝试失败。

所以我想知道是否有更优雅的方法来解决这个问题,比如 'retry' 选项。或者至少,如果第二次尝试通过,是否有办法将操作的状态明确设置为“成功”。也许通过执行以下操作:

        - name: Check on failures
        if: steps.first_attempt.outcome != 'fail' && steps.second_attempt.outcome != 'success'
        set_status: "Success"

感谢您的帮助

看来雷阳的回答大部分是正确的,但需要补充使用if: steps.first_attempt.outcome != 'success'而不是if: always()

 jobs:
   run_tests:
     steps:

       - name: Run Test
       id: first-attempt
       run: docker run test
       continue-on-error: true

       - name: Retry again on failure
       id: second-attempt
       if: steps.first_attempt.outcome != 'success'
       run: docker run test

感谢您的帮助