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版本。 您可以设置给定代理的路径。

  1. 通过echo $PATH找到当前的echo $PATH
  2. 假设你已经正确设置了rvm,通过运行which ruby找到rvm的ruby版本所在的位置
  3. 在您的代理配置中有一个设置,您可以在其中设置环境变量。 将PATH设置为1和2连接。