Skip to main content

使用并发

一次运行一个作业。

概览

注意: 在作业级别指定并发时,无法保证在 5 分钟内排队的作业或运行的互相顺序。

You can use jobs.<job_id>.concurrency to ensure that only a single job or workflow using the same concurrency group will run at a time. 并发组可以是任何字符串或表达式。 表达式可以使用除 secrets 上下文以外的任何上下文。 For more information about expressions, see "Expressions."

您也可以在工作流程级别指定 concurrency。 更多信息请参阅 concurrency

当并发作业或工作流程排队时,如果仓库中使用同一并发组的其他作业或工作流程正在运行,则排队的作业或工作流程将 pending。 在并发组中任何先前挂起的作业或工作流程都将被取消。 如果还要取消同一并发组中任何当前运行的作业或工作流程,请指定 cancel-in-progress: true

示例:使用并发和默认行为

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

监控组织或企业中的当前作业

To identify any constraints with concurrency or queuing, you can check how many jobs are currently being processed on the GitHub-hosted runners in your organization or enterprise.

Screenshot of a list of active jobs

For more information, see "Monitoring your current jobs."