bash - 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
那么这里有什么问题呢?
解决方案
原来这与 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
推荐阅读
- python - Python Docker 容器说测试覆盖率写入 xml 文件但没有可用的 xml 文件
- javascript - 从 javascript 动态加载 JSON 文件
- youtube-iframe-api - YouTube Player API 访问和修改 iframe 中的 DOM
- mysql - 如何获取别名表中的 MIN 和 MAX 值以在 BETWEEN 子句中使用?
- python - Databricks - 我们可以为笔记本中的所有单元格声明一个公共变量吗
- javascript - Safari Web 扩展 - 仅在单击扩展按钮时注入脚本
- c# - 是否可以将来自不同 .net 核心解决方案的两个 api 组合在同一个 swagger 门户下作为不同的文档条目?
- laravel - 使用用户 id 从 api 获取用户数据
- android - Android重命名与重命名文件
- java - 文件未在 Javadoc 中显示