首页 > 解决方案 > 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

标签: linuxbashunixaws-code-deploy

解决方案


你怎么知道npm在你的盒子上正确安装和设置?在 this questionthis question中,您可以看到有类似问题的用户。听起来您需要重新安装 NodeJS 才能让 NPM 再次满意。

您应该登录您的盒子,然后尝试sudo npm install自己运行。如果它在这种情况下工作,您应该检查您的.bash*文件,看看您是否做了任何事情来放入npm您的路径或可能影响其运行方式的事情。如果您可以确认您的设置在非 CodeDeploy 场景中没问题,您可以专门调试 CodeDeploy 场景,但我猜这是您的设置。


推荐阅读