从 jenkins nvm 执行 SSH 命令时未找到

when executing SSH command from jenkins nvm not found

我正在开发一个快速应用程序并尝试使用 Jenkins 在 ec2 上部署它。 我用终端安装了 nvm,它工作正常。

在 Jenkins 中,我使用 Publish Over SSH Plugin 以相同的 user 将构建上传到 ec2,但它在 npm install 命令上失败。

我检查了 .bashrc 并验证了 nvm 安装。

当我从 shell 运行 printenv 命令时,它在 PATH

中显示 nvm

PATH=/home/ubuntu/.nvm/versions/node/v12.13.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

但是当我从 Jenkins 工作中 运行 它不存在

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games _=/usr/bin/

一个建议是您在 jenkins 脚本中 运行 类似 'echo whoami' 的东西,以确保您是当前用户。如果是这样,您可以更改用户(例如,如果 运行ning 为 root 用户)。 从你的描述来看,在我看来,用户是不一样的。

Jenkins node / agent / slave 启动一个 non-interactive shell,它跳过用户 .bashrc,只有系统(在 /etc 中)配置文件。除了编辑系统默认值之外,还有各种解决方法。

我们使用 SSH Slaves Setup plugin and EnvInject.

的组合

YMMV.

一般 snap 的解决方法(此问题实际上会影响所有 snap 应用程序)是从 Jenkins 节点配置修改 PATH 环境变量。通过这样做,节点上的每个作业 运行 都会看到修改后的 PATH 变量。以下设置将“/snap/bin”添加到 PATH: