限制 Push 和 Pull_request 上的 GitHub 操作工作流程并发性?

pix*_*xel 14 github github-actions

我想将我的工作流程的并发限制为一次运行:

on:
  pull_request:
    paths:
      - 'foo/**'
  push:
    paths:
      - 'foo/**' 

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true
Run Code Online (Sandbox Code Playgroud)

但是,我发现 forpush head_ref是空的并且run_id始终是唯一的(如下所述: https: //docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-using- a-后备值)

如何创建一个在事件中保持不变的并发pull_requestpush

ysf*_*ran 11

试试这个配置:

concurrency:
  group: ${{ github.head_ref || github.ref_name }} 
  cancel-in-progress: true
Run Code Online (Sandbox Code Playgroud)

这会将组始终设置为<branch-name>. 诀窍是,github.head_ref仅当工作流由 a 触发时才设置pull_request,并且它包含 PR 源分支的值。

GitHub Repo(特别是查看Actions选项卡以查看已取消工作流程的示例)

  • @pixel当需要为相同的分支/路径触发时,我在同一工作流程中也遇到了“push”和“pull_request”的问题。最后,我不再担心“pull_request”,而只尝试使用“push”。似乎不可能设置一个设计良好的工作流程,因为对于如此简单和常见的用途来说,有太多的 github 操作限制不幸的是,这对于与 CI/CD 相关的其他各种主题也很重要。一切基本上都感觉像是黑客攻击 (2认同)

Grz*_*ski 6

在类似的情况下,我在工作流程中使用此并发键:

group: ${{ github.workflow }}-${{ github.ref }}
Run Code Online (Sandbox Code Playgroud)

我想限制它在单个分支上运行单个工作流程 - 我正在取消以前的运行。但这允许同时在不同的分支上进行多次运行 - 不确定你的情况到底是什么。

如果您想让一个工作流实例在整个存储库中运行,您可以选择:

group: ${{ github.workflow }}
Run Code Online (Sandbox Code Playgroud)