RVM和Jenkins设置
我是Jenkins CI的新手。 我在我的远程Jenkins中安装RVM,当我执行下面的shell时。
#!/bin/bash -x source ~/.bashrc rvm use 1.9.3@rails-3.2.3
我得到以下错误。
+ source /var/lib/jenkins/.bashrc ++ PATH=/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/var/lib/jenkins/.rvm/bin:/var/lib/jenkins/.rvm/bin + rvm use 1.9.3@rails-3.2.3 RVM is not a function, selecting rubies with 'rvm use ...' will not work. You need to change your terminal settings to allow shell login. Please visit https://rvm.io/workflow/screen/ for example.
这是什么意思? 我什么都不知道。 请帮我。
更新:我尝试下面的脚本但我仍然得到错误:
#!/bin/bash -x source /home/zeck/.bashrc [[ -s ".rvmrc" ]] && source .rvmrc export RAILS_ENV=test bundle install
错误:
/tmp/hudson457106939700368111.sh: line 5: bundle: command not found Build step 'Execute shell' marked build as failure Finished: FAILURE
Jenkins构建shell无法检测RVM,gemsets和gem。 我该怎么办?
更新2:因此jenkins无法检测到ruby。
+ ruby -v /tmp/hudson2505951775163045158.sh: line 5: ruby: command not found Build step 'Execute shell' marked build as failure Finished: FAILUR
我没有使用任何jenkins插件,我只是从Build-> Execute shell部分运行脚本。
尝试:
. $(/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命令。
正如错误消息所示,RVM需要登录shell。 将hashbang行更改为#!/bin/bash -xl
应解决此问题。
是的,显然你错过了PATH
的$HOME/.rvm/bin
。 我在Mac OS X上成功使用了Hudson的rvm。首先要注意的是,除非你定义BASH_ENV
环境变量( ENV
for sh),否则只能使用交互式非登录shell自动调用.bashrc
。 当您执行此操作时(例如 – 命令行中的以下内容)将启动此类shell:
$ /bin/bash
在脚本中使用#!/bin/bash
时,不会调用.bashrc
。
为了让rvm与Hudson一起工作,我在.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。
我没有在.bashrc
放任何东西,特别是我没有在那里获取rvm脚本。 这没有什么不对,但如果任何其他脚本使得像设置`export BASH_ENV = $ HOME / .bashrc’然后调用非交互式shell那么愚蠢,你会看到可能发生的事情 – 实际上很容易忘记。
因此,不要将内容加载到.bashrc中,最好使脚本独立于任何shell启动文件,并确保在脚本中设置了正确的环境。 我仍然在我的.bash_profile
保留$HOME/.rvm/bin
,但是我在脚本的开头包含以下内容:
#!/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
会起作用,但它似乎不是最好的方法。
只需在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 ...
Jenkins节点不以相同的方式加载路径,因此它没有使用正确的路径来查找rvm的ruby版本。 您可以设置给定代理的路径。
- 通过
echo $PATH
找到当前的echo $PATH
- 假设你已经正确设置了rvm,通过运行
which ruby
找到rvm的ruby版本所在的位置 - 在您的代理配置中有一个设置,您可以在其中设置环境变量。 将PATH设置为1和2连接。