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

如何在GHA工作流运行期间冻结分支,完成后解冻?

在GitHub Actions运行期间冻结/解冻分支的方法

当然可以实现,核心思路是通过GitHub API在工作流生命周期的起点修改分支保护规则来冻结分支,在工作流结束(无论成功或失败)时恢复原有规则解冻分支。

具体实现步骤

  1. 配置权限
    在工作流文件开头设置permissions,确保GITHUB_TOKEN拥有修改分支保护的权限:

    permissions:
      admin:branch_protection: write
      contents: read
    
  2. 冻结分支(工作流启动时)
    先备份当前分支的保护规则,再更新规则禁止所有用户/团队推送:

    - name: 备份并冻结分支
      run: |
        # 备份现有分支保护规则
        curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
          "https://api.github.com/repos/${{ github.repository }}/branches/${{ github.ref_name }}/protection" > branch_protection_backup.json
        
        # 应用冻结规则:禁止所有推送、强制管理员遵守规则、禁用删除和强制推送
        curl -X PUT -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
          -H "Content-Type: application/json" \
          "https://api.github.com/repos/${{ github.repository }}/branches/${{ github.ref_name }}/protection" \
          -d '{
            "restrictions": {
              "users": [],
              "teams": []
            },
            "enforce_admins": true,
            "allow_deletions": false,
            "allow_force_pushes": false
          }'
    
  3. 解冻分支(工作流结束时)
    使用if: always()确保无论工作流结果如何都执行解冻,从备份文件恢复原有规则:

    - name: 解冻分支
      if: always()
      run: |
        # 检查备份文件是否为空(原分支无保护规则的情况)
        if [ -s branch_protection_backup.json ]; then
          # 恢复原有保护规则
          curl -X PUT -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
            -H "Content-Type: application/json" \
            "https://api.github.com/repos/${{ github.repository }}/branches/${{ github.ref_name }}/protection" \
            -d @branch_protection_backup.json
        else
          # 原分支无保护规则,删除临时添加的规则
          curl -X DELETE -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
            "https://api.github.com/repos/${{ github.repository }}/branches/${{ github.ref_name }}/protection"
        fi
    

注意事项

  • 如果你的分支原本就有复杂的保护规则(比如必填PR审查、状态检查),备份和恢复步骤会完整保留这些规则,不会破坏原有配置。
  • 确保运行工作流的账号(或GITHUB_TOKEN对应的身份)拥有仓库的管理员权限,否则无法修改分支保护规则。
  • 避免在并行运行的工作流中操作同一个分支的保护规则,可能导致规则冲突或备份覆盖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 15:35:36