NVM不支持Jenkins执行shell

mir*_*rza 9 ubuntu continuous-integration jenkins nvm

我试图从Ubuntu服务器上的Jenkins执行shell脚本安装和使用nvm,但我收到此错误:

16:00:21 /tmp/hudson5983664925305072739.sh:8行:nvm:找不到命令

这是我迄今为止尝试过的,但没有成功:

#!/bin/bash

touch ~/.profile && source ~/.profile;
nvm current || echo "SSH NVM is being installed" &&  touch ~/.profile && curl -sL https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh -o install_nvm.sh && bash install_nvm.sh && source ~/.profile

echo "checking nvm"
bash ~/.nvm/nvm.sh;
nvm --version || exit 1;
Run Code Online (Sandbox Code Playgroud)

Jenkins执行shell截图:

在此输入图像描述

mir*_*rza 8

添加这些解决了这个问题:

. ~/.nvm/nvm.sh
. ~/.profile
. ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

  • 你应该只能使用`.〜/ .nvm/nvm.sh` - 另外两个可以配置比你需要的更多,或更少(在某些情况下,如果当前shell是非交互式的,即〜/ .bashrc`将提前退出,即运行shell脚本.) (3认同)

Cos*_*uee 7

您需要记住,Jenkins在非交互式Shell中运行命令,因此PATH与普通用户所拥有的不同。解决此问题的一种方法是使用绝对路径调用nvm。


Mat*_*w S 7

在努力让上述建议发挥作用后,我尝试了 NodeJS Jenkins 插件,它的效果非常好。

https://plugins.jenkins.io/nodejs/


Ric*_*ies 5

没有完全得到我在这里寻找的答案,但两者都引导我找到了明显的解决方案,甚至在 nvm 的自述文件中。该路径不在 Jenkins 的 shell 脚本中,因此无法找到可执行文件。

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
Run Code Online (Sandbox Code Playgroud)

要弄清楚你的$HOME是什么,你可以运行echo $HOME。例如$HOME可能看起来像这样

export NVM_DIR="/var/lib/jenkins/.nvm"
Run Code Online (Sandbox Code Playgroud)