我是新来的 詹金斯 </跨度> CI。我在远程安装RVM 詹金斯 </跨度> 当我执行下面的shell。
#!/ bin / bash -xsource~ / .bashrcrvm使用1.9.3@rails-3.2.3
我得到以下错误。
RVM不是一个功能,选择……
是的,显然你错过了 $HOME/.rvm/bin 在你的 PATH 。我在Mac OS X上成功使用了Hudson的rvm。首先要注意的是,除非你定义 BASH_ENV 环境变量( ENV 对于sh), .bashrc 仅使用交互式非登录shell自动调用。当你执行这样的shell时 - 例如 - 命令行中的以下内容:
$HOME/.rvm/bin
PATH
BASH_ENV
ENV
.bashrc
$ /bin/bash
当你使用 #!/bin/bash 在你的脚本中, .bashrc 不会被叫。
#!/bin/bash
为了让rvm与Hudson一起工作,我有以下内容 .bash_profile :
.bash_profile
PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting export PATH [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
谢谢 [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 我每次启动新的终端窗口(交互式,登录shell)时都启用了rvm。
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
我没有把任何东西放进去 .bashrc ,尤其是我不是在那里采购rvm脚本。这没有什么不对,但如果任何其他脚本像设置`export BASH_ENV = $ HOME / .bashrc'那样愚蠢,然后调用非交互式shell,你会看到可能发生的事情 - 实际上很容易忘记。
因此,不要将内容加载到.bashrc中,最好使脚本独立于任何shell启动文件,并确保在脚本中设置了正确的环境。我仍然坚持 $HOME/.rvm/bin 在我的 .bash_profile ,但后来我在脚本的开头包含以下内容:
#!/bin/bash [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" rvm use 1.9.3-head@MyGemSet set -ex cucumber # just an example
请注意 -e 如果以下任何命令,则强制脚本以错误代码退出的选项 set -ex 失败。这是在使用Hudson脚本时可能需要的行为。 说RVM需要登录shell是不正确的。虽然使用 #!/bin/bash -l 在你的脚本中工作,它似乎不是最好的方法。
-e
set -ex
#!/bin/bash -l
Jenkins节点不会以相同的方式加载路径,因此它没有使用正确的路径来查找rvm的ruby版本。您可以设置给定代理的路径。
echo $PATH
which ruby
尝试:
. $(/home/RVM_USER/.rvm/bin/rvm env 1.9.3@rails-3.2.3 --path)
确保运行稳定的RVM:
rvm get stable
注意: 最后一个Jenkins版本并不总是接受“source”,而是“。”。 RVM_USER是安装RVM的用户。 或者,您也可以在主PATH中导出RVM命令。
只需在shell脚本中添加此代码,我认为rvm是从您的源加载所以它应该工作其他需要导出PATH变量
#!/bin/bash -l source ~/.bashrc rvm use 1.9.3@rails-3.2.3
l用于登录shel,如果你包含x那么它也可以用于调试。
在jenkins的build命令中添加一个shebang为我修复了这个问题
#!/usr/bin/env bash rvm use 2.0.0 bundle install rake test ...
正如错误消息所示,RVM需要登录shell。将hashbang行更改为 #!/bin/bash -xl 应该解决这个问题
#!/bin/bash -xl