如何在 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
感谢您的帮助
我有一个测试套件有点不稳定,有时会失败,但如果重新 运行 它会通过。每当在 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
感谢您的帮助