linux - EC2 - Codedeploy NPM 未找到错误
问题描述
我正在尝试AfterInstall
在我的 Codedeploy 部署中运行一个挂钩,该挂钩运行一个 shell 脚本以 cd 进入我的应用程序目录,为用户提供写入权限,然后运行npm install
以安装应用程序依赖项,但我在部署期间收到以下错误
Error CodeScriptFailed
Script Namescripts/npm-start.sh
MessageScript at specified location: scripts/npm-start.sh run as user root failed with exit code 127
Log TailLifecycleEvent - ApplicationStart
Script - scripts/npm-start.sh
[stderr]/opt/codedeploy-agent/deployment-root/dfdfdfd-c90-9f39-4ab9-bd51-e3f737003a72/d-ZID6SUV6U/deployment-archive/scripts/npm-start.sh: line 3: npm: command not found
现在我遇到了过去以 sudo 或 root 身份运行npm
会导致问题的问题,因为它是与我的ubuntu
用户一起安装的,但即使我runas: ubuntu
在我的用户中使用appspec.yml
它以 root 用户身份运行。
任何人都知道问题可能是什么?
appspec.yml:
version: 0.0
os: linux
files:
- source: /
destination: /var/www/app/
hooks:
AfterInstall:
- location: scripts/npm-install.sh
runas: root
timeout: 300
ApplicationStart:
- location: scripts/npm-start.sh
runas: root
timeout: 60
npm-install.sh:
#!/bin/bash
cd /var/www/app
sudo chmod g+s /var/www/app
sudo chmod o-rwx /var/www/app
npm install
npm-start.sh:
#!/bin/bash
cd /var/www/app
npm start
解决方案
你怎么知道npm
在你的盒子上正确安装和设置?在 this question和this question中,您可以看到有类似问题的用户。听起来您需要重新安装 NodeJS 才能让 NPM 再次满意。
您应该登录您的盒子,然后尝试sudo npm install
自己运行。如果它在这种情况下工作,您应该检查您的.bash*
文件,看看您是否做了任何事情来放入npm
您的路径或可能影响其运行方式的事情。如果您可以确认您的设置在非 CodeDeploy 场景中没问题,您可以专门调试 CodeDeploy 场景,但我猜这是您的设置。