2012-04-18 164 views
17

我是詹金斯CI的新手。我在远程Jenkins中安装RVM,并在shell下执行。RVM和Jenkins设置

#!/bin/bash -x 
source ~/.bashrc 
rvm use [email protected] 

我得到以下错误。

+ 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 [email protected] 

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 

詹金斯打造外壳不能检测RVM,gemsets和宝石。我该怎么办?

更新2:因此jenkins无法检测红宝石。

+ ruby -v 
/tmp/hudson2505951775163045158.sh: line 5: ruby: command not found 
Build step 'Execute shell' marked build as failure 
Finished: FAILUR 

我没有使用任何jenkins plugn,我只是从Build-> Execute shell部分运行脚本。

+0

Zeck,我要疯了解决这个问题,你是如何解决它? – Farooq 2014-05-29 19:56:03

回答

11

尝试:

. $(/home/RVM_USER/.rvm/bin/rvm env [email protected] --path) 

确保运行稳定RVM:

rvm get stable 

注: 最后詹金斯的版本并不总是接受 “来源”,而是 “”。 RVM_USER是安装RVM的用户。 或者,您也可以在主PATH中导出RVM命令。

+0

非常先谢谢你的帮助。但是我得到'rvm:command not found'。请参阅我的更新 – Zeck 2012-04-18 14:19:26

+0

这是因为您使用不同的用户进行一个rvm安装,请确保第二个用户'zeck'使用相同的RVM - 在'/ home/zeck/.bashrc'中添加:'export PATH = $ PATH:/ var/lib/jenkins/.rvm/bin' – mpapis 2012-04-18 15:13:56

27

如错误消息所示,RVM需要一个登录shell。将hashbang行更改为#!/bin/bash -xl应解决此问题。

+5

顺便说一句,采购.rvmrc可以打印很多终端。您可能希望改为使用'#!/ bin/bash -l',然后在采购.rvmrc后执行'set -x'。 – disrupt 2012-05-09 15:40:14

+0

对-l和-x使用什么的解释? – 2014-04-21 05:18:04

+0

-l选项为您提供登录shell,-x在调试模式下启动bash。我能够使用-l,这样詹金斯的输出就不那么冗长了。 – bruz 2014-10-03 19:03:58

9

是的,显然你错过了你的PATH中的$HOME/.rvm/bin。我在Mac OS X上成功地从哈德森使用rvm。首先要注意的是,除非您定义了BASH_ENV环境变量(对于sh,ENV),否则仅在交互式非登录shell中才会自动调用.bashrc

$ /bin/bash 

当您在脚本中使用#!/bin/bash.bashrc将不会被调用: - - 例如在命令行下,当你做这样的shell启动。

为了让哈德森RVM的工作,我有我的.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"我RVM启用每次我开始新的终端窗口(交互式登录shell)的时间。

我不把任何东西放在我的.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 [email protected] 

set -ex 
cucumber # just an example 

通知的-e选项,如果任何命令后set -ex失败迫使脚本错误代码退出。这是您在使用Hudson脚本时可能需要的行为。 说RVM需要一个登录shell是不正确的。虽然在你的脚本中使用#!/bin/bash -l将起作用,但它似乎不是最好的方法。

+0

是的,这有帮助。 RVM的位置可能不同,在我的情况下,它是 '[[-s“/ usr/local/rvm/scripts/rvm”]] && source“/ usr/local/rvm/scripts/rvm”加上'rvm use ruby​​_name @ gemset_name' – 0x4a6f4672 2012-11-21 11:42:13

1

添加认领固定这詹金斯构建命令我

#!/usr/bin/env bash 

    rvm use 2.0.0 
    bundle install 
    rake test 
    ... 
+0

你先生,让我的一天:) – ncuesta 2013-10-31 19:50:35

3

就在你的shell脚本中加入以下代码,我认为RVM从源加载所以它应该工作的其他需要导出路径变量

#!/bin/bash -l 
source ~/.bashrc 
rvm use [email protected] 

l是用于登录shel,如果您包含x,那么它也将用于调试。

0

Jenkins节点不会以相同的方式加载路径,所以它没有使用正确的路径来查找rvm的ruby版本。您可以设置给定代理的路径。

  1. 查找做echo $PATH
  2. 假设您已经设置RVM正确的电流路径,找到在哪里RVM的Ruby版本是通过运行which ruby
  3. 位于有一个在你的代理人的配置的设置,你可以设置环境变量。将PATH设置为1和2连接。