You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git Action多工作流并行时如何串行执行?解决构建号冲突

解决GitHub Actions并行工作流导致TestFlight构建号冲突的串行执行方案

方案一:利用GitHub Environments的并发限制(推荐)

GitHub原生支持通过concurrency字段限制同一组的工作流串行执行,无需额外依赖:

  1. 进入仓库的Settings > Environments,创建一个专属环境(例如testflight-deploy)。
  2. 在你的CI/CD工作流文件中添加concurrency配置:
concurrency:
  # 若需同一分支串行,保留-${{ github.ref }};所有分支都串行则移除
  group: testflight-deploy-${{ github.ref }}
  # 设置为false表示排队等待,true则取消正在运行的同组工作流
  cancel-in-progress: false

配置后,同一group下的工作流会自动串行,后触发的会等待前一个完成后再执行,从根源避免构建号读取冲突。

方案二:Git仓库锁文件机制

通过在Git仓库中创建锁文件实现串行控制,适合需要更自定义逻辑的场景:

  1. 工作流启动时尝试创建并推送锁文件,失败则重试等待;
  2. 完成构建上传后删除锁文件,确保后续工作流能获取锁。
    示例工作流片段:
steps:
  - name: 拉取代码
    uses: actions/checkout@v4

  - name: 获取部署锁
    run: |
      # 循环尝试创建锁文件并推送,直到成功
      until git add .testflight-deploy.lock && git commit -m "Acquire deploy lock" && git push; do
        echo "锁已被占用,等待30秒后重试..."
        sleep 30
      done
    continue-on-error: false

  # 此处放置你的Fastlane构建、上传TestFlight的步骤

  - name: 释放部署锁
    # 无论工作流成功或失败都执行,避免死锁
    if: always()
    run: |
      rm .testflight-deploy.lock
      git add .testflight-deploy.lock
      git commit -m "Release deploy lock"
      git push

注意:需确保工作流拥有仓库的推送权限,可通过配置permissions: write-all或更精细的权限实现。

方案三:外部锁服务(如Redis)

如果团队已有基础设施,可借助Redis等分布式锁服务实现跨工作流的串行控制:

  1. 工作流启动时通过Redis的SETNX命令尝试获取锁,并设置过期时间防止死锁;
  2. 获取锁后执行构建,完成后删除锁。
    示例代码片段:
steps:
  - name: 获取Redis锁
    run: |
      until redis-cli -h $REDIS_HOST -a $REDIS_PASSWORD SET testflight-deploy-lock "locked" NX EX 3600; do
        echo "锁已被持有,等待30秒后重试..."
        sleep 30
      done
    env:
      REDIS_HOST: ${{ secrets.REDIS_HOST }}
      REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}

  # Fastlane构建与上传步骤

  - name: 释放Redis锁
    if: always()
    run: |
      redis-cli -h $REDIS_HOST -a $REDIS_PASSWORD DEL testflight-deploy-lock
    env:
      REDIS_HOST: ${{ secrets.REDIS_HOST }}
      REDIS_PASSWORD: ${{ secrets.REDIS_PASSWORD }}

内容的提问来源于stack exchange,提问作者JIn Park

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 08:01:42