如果一个作业失败,Github Actions Workflow 应该失败 (同时保留在其后调用的其他作业)。

3
我有一个由三个工作流程组成的工作流,分别是“启动自托管EC2运行程序”、“运行集成测试”和“停止自托管EC2运行程序”。我使用的Github Action源码可以在这个链接中找到。实际上,当测试失败且其工作流看起来为“红色”时,工作流仍然看起来为“绿色”,我需要解决这个问题(使其看起来为“红色”)。但是,“停止自托管EC2运行程序”工作必须执行,即使“运行集成测试”工作失败,因此我不能在“运行集成测试”工作内部使工作流失败。

enter image description here

我猜我可以添加另一个依赖于这三个作业的工作,然后检查所有作业的状态并使工作流失败。我该如何做到这一点,或者无论测试成功或失败,始终执行“开始…”和“停止…”作业,使工作流程“红色”?

你能分享一下你的workflow .yml文件实现吗? - GuiFalourd
在您的工作流中,似乎使用了needs语法以按顺序执行作业。您可以与其一起使用if: always()语法,即使前一个作业失败,也可以强制执行其他作业。参考 - GuiFalourd
@GuiFalourd 正确,由于“需求”,作业按顺序运行。您可以在 https://github.com/machulav/ec2-github-runner#example 中检查作业设置。我的工作流紧密基于此并使用此出色的操作。 - onkami
@GuiFalourd,问题在于测试失败后,工作流仍然是绿色的。因此,例如,如果将其作为拉取请求检查的一部分运行,则会被视为正常,这与预期相反。 - onkami
我相信这正是此工作流的设计意图(当第二个任务失败时不会使工作流失败)。目前,根据我的观察和查找,似乎没有本地语法来执行您想要的操作。然而,您所提到的解决方法(另一个作业检查之前的作业成功或失败)应该可以解决问题(甚至可以成为一个动作!)。 - GuiFalourd
显示剩余2条评论
1个回答

3

工作流未失败的原因是第二个任务必须具有continue-on-error: true属性。

最终我在末尾添加了另一个任务,如下所示:

// Last job:

  fail-on-job2:
    # Without this step workflow remains "green" if job2 does fail.
    name: Job2 Status -> Workflow Status
    needs:
      - job1
      - job2
      - job3
    runs-on: ubuntu-latest
    if: always()
    steps:
      - uses: technote-space/workflow-conclusion-action@v2
      - name: Check Job Status status and fail if they are red
        if: env.WORKFLOW_CONCLUSION == 'failure'
        run: exit 1


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接