GitHub Actions多次推送仅执行最后一次构建及concurrency键报错解决
GitHub Actions 工作流优化及报错解决方案
一、多次合并到master仅执行最后一次构建的实现方法
核心使用GitHub Actions的concurrency(并发控制)能力实现,逻辑如下:
- 给master分支的工作流设置统一的并发分组,同一分组内同一时间仅允许一个任务运行
- 开启取消正在进行中的任务配置,新的触发到来时会自动终止旧的未完成任务,仅保留最后一次推送的任务执行
- 若需要等待1分钟避免短时间反复触发,可以在构建步骤前添加等待逻辑
配置示例:
name: master builder on: push: branches: - master concurrency: group: ${{ github.ref }} # 以分支名作为并发组唯一标识 cancel-in-progress: true # 自动取消同组内运行中的旧任务 jobs: build: runs-on: ubuntu-latest steps: # 可选步骤:等待1分钟,确认无后续推送后再执行构建 - name: 等待1分钟避免重复构建 run: sleep 60 # 原有构建步骤 - uses: actions/checkout@v4 # ... 你的其他构建、部署逻辑
如果你的环境不支持concurrency配置,可以用手动校验commit的方式替代,在构建步骤前添加如下校验逻辑:
- name: 校验是否为最新commit run: | latest_sha=$(git ls-remote origin master | awk '{print $1}') if [ "${{ github.sha }}" != "$latest_sha" ]; then echo "当前触发任务对应commit不是最新版本,自动退出" exit 1 fi
二、concurrency配置报错"The key 'concurrency' is not allowed"的原因及解决
报错原因:
- GitHub环境版本不支持:
concurrency是GitHub在2021年9月推出的功能,如果你使用的是私有部署的GitHub Enterprise Server(GHES),版本需要≥3.3才支持该配置,版本低于要求就会识别不到该字段 - 配置层级错误:检查
concurrency字段是否和on、jobs字段平级,缩进错误写到其他字段的子层级下也会触发报错 - 自托管runner版本过低:如果你使用自托管runner运行任务,旧版本runner可能不支持该配置项
解决方法:
- 升级GitHub环境:将GHES升级到3.3及以上版本,或使用公开的GitHub.com环境运行工作流
- 修正配置缩进:确保
concurrency字段和on、jobs平级,没有多余缩进 - 升级自托管runner到最新版本
- 若无法升级环境,可以使用上文中的commit校验逻辑替代concurrency能力,实现仅最新版本执行构建的效果
内容的提问来源于stack exchange,提问作者Tuuks
相关产品推荐
相关产品推荐

