【发布时间】:2019-06-10 17:15:08
【问题描述】:
我有一个 CircleCI 配置,最后有一个部署脚本。该命令应该通过 SSH 连接到服务器,移动到一个目录并执行一个 NPM 脚本。它看起来像这样:
ssh -o StrictHostKeyChecking=no ubuntu@xx.xx.xx.xx "cd /var/www/example.com && npm run restart_qa"
这会引发以下错误:
bash: npm: command not found
这表明服务器上没有安装 NPM,但它是。为了测试这一点,如果我单独运行这些命令,它们就可以工作。例如
ssh -o StrictHostKeyChecking=no ubuntu@xx.xx.xx.xx
cd /var/www/example.com
npm run restart_qa
那么这里有什么问题呢?
【问题讨论】:
-
npm 文件应该在 /usr/local/bin/npm 中。关注这个link
-
@jwatts 我不知道为什么这很重要。如果我通过 SSH 登录,则单独运行它可以工作的 npm 命令。所以 npm 存在于服务器上,它使用普通的 npm 命令运行。为什么我需要在命令中声明它的位置?
-
当您以交互方式 ssh 时,您的 shell 加载的配置文件集与 ssh 运行命令时不同。例如,在 Bash 中,从 ssh 运行命令时不会获取 .bash_profile。检查 npm 安装程序是否使用 PATH 中的 ~/.npm 更新了您的配置文件。例如,将其移至 .bashrc,以便在两种使用场景中都可用。
-
@bishop 好主意!
标签: bash shell ssh command-line circleci