首页 > 解决方案 > 在 github 工作流程中崩溃后有什么方法可以自动重启

问题描述

Deleting original file NF - PAID MY DUES - youtube-LLAgke7QprM.f140.m4a (pass -k to keep)
/home/runner/work/_temp/9708cc07-bf79-4478-beda-081cae98f143.sh: line 3:  3270 Segmentation fault      (core dumped) python3 nani.py
Error: Process completed with exit code 139.

我正在尝试在 git 工作流程上托管我的 python 机器人。
它将播放音乐(在 Telegram 语音聊天中)。
但是一段时间后它总是崩溃。

有没有办法在出现任何错误后自动重新启动工作流程?

用于检查工作流实现的 Github 存储库:https ://github.com/Nksama/workflows

标签: pythontelegramgithub-actions

解决方案


据我所知,目前还没有办法通过配置自动重启工作流程......

但是,使用带有 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.
          [...]

例如,在结束时,如果 job1 的状态为失败(在这种情况下,您还必须向工作流添加repository_dispatchjob2触发器) ,您可以将 a 发送到同一工作流以再次启动工作流(如我解释说,它不会完全重新启动,因为这将创建一个新的工作流运行)。dispatch event


这是一个创建存储库调度事件的操作,或者您可以直接调用Github API来完成


推荐阅读