如何排查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里加个脚本:
然后把工作流里的release步骤改成:"scripts": { "semantic-release": "semantic-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创建版本标签和发布说明。 - 这个令牌只对当前仓库有效,工作流跑完就失效,安全度高。
手动创建个人访问令牌(可选)
如果需要跨仓库操作之类的更高权限,可以手动做:
- 登GitHub,进设置 > 开发者设置 > 个人访问令牌 > 经典令牌
- 点生成新令牌,填名字,勾选需要的权限(至少要
repo权限) - 生成后复制令牌内容,去目标仓库的设置 > 机密和变量 > Actions > 新建仓库机密
- 命名为
GITHUB_TOKEN(也可以自定义,记得同步改工作流里的引用),粘贴令牌后保存 - 工作流里这么用:
GITHUB_TOKEN: ${{ secrets.你的机密名称 }}
内容的提问来源于stack exchange,提问作者Johnpaul Emenogu
相关产品推荐
相关产品推荐

