【问题标题】:NVM is not working on Jenkins execute shellNVM 不适用于 Jenkins 执行 shell
【发布时间】:2017-07-26 09:44:57
【问题描述】:

我正在尝试在 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;

Jenkins 执行 shell 截图:

【问题讨论】:

    标签: ubuntu jenkins continuous-integration nvm


    【解决方案1】:

    添加这些可以解决问题:

    . ~/.nvm/nvm.sh
    . ~/.profile
    . ~/.bashrc
    

    【讨论】:

    • 你应该可以只使用. ~/.nvm/nvm.sh - 其他两个可能配置的比你需要的多很多,或者更少(在某些情况下,如果当前的shell不是~/.bashrc会提前退出交互式,即运行一个 shell 脚本。)
    • @RichVel 是否有可能在多个 sh 调用中使用它?
    • Jenkins 在单独的进程中运行每个sh 命令,因此您必须找到解决此问题的方法。如果您使用的是 Ubuntu,您可以查看使用 ENV env var 指向由 dash shell 运行的脚本(默认为 /bin/sh,请参阅 man sh) - 但您需要确保 Jenkins以某种方式将/bin/sh 作为登录shell 运行。也许另一个答案中提到的 NodeJS 插件是更好的探索途径。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      在努力使上述建议发挥作用后,我尝试了 NodeJS Jenkins 插件,它就像一个魅力。

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

      【讨论】:

        【解决方案4】:

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

        export NVM_DIR="$HOME/.nvm"
        [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
        

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

        export NVM_DIR="/var/lib/jenkins/.nvm"
        

        【讨论】:

          猜你喜欢
          • 2023-03-08
          • 1970-01-01
          • 1970-01-01
          • 2017-07-06
          • 2014-01-11
          • 2019-02-12
          • 2014-09-04
          • 2020-05-19
          • 2020-05-31
          相关资源
          最近更新 更多