如何在GitHub Action中向受保护的main分支执行推送操作?
你遇到的报错是因为main分支设置了保护规则,要求至少1个拥有写入权限的审核者审批才能合并代码,GitHub Action默认的GITHUB_TOKEN没有权限绕过这类分支保护限制,你可以通过以下方案解决:
方案一:使用个人访问令牌(PAT)绕过保护规则(个人/小型项目推荐)
- 第一步:生成具备仓库读写权限的PAT
进入GitHub个人主页→设置→开发者设置→个人访问令牌,勾选repo全量权限后生成,保存生成的令牌值。 - 第二步:将PAT存入仓库机密
进入对应仓库的设置→Secrets and variables→Actions,新建一个名为GH_PAT的机密,值填入上一步生成的令牌。 - 第三步:修改工作流配置
- 调整checkout步骤,指定拉取代码用的令牌为你自定义的PAT:
- name: Checkout uses: actions/checkout@v2 with: persist-credentials: false token: ${{ secrets.GH_PAT }}- 调整semantic-release步骤的环境变量,将GITHUB_TOKEN替换为自定义PAT:
- name: Semantic release env: GITHUB_TOKEN: ${{ secrets.GH_PAT }} NPM_TOKEN: ${{ secrets.NPM_TOKEN }} HUSKY: 0 run: chmod +x script/prepare-release.sh && npx semantic-release - 第四步:调整分支保护规则
进入仓库设置→分支→分支保护规则,找到main分支对应的规则,在「允许指定的人员、团队和应用绕过分支保护规则」的选项中,添加你生成PAT的GitHub账号。
方案二:使用GitHub App生成访问令牌(组织级项目推荐)
如果是组织管理的项目,不想绑定个人账号的PAT,可以创建专门的GitHub App,授予对应仓库的读写权限,在工作流中通过App生成临时访问令牌使用,流程和方案一逻辑一致,只是令牌来源换成了组织级的应用。
注意:所有令牌必须存入仓库Secrets中,严禁明文写在公开的工作流配置文件内
内容的提问来源于stack exchange,提问作者Wade
相关产品推荐
相关产品推荐

