【问题标题】:Stop GitHub Jobs in Progress if Another Failed (stop on fail)如果另一个失败则停止正在进行的 GitHub 作业(失败时停止)
【发布时间】:2021-08-01 22:48:09
【问题描述】:

TL; DR:并行运行作业 a、b。如果 a 失败,则在 b 仍在运行时停止执行。

我的公司使用 GitHub Actions 来部署我们的代码。

我们部署的第一步是构建 docker 并将它们推送到 DockerHub。

我们为我们的代码编写了一个测试,我们希望与构建 docker 并行运行。

这两个都是独立的工作,我们还有几个工作取决于前两个的成功。

现在,如果测试作业失败,另一个作业会继续运行,但很明显,下一个作业不会运行,因为测试作业失败。

如果测试失败,我想做的是在运行时取消 docker 构建作业。

这可能吗?在搜索了网络、StackOverflow 和 GitHub Actions 页面后,我还没有找到这样做的方法。

谢谢!

【问题讨论】:

  • 如果我理解正确,让它并行运行的问题是你可以部署没有经过全面测试的代码(即,如果它在 docker push 之后失败,那就太晚了)。我想你还是想一个接一个地做。
  • 另外,查看您的 GitHub 操作以了解您尝试过的内容也会有所帮助。
  • 您的工作流程只有作业 a 和 b?有一种方法可以使用 API 取消整个工作流程,但我不确定这是否是您想要的。如果作业 a 出现问题,您可以取消工作流,这意味着作业 b 和以下作业也将停止。
  • 我猜你可以将这两个工作分开在不同的工作流程中。然后,如果您的测试工作流程失败,您可以使用 Github API 上的 cancel-a-workflow-run 服务向该工作流程添加一个新工作,以取消另一个工作流程。
  • 谢谢大家!但这不是我们想要解决的方式。还是谢谢

标签: github github-actions


【解决方案1】:

您可以指定needs 选项并引用作业名称。见:https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idneeds

一个例子可能是这样的:

jobs:
  build:
    ...
  deploy:
    needs: build
    ...

【讨论】:

  • 我正在使用needs,但它会使第二个作业等待第一个作业完成,我想并行运行两者,如果一个失败,停止另一个.
  • 请参阅我上面关于并行执行此操作的评论。我不推荐它。您可能会发布未经测试的代码,然后您需要将其删除。在我看来,标准 DevOps 会告诉你在发布之前运行你的单元和端到端测试。
  • 感谢您的建议,但在构建和测试之后我们还有其他工作可以防止错误代码实际部署。我们希望通过并行运行它们来节省时间。还是谢谢!
  • 我明白了。我现在能想到的拥有并行作业的唯一方法是拥有单独的 GitHub Action 工作流并将它们构建为相互依赖。我现在无法提供完整的答案,但也许稍后会提供。请提供您的 GitHub 操作工作流程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 1970-01-01
相关资源
最近更新 更多