概述
可以使用 jobs.<job_id>.concurrency
确保只有使用相同并发组的单一作业或工作流才会同时运行。 并发组可以是任何字符串或表达式。 允许的表达式上下文:github
、inputs
、vars
、needs
、strategy
和 matrix
。 有关表达式的详细信息,请参阅“表达式”。
还可以在工作流级别指定 concurrency
。 有关详细信息,请参阅 concurrency
。
当并发作业或工作流排队时,如果存储库中使用同一并发组的其他作业或工作流正在运行,则排队的作业或工作流将为 pending
。 在并发组中任何先前挂起的作业或工作流程都将被取消。 若还要取消同一并发组中任何当前正在运行的作业或工作流,请指定 cancel-in-progress: true
。
注意:
- 并发组名称不区分大小写。 例如,
prod
和Prod
将被视为同一个并发组。 - 对于使用并发组的作业或运行,无法保证排序,它们按处理顺序进行处理。
示例:使用并发和默认行为
concurrency: staging_environment
concurrency: ci-${{ github.ref }}
示例:使用并发取消任何当前作业或运行
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
示例:使用回退值
如果使用仅为特定事件定义的属性生成组名称,则可以使用回退值。 例如,github.head_ref
仅对 pull_request
事件定义。 如果工作流响应除了 pull_request
事件之外的其他事件,你将需要提供回退以避免语法错误。 以下并发组仅取消针对 pull_request
事件正在进行的作业或运行;如果 github.head_ref
未定义,并发组将回退到运行 ID,该 ID 保证是唯一的,并且是为该运行定义的。
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
示例:仅取消针对当前工作流正在进行的作业或运行
如果在同一个存储库中有多个工作流,则并发组名称在工作流中必须是唯一的,以避免从其他工作流取消正在进行的作业或运行。 否则,无论工作流如何,任何先前进行中或挂起的作业都将被取消。
要仅取消同一工作流的正在进行的运行,可以使用 github.workflow
属性来生成并发组:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
监控组织或企业中的当前作业
若要识别并发或队列的任何约束,可以检查组织或企业中 GitHub 托管的运行器上当前正在处理的作业数。 有关详细信息,请参阅“监视当前的工作”。