Bitbucket Pipeline部署EC2实例遇yarn未找到问题求助
问题排查与解决
1. 解决'yarn not found'的核心问题
远程SSH执行命令时,默认是非交互式、非登录Shell,不会加载.bashrc/.profile这类用户级环境配置文件——而你手动登录EC2时用的是交互式登录Shell,能正常读取yarn的路径配置,这就是差异所在。
具体修复方式:
- 使用yarn绝对路径执行:先在EC2上跑
which yarn获取绝对路径(比如/home/ubuntu/.yarn/bin/yarn),然后把命令替换成:cd /home/ubuntu/api/ && /home/ubuntu/.yarn/bin/yarn && /home/ubuntu/.yarn/bin/yarn build - 强制加载环境配置:在执行命令前先加载用户配置文件,比如:
或者直接用登录Shell执行命令:source ~/.bashrc && cd /home/ubuntu/api/ && yarn && yarn buildssh -i your-key.pem ubuntu@ec2-xxx.compute.amazonaws.com 'bash -l -c "cd /home/ubuntu/api/ && yarn && yarn build"'
2. deploy.sh脚本执行失败的补充排查
如果用脚本也出现同样问题,检查这几点:
- 脚本开头是否指定登录Shell:把首行改成
#!/bin/bash -l,强制加载环境配置 - 脚本中显式设置PATH:在脚本开头添加:
export PATH="$HOME/.yarn/bin:$HOME/.config/yarn/global/node_modules/.bin:$PATH" - 确认Pipeline的SSH连接用户和你手动登录的用户一致(比如都是ubuntu),避免权限或环境差异
3. 另一套Pipeline拉取成功但构建失败的排查
- 先验证代码完整性:远程执行
ls -l /home/ubuntu/api/,确认拉取的文件是否完整 - 检查权限问题:比如构建时是否有写入
dist等目录的权限,可临时在命令前加sudo测试(长期建议调整目录权限,而非依赖sudo) - 输出完整错误日志:把构建命令改成
cd /home/ubuntu/api/ && yarn build 2>&1,将错误信息全部输出,方便定位具体失败原因
内容的提问来源于stack exchange,提问作者Tanjin Alam
相关产品推荐
相关产品推荐

