github actions:推送几次,但我希望只在最后一次推送时完成构建

Tuu*_*uks 9 build github github-actions

name: master builder
on:
  push:
    branches:
      - master
    ~~~
Run Code Online (Sandbox Code Playgroud)

我有一个这样的工作流程。因此,每当我推送到主分支时,操作就会运行。但我希望构建仅在最后一次推送时起作用。例如,

主分支 - 功能 1(人员 1)

主分支 - 功能 2 (person2)

主分支 - feature3 (person3)

在这个结构中,如果features1,2,3几乎同时合并,构建将运行3次。但我希望仅在最后一次合并的基础上构建主分支。就一次。有办法做到这一点吗?就像..在推送时等待大约 1 分钟后仅运行一次构建。


这是我按照您回答的方式进行的示例代码。但我收到错误“不允许键‘并发’”。怎么了?

name: test

on:
  push:
    branches:
      - feature/**

concurrency:
  group: ${{ github.ref }}
  cancel-in-progress: true

jobs:
~~~
Run Code Online (Sandbox Code Playgroud)

Krz*_*tof 14

您可以尝试通过并发来实现这一点 cancel-in-progress: true

并发性可确保一次仅运行使用同一并发组的单个作业或工作流。并发组可以是任何字符串或表达式。该表达式只能使用 github 上下文。有关表达式的更多信息,请参阅“GitHub Actions 的上下文和表达式语法”。

您还可以在作业级别指定并发性。有关更多信息,请参阅 jobs.<job_id>.concurrency。

当并发作业或工作流排队时,如果使用存储库中相同并发组的另一个作业或工作流正在进行中,则排队的作业或工作流将处于挂起状态。并发组中任何先前挂起的作业或工作流都将被取消。要同时取消同一并发组中任何当前正在运行的作业或工作流,请指定 cancel-in-progress: true。

然而

注意:并发性目前处于测试阶段,可能会发生变化。

这是一个示例工作流程:

name: Deploy

on:
  push:
    branches:
      - main
      - production
    paths-ignore:
      - '**.md'


# Ensures that only one deploy task per branch/environment will run at a time.
concurrency:
  group: environment-${{ github.ref }}
  cancel-in-progress: true

jobs:

  build:
    runs-on: ubuntu-latest
    steps:
      - name: Extract commit
        run: |
          echo "Sending commit $GITHUB_SHA for $GITHUB_REPOSITORY"
Run Code Online (Sandbox Code Playgroud)

  • 并发只能在github提供的runner中实现吗?(目前,它已注册并用作自托管运行器。...) (3认同)