我正在尝试在 Ubuntu 18.04 上部署我的工作 Windows 10 Spring-Boot/React 应用程序,但尽管多次尝试修复,但仍然收到“react-scripts: Permission denied”错误。希望你们中的一位反应专家能够发现我做错了什么。
我的 package.json 看起来像这样
{
"name": "medaverter-front",
"version": "0.1.0",
"private": true,
"dependencies": {
"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2",
"axios": "^0.19.2",
"bootstrap": "^4.4.1",
"react": "^16.13.0",
"react-dom": "^16.13.0",
"react-router-dom": "^5.1.2",
"react-scripts": "3.4.0",
"react-table-6": "^6.11.0",
"react-validation": "^3.0.7",
"reactstrap": "^6.5.0",
"validator": "^12.2.0"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": {
"production": [
">0.2%",
"not dead",
"not op_mini all"
],
"development": [
"last 1 chrome version",
"last 1 firefox version",
"last 1 safari version"
]
}
}
我以 root 身份登录并使用 nvm 安装 node 和 lts。我像这样安装了nvm:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
然后这样做:
nvm install node
nvm use node
nvm install --lts
nvm use --lts
然后我 cd
到 /var/lib/jenkins/workspace/MedAverter/medaverter-front
并安装 node_modules
像这样:
npm install -g
然后递归地将权限更改为 777,如下所示:
chmod -R 777 node_modules
我还递归地将所有 /root/.nvm 权限更改为 777,如下所示:
chmod -R 777 /root/.nvm
我可以使用它构建一次
npm run build
但随后我从 Jenkins 运行“立即构建”,但同样失败
> [[1;34mINFO[m] Running 'npm run build' in /var/lib/jenkins/workspace/MedAverter/medaverter-front > [[1;34mINFO[m] [[1;34mINFO[m] > medaverter-front@0.1.0 build /var/lib/jenkins/workspace/MedAverter/medaverter-front > [[1;34mINFO[m] > react-scripts build [[1;34mINFO[m] > [[1;31mERROR[m] sh: 1: **react-scripts: Permission denied** > [[1;31mERROR[m] npm ERR! code ELIFECYCLE > [[1;31mERROR[m] npm ERR! errno 126 > [[1;31mERROR[m] npm ERR! medaverter-front@0.1.0 build: `react-scripts build` > [[1;31mERROR[m] npm ERR! Exit status 126 > > ``` 然后我 `cd` 到 `/var/lib/jenkins/workspace/MedAverter/medaverter-front` 并运行
npm run build
”`
并且再次得到同样的错误:
> root@ubuntu-s-1vcpu-1gb-nyc1-01:/var/lib/jenkins/workspace/MedAverter/medaverter-front# > npm run build > > > medaverter-front@0.1.0 build /var/lib/jenkins/workspace/MedAverter/medaverter-front > > react-scripts build > > sh: 1: **react-scripts: Permission denied** npm ERR! code ELIFECYCLE > npm ERR! errno 126 npm ERR! medaverter-front@0.1.0 build: > `react-scripts build` npm ERR! Exit status 126
我确实花了几天时间试图弄清楚这一点。建议?
原文由 user3217883 发布,翻译遵循 CC BY-SA 4.0 许可协议
我终于想出了解决这个问题的办法。花了好几天的功夫。首先,我删除了 Jenkins 项目并使用 Pipeline 而不是 Freestyle 创建了一个新项目。然后我添加了一个带有脚本的 Jenkinsfile。这继续失败,但现在我可以灵活地添加额外的命令来处理错误。
一个新错误是关于 jest-worker 的。我在 DigitalOcean 服务器上运行了以下命令以通过该命令:
然后我又遇到了旧的权限错误。我认为所有这些权限错误都是由于用户 jenkins 试图运行用户 root 拥有的东西,即使一切都有 777 权限。我不明白,但这就是我解决它的方法。修改 /etc/sudoers 文件并添加以下行:
然后修改 Jenkins 文件脚本以包含递归 chmod 和 chown。这是最终工作的完整脚本:
我还必须将 DigitalOcean 液滴的内存从 1GB 增加到 2GB 以克服另一个错误。如果有人知道克服令人沮丧的权限错误的更好方法,请发表评论。