Jenkins部署任务执行时提示nvm: command not found问题求助
问题解决:Jenkins执行nvm命令提示"command not found"
核心原因
Jenkins的每个sh步骤都是独立的Shell进程,你单独执行. ~/.nvm/nvm.sh的步骤只会在当前进程中加载nvm环境,下一个sh 'nvm list'是全新的进程,不会继承之前的环境变量,所以找不到nvm命令。
另外从控制台输出能看到,你的proxy账号下nvm没有设置默认版本(显示N/A version is not installed yet),这也会导致nvm加载异常,建议先在proxy账号下安装指定Node版本并设置为默认:
nvm install <你的Node版本号> nvm alias default <你的Node版本号>
解决方案
方案1:合并Shell命令到同一个sh步骤
把需要依赖nvm的命令和加载nvm的命令放在同一个sh块里,用多行字符串(三重引号)包裹,确保在同一个Shell进程中执行:
stage("Dependencies - npm installs") { when {anyOf {branch 'develop'; branch 'PR-*' } } steps { sh 'pwd' sh 'echo $PATH' sh ''' . ~/.nvm/nvm.sh nvm list npm install ''' } }
方案2:让Jenkins自动加载nvm环境
修改proxy用户的Shell启动配置(比如~/.bash_profile或~/.profile,因为Jenkins的sh默认是非登录非交互Shell,可能不会加载.bashrc),添加以下内容:
export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
之后Jenkins的每个sh步骤启动时都会自动加载nvm环境,不需要手动执行. ~/.nvm/nvm.sh。如果还是不生效,可以在sh命令中指定用登录Shell执行:
sh 'bash -l -c "nvm list"'
方案3:直接使用nvm的绝对路径执行命令
如果你不想修改Shell配置或合并命令,也可以直接调用nvm的脚本执行命令:
sh '~/.nvm/nvm.sh list'
不过这种方式写起来比较繁琐,不推荐作为长期方案。
内容的提问来源于stack exchange,提问作者Blake
相关产品推荐
相关产品推荐

