首页 > 解决方案 > SSH 和 CI 执行命令

问题描述

我有一个 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

那么这里有什么问题呢?

标签: bashshellsshcommand-linecircleci

解决方案


原来这与 npm 和 node 的安装路径有关。我使用 NVM 安装了两者,所以它们不在 shell 脚本所期望的位置。为了解决这个问题,我做了以下事情:

sudo ln -s /home/ubuntu/.nvm/versions/node/v10.13.0/bin/npm /usr/local/bin/npm
sudo ln -s /home/ubuntu/.nvm/versions/node/v10.13.0/bin/node /usr/local/bin/node

推荐阅读