取消操作运行,当拉取请求更改时

Posted

技术标签:

【中文标题】取消操作运行,当拉取请求更改时【英文标题】:Cancel Action run, when Pull Request changes 【发布时间】:2022-01-23 21:03:00 【问题描述】:

对于我的项目,我有一个很长的 github 操作,它会在创建新的拉取请求时触发。 这些是我使用的触发器:

on:
  pull_request:
    types: [opened, ready_for_review, labeled]

此操作被定义为我的拉取请求的“状态检查”要求,以确保该操作在允许某人合并他的 PR 之前运行良好。

但是,在允许合并任何内容之前,我的 PR 还需要与 develop 保持同步。

所以我经常遇到的场景是这样的:

创建一个新的拉取请求 Github Action 启动,我的 PR 的检查状态变为“进行中” 我意识到我的分支不是最新的开发,所以我更新它。 PR 的检查状态变为“预期”,因为我当前的运行是在以前版本的分支上开始的。

我对这种情况的问题是,即使我的 github 操作运行现在完全无效/过时(因为分支的内容已更改),操作本身仍在运行。我需要手动转到操作选项卡并取消此运行。

如果分支或 PR 的内容发生变化,有没有办法自动取消此运行?

【问题讨论】:

【参考方案1】:

由于 CI 作业在不同的 github 运行器中执行,因此没有直接的方法可以通过 Github Actions本机自动取消以前的 CI 作业。

但是,有一些解决方法可以帮助您解决问题:

1 - 直接使用 Github API 到 cancel workflow runs(在您的特定情况下自动化可能并非易事)。

2 - 使用cancel-workflow-action,这将取消给定工作流之前不是completed 的任何运行。

3 - 使用skip-duplicate-actions,在合并、拉取请求或类似操作后跳过重复的工作流运行。

4 - 使用本机 concurrency field 确保一次只运行一个使用同一并发组的作业或工作流。

【讨论】:

谢谢你。并发字段非常有趣,因为我可以使用 cancel-in-progress 选项。但是,在我的情况下,这并不是 100% 可用的,因为我真的不知道下一个动作运行何时开始(我的第一次运行是自动的,但后续运行是在拉取请求上手动触发的)。不过,这些还是一些有趣的线索,谢谢。

以上是关于取消操作运行,当拉取请求更改时的主要内容,如果未能解决你的问题,请参考以下文章

通过 workflow_run 运行时,拉取请求未检测到操作

竹子 - 构建我的拉取请求

AWS codebuild 没有构建我的 github 拉取请求

如何为 lint 和运行测试的拉取请求编写管道

如果失败,拉取请求触发的 GitHub 操作不会锁定“合并”按钮

如何取消 AJAX 长时间运行的 MVC 动作客户端(在 javascript 中)?