同一仓库下GitHub Action修改另一工作流无workflows权限如何解决
问题原因
默认情况下GitHub自动生成的GITHUB_TOKEN未被授予workflows读写权限,这是平台的内置安全限制,禁止通过默认令牌修改.github/workflows/目录下的工作流文件,所以才会出现推送被拒的报错。
可行解决方法
方法一:使用自定义个人访问令牌(PAT)
- 进入你GitHub账号的「Settings」-「Developer settings」-「Personal access tokens」-「Tokens (classic)」页面,点击生成新的经典令牌
- 为令牌勾选
repo和workflows两个权限范围,生成后复制令牌值,注意生成PAT的账号需要拥有该仓库的写入权限,否则仍然会操作失败 - 回到当前代码仓库的「Settings」-「Secrets and variables」-「Actions」页面,新建一个仓库机密,名称比如设为
WORKFLOWS_TOKEN,值粘贴刚才生成的PAT - 修改你的Action配置,把
peter-evans/create-pull-request步骤里的token参数替换为${{ secrets.WORKFLOWS_TOKEN }},修改后的对应配置如下:
- name: Create Pull Request uses: peter-evans/create-pull-request@v3 with: token: ${{ secrets.WORKFLOWS_TOKEN }} branch: some-branch commit-message: "Updated stuff"
方法二:配置Action运行时的权限声明
如果你不想创建单独的PAT,可以直接在工作流根级别添加permissions声明,显式授予workflows写权限,在你的工作流开头添加如下配置即可:
name: my-action on: workflow_dispatch: schedule: - cron: "0 9 * * *" # 新增权限声明 permissions: contents: write workflows: write pull-requests: write jobs: components: runs-on: ubuntu-latest # 后续步骤保持原配置不变
注意:该方法需要确认仓库的GITHUB_TOKEN权限设置没有被组织规则限制,如果是组织下的仓库,需要管理员确认没有禁用自定义工作流权限配置。
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

