2012-04-18 9 views
17

私はJenkins CIを初めて使用しています。リモートJenkinsにRVMをインストールしていて、シェルの下で実行すると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. 

この意味は?私には分かりません。私を助けてください。

UPDATED

私は、スクリプトの下にしようとしたんだけど、私はまだエラーを取得:

#!/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:したがって、ジェンキンはルビーを検出できません。

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

私はジェンキンプラグインを使用していません。ビルド - >実行シェルセクションからスクリプトを実行しています。

+0

Zeck、私もこの問題を解決するつもりだ、どうやってそれを修正したの? – Farooq

答えて

11

試してみてください。

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

はあなたが安定したRVMを実行していることを確認します

rvm get stable 

注: 最終ジェンキンスバージョンは常に "ソース" を受け入れるのではなく、 ""。 RVM_USERは、RVMをインストールしたユーザーです。 また、メインPATHでRVMコマンドをエクスポートすることもできます。

+0

まずはお手数をおかけしていただきありがとうございます。しかし、私は 'rvm:コマンドが見つかりません'と表示されます。私のアップデート – Zeck

+0

1つのrvmのインストールで異なるユーザーを使うので、2人目のユーザー 'zeck'が '/ home/zeck/.bashrc'の中で同じRVMを使用していることを確認してくださいadd:' export PATH = $ PATH:/ var/lib/jenkins/.rvm/bin' – mpapis

27

エラーメッセージが示すように、RVMはログインシェルを必要とします。 hashbang行を#!/bin/bash -xlに変更するとこれが解決されます。

+5

ちなみに、.rvmrcのソースは、端末にたくさん印刷することができます。代わりに '#!/ bin/bash -l'を使い、.rvmrcをソースした後に' set -x'を実行したいかもしれません。 – disrupt

+0

-lと-xは何のために使うのですか? –

+0

-lオプションはログインシェルを提供し、-xはデバッグモードでbashを開始します。私はちょうど-lを使うことができたので、Jenkinsの出力は冗長ではありませんでした。 – bruz

9

はい、明らかに、あなたのPATH$HOME/.rvm/binが見つかりません。私は、Mac OS XのHudsonからrvmを正常に使用しています。最初に気付くのは、環境変数(shの場合はENV)を定義しない限り、.bashrcは対話型の非ログインシェルでのみ自動的に呼び出されます。あなたが行うとき、そのようなシェルが起動される - 例えば - コマンドラインから次:

$ /bin/bash 

あなたのスクリプトで#!/bin/bashを使用する場合、.bashrcが呼び出されることはありません。

はハドソンとRVMの仕事を作るために、私は私の .bash_profileに次き: [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"

PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting 
export PATH 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

おかげで、私はRVMは、私は新しいターミナルウィンドウ(インタラクティブ、ログインシェル)を起動するたびに有効になっています。

私は.bashrcに何も入れていませんが、特に私はここにrvmスクリプトを用意していません。何も間違ってはいませんが、もし他のスクリプトが `export BASH_ENV = $ HOME/'のように何か愚かなものを作ったら。bashrc 'を呼び出して非対話シェルを起動すると、何が起こるかがわかります。実際には忘れやすいのです。

したがって、.bashrcに何かをロードする代わりに、スクリプトをシェルの起動ファイルから独立させ、正しい環境がスクリプト内に設定されていることを確認することをお勧めします。私はまだ私の.bash_profile$HOME/.rvm/binを維持するが、その後、私は私のスクリプトの先頭に次のものがあります。

#!/bin/bash 

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 

rvm use [email protected] 

set -ex 
cucumber # just an example 

お知らせset -ex次の任意のコマンドが失敗した場合、エラーコードで終了するスクリプトを強制的に-eオプション。これはHudsonでスクリプトを使用するときに必要な動作です。 RVMがログインシェルを必要としているとは言えません。あなたのスクリプトに#!/bin/bash -lを使用することはできますが、それは最善のアプローチのようには思えません。

+0

はい、これが助けになりました。私の場合は、RVMの場所が異なるかもしれません。 '[[-s"/usr/local/rvm/scripts/rvm "]] && source"/usr/local/rvm/scripts/rvm " 'rvm use ruby​​_name @ gemset_name'と一緒に – 0x4a6f4672

1

#!/usr/bin/env bash 

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

あなたは私の日を作ってくれました:) – ncuesta

3

はちょうどあなたのシェルスクリプトにこのコードを追加私のためにこれを固定ジェンキンスでのビルドコマンドにシェバングを追加し、私はそれが他の仕事PATHをエクスポートする必要がある必要がありますので、RVMは、あなたのソースからロードされると思います変数

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

lはログインシェル用です。xを含めると、デバッグ用にもなります。

0

Jenkinsノードはパスを同じ方法でロードしないので、適切なパスを使用してrvmのバージョンのrubyを見つけることはできません。特定のエージェントのパスを設定できます。

  1. ルビーのRVMのバージョンは、あなた、あなたのエージェントのコンフィギュレーションの設定がありますwhich ruby
  2. を実行して配置されている場所を見つける、あなたが適切にRVMを設定したと仮定すると、echo $PATH
  3. を実行して、現在のPATHを探します環境変数を設定することができます。 PATHを1と2に設定します。
関連する問題