据我所知,目前还没有办法通过配置自动重启工作流......
但是,使用带有 Github Actions 的工作流实现,有不同的方法可以实现类似的结果。这不会完全是重新启动,因为如果工作流失败,解决方法是重新启动工作流。
第一个选项可能是使用带有workflow_run 触发器的另一个工作流来检查第一个工作流是否成功运行,如果没有,则发送调度事件以再次运行它(在这种情况下,您必须在第一个工作流中添加一个repository_dispatch 触发器)。
另一种选择可能是在您的第一个作业(构建)结束时添加 2 个步骤,以将作业状态保存为工件。
- name: Create file status_job1.txt and write the job status into it
if: always()
run: echo ${{ job.status }} > status_job1.txt
- name: Upload file status_job1.txt as an artifact
if: always()
uses: actions/upload-artifact@v1
with:
name: pass_status_job1
path: status_job1.txt
然后,第二个作业总是会检查第一个作业的输出:
job2:
runs-on: ubuntu-latest
needs: [job1]
if: always()
steps:
- name: Download artifact pass_status_job1
uses: actions/download-artifact@v1
with:
name: pass_status_job1
- name: Set the status of Job 1, as output parameter
id: set_outputs
run: echo "::set-output name=status_job1::$(<pass_status_job1/status_job1.txt)"
- name: Show the values of the output
run: |
# using the syntax steps.<step_id>.outputs.<output_name> to access the output parameter
echo "status_job1 = ${{ steps.set_outputs.outputs.status_job1 }}"
# other steps or commands to perform an operation according to its value.
[...]
例如,在 job2 的末尾,如果 job1 的状态为失败,您可以将 dispatch event 发送到同一工作流(在这种情况下,您必须将 repository_dispatch 触发器添加到工作流程)以再次启动工作流程(正如我所解释的,它不会完全重新启动,因为这将创建一个新的工作流程运行)。
这里是action to create a repository dispatch event,或者你可以直接调用the Github API