21

我是 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 和 gems。我应该怎么办?

更新2:因此詹金斯无法检测到红宝石。

+ 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 部分运行脚本。

4

6 回答 6

32

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

于 2012-05-09T15:35:17.393 回答
14

尝试:

. $(/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 命令。

于 2012-04-18T14:13:57.807 回答
11

是的,显然你错过了$HOME/.rvm/bin你的PATH. 我在 Mac OS X 上成功地使用了 Hudson 的 rvm。首先要注意的是,除非您定义BASH_ENV环境变量(ENV对于 sh),否则.bashrc只能使用交互式非登录 shell 自动调用。当您从命令行执行以下操作时,就会启动这样的 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 启动文件,并确保在脚本中设置了正确的环境。我仍然保留$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在您的脚本中使用会起作用,但它似乎不是最好的方法。

于 2012-06-03T17:20:41.860 回答
3

只需将此代码添加到您的 shell 脚本中,我认为 rvm 是从您的源代码加载的,因此它应该可以工作,否则需要导出 PATH 变量

#!/bin/bash -l
source ~/.bashrc
rvm use 1.9.3@rails-3.2.3

l 用于登录shell,如果包含x,那么它也用于调试。

于 2014-08-27T12:24:48.080 回答
2

在詹金斯的构建命令中添加一个shebang为我解决了这个问题

    #!/usr/bin/env bash

    rvm use 2.0.0
    bundle install
    rake test
    ...
于 2013-08-01T12:13:14.800 回答
1

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

  1. 通过执行找到您当前的 PATHecho $PATH
  2. 假设您已经正确设置了 rvm,通过运行找到 rvm 的 ruby​​ 版本所在的位置which ruby
  3. 您的代理的配置中有一个设置,您可以在其中设置环境变量。将 PATH 设置为 1 和 2 连接。
于 2017-06-23T19:09:36.183 回答