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

如何排查semantic-release权限拒绝错误并配置github_token

GitHub Actions semantic-release权限错误修复及GITHUB_TOKEN配置

问题情况

运行GitHub Actions工作流时碰到这个错误:

Run npx semantic-release
sh: 1: semantic-release: Permission denied
Error: Process completed with exit code 126.

目标是完成新版本发布,同时想搞懂GITHUB_TOKEN密钥怎么配置,当前工作流配置如下:

jobs:
  terraform-workflow:
    permissions:
      contents: write
      issues: write
      pull-requests: write
    
    runs-on: ubuntu-latest
    
    steps:
    - name: Checkout
      uses: actions/checkout@v3
    
    - name: Install dependencies
      run: npm install

    - name:  Setup Terraform
      uses: HashiCorp/setup-terraform@v2
      with:
        terraform_version: 1.1.9
    
    - name: init
      run: terraform init

    - name: fmt
      run: terraform fmt
    
    - name: validate
      run: terraform validate

    - name: plan
      run: terraform plan

    - name: release
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: npx semantic-release
        
    - name: apply
      run: terraform apply -auto-approve

    - name: destroy
      run: terraform destroy -auto-approve

解决办法

1. 搞定semantic-release权限拒绝问题

出现Permission denied的常见原因和修复方式:

  • 用npm脚本替代直接npx执行:
    直接跑npx semantic-release容易因为路径或权限卡壳,建议在项目的package.json里加个脚本:
    "scripts": {
      "semantic-release": "semantic-release"
    }
    
    然后把工作流里的release步骤改成:
    - name: release
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: npm run semantic-release
    
  • 全局安装并修正权限:
    非要用npx的话,在安装依赖后加一步全局安装并赋权:
    - name: Install semantic-release globally
      run: sudo npm install -g semantic-release && sudo chmod +x $(which semantic-release)
    
  • 修复项目目录权限:
    有时候是目录权限不对,在npm install前加:
    - name: Fix directory permissions
      run: sudo chown -R $USER:$USER .
    

2. GITHUB_TOKEN配置说明

内置令牌(推荐用)

你工作流里用的${{ secrets.GITHUB_TOKEN }}是GitHub自动给的内置令牌,不用手动创建,只要确保工作流的permissions配置对就行:

  • 你的工作流已经开了contents: write、issues: write、pull-requests: write,这些权限足够semantic-release创建版本标签和发布说明。
  • 这个令牌只对当前仓库有效,工作流跑完就失效,安全度高。

手动创建个人访问令牌(可选)

如果需要跨仓库操作之类的更高权限,可以手动做:

  1. 登GitHub,进设置 > 开发者设置 > 个人访问令牌 > 经典令牌
  2. 点生成新令牌,填名字,勾选需要的权限(至少要repo权限)
  3. 生成后复制令牌内容,去目标仓库的设置 > 机密和变量 > Actions > 新建仓库机密
  4. 命名为GITHUB_TOKEN(也可以自定义,记得同步改工作流里的引用),粘贴令牌后保存
  5. 工作流里这么用:GITHUB_TOKEN: ${{ secrets.你的机密名称 }}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:05:25