Jenkins CIは初めてです。リモートのJenkinsにRVMをインストールし、シェルの下で実行します。
#!/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
Jenkinsビルドシェルは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 [email protected] --path)
安定したRVMを実行していることを確認してください:
rvm get stable
注:Jenkinsの最新バージョンは常に「ソース」ではなく「。」を受け入れません。RVM_USERはRVMをインストールしたユーザーです。または、メインPATHでRVMコマンドをエクスポートすることもできます。
エラーメッセージが示すように、RVMはログインシェルを想定しています。 hashbangの行を#!/bin/bash -xl
に変更すると、これを解決できます。
はい、明らかにあなたのPATH
の$HOME/.rvm/bin
を逃しています。 Mac OS XでHudsonからrvmを正常に使用しています。最初に気づくのは、BASH_ENV
環境変数(shの場合はENV
)を定義しない限り、.bashrc
が自動的に呼び出されるのは、インタラクティブな非ログインシェル。このようなシェルは、たとえばコマンドラインから次のように実行すると開始されます。
$ /bin/bash
スクリプトで#!/bin/bash
を使用すると、.bashrc
は呼び出されません。
Hudsonで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を有効にしています。
私は.bashrc
に何も入れていません。特に、そこにrvmスクリプトを調達していません。何も問題はありませんが、他のスクリプトが `export BASH_ENV = $ HOME/.bashrc 'を設定して非インタラクティブシェルを呼び出すような愚かなことをすると、何が起こるかわかります-忘れがちです。
したがって、.bashrcに物をロードする代わりに、シェルの起動ファイルからスクリプトを独立させて、スクリプト内に正しい環境が設定されていることを確認することをお勧めします。私は$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がログインシェルを期待していると言うのは誤りです。スクリプトで#!/bin/bash -l
を使用しても機能しますが、最善の方法とは思えません。
シェルスクリプトにこのコードを追加するだけで、rvmがソースから読み込まれるため、PATH変数をエクスポートする必要があります。
#!/bin/bash -l
source ~/.bashrc
rvm use [email protected]
lはログインシェル用、xを含めるとデバッグ用にもなります。
jenkinsのビルドコマンドにシバンを追加すると、これが修正されました
#!/usr/bin/env bash
rvm use 2.0.0
bundle install
rake test
...
Jenkinsノードは同じ方法でパスをロードしないため、適切なパスを使用してrvmのバージョンのRubyを検索していません。特定のエージェントのパスを設定できます。
echo $PATH
を実行して、現在のPATHを見つけますwhich Ruby
を実行して、RVMのバージョンRubyがどこにあるかを確認します。