GitLab Runner执行npm run build报node权限不足如何解决
问题原因
构建阶段执行vue-cli-service时,脚本通过shebang#!/usr/bin/env node调用Node解释器触发权限拒绝,核心问题是Node安装路径配置错误,和项目代码、依赖版本无关。
从日志能看到两个明显异常点:
- Node安装在
/root/soft目录下,该目录默认只有root用户可访问,即使CI脚本里切换到root执行,GitLab Runner的shell执行环境加载逻辑会导致子进程无法正常读取该路径下的二进制 - 存在两个Node路径,
/usr/bin/node大概率是指向/root目录下文件的软链接,软链接跨用户目录时很容易触发权限问题
修复步骤
按顺序执行以下操作即可解决:
- 把Node安装包移动到全局公共可访问路径,不要放在/root用户目录下
mv /root/soft/node-v16.15.0 /usr/local/lib/
- 清理原有失效软链接,重新创建全局可访问的软链接
rm -f /usr/bin/node /usr/bin/npm /usr/bin/npx ln -s /usr/local/lib/node-v16.15.0/bin/node /usr/bin/node ln -s /usr/local/lib/node-v16.15.0/bin/npm /usr/bin/npm ln -s /usr/local/lib/node-v16.15.0/bin/npx /usr/bin/npx
- 给所有Node相关二进制补全可执行权限
chmod +x /usr/local/lib/node-v16.15.0/bin/*
- 修正构建目录权限,避免跨用户权限冲突
chown -R gitlab-runner:gitlab-runner /home/gitlab-runner/builds/
- 调整CI脚本配置:
- 删除脚本里的
npm config set user 0和npm config set unsafe-perm true两行配置,不要用root身份跑CI任务,默认的gitlab-runner用户权限足够完成构建 - 删除
chmod -R 755 ./*命令,npm安装依赖时会自动配置可执行文件权限,手动递归改权限反而可能破坏node_modules内的权限配置 - 替换旧的淘宝npm源为最新官方镜像地址,避免旧域名解析异常
- 删除脚本里的
验证方式
如果调整后仍有问题,在CI脚本的npm run build前加三行命令排查环境:
which node /usr/bin/env node -v ls -l /usr/bin/node
只要这三行能正常输出Node路径、v16.15.0版本号、软链接指向正确,执行build就不会再报权限错误。
内容的提问来源于stack exchange,提问作者lich
相关产品推荐
相关产品推荐

