nvm在bash shell可用但sh shell不可用,Jenkins Docker代理报‘nvm未找到’
解决Jenkins Docker代理中sh环境找不到nvm的问题
问题原因
nvm安装脚本默认会把初始化代码写入~/.bashrc,这个文件仅交互式bash shell启动时才会加载。而Jenkins默认用非交互式的sh(或bash)执行任务,sh本身不会读取~/.bashrc,因此会出现nvm: command not found的错误。
解决方案
方案1:修改Dockerfile让nvm全局可用
调整RUN命令,把nvm的初始化逻辑写入全局配置文件,确保所有shell(包括sh)启动时自动加载:
RUN curl --silent -o- https://raw.githubusercontent.com/creationix/nvm/v0.39.1/install.sh | bash - \ && echo '[ -s "$HOME/.nvm/nvm.sh" ] && . "$HOME/.nvm/nvm.sh"' > /etc/profile.d/nvm.sh \ && chmod +x /etc/profile.d/nvm.sh \ && . $HOME/.nvm/nvm.sh \ && nvm install 18 \ && nvm install 16 \ && nvm install 14 \ && nvm alias default 14
注意:删除原命令中
chmod -R 777 /bin/,这会给所有系统命令添加可写权限,存在严重安全风险且完全没必要。
方案2:在Jenkins任务中手动加载nvm
如果不想修改Dockerfile,在Jenkins的sh脚本开头手动加载nvm初始化文件:
. $HOME/.nvm/nvm.sh nvm use 14 node -v
方案3:指定Jenkins用bash执行任务
在Jenkins任务配置中强制使用bash解释器:
- 在「Execute shell」步骤的第一行添加
#!/bin/bash - 或在Jenkins全局配置中,将「Shell executable」修改为
/bin/bash
内容的提问来源于stack exchange,提问作者Hari
相关产品推荐
相关产品推荐

