web-dev-qa-db-ja.com

RVMとJenkinsのセットアップ

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セクションからスクリプトを実行しているだけです。

19
Zeck

試してください:

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

安定したRVMを実行していることを確認してください:

rvm get stable

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

11
mpapis

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

28
disrupt

はい、明らかにあなたの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を使用しても機能しますが、最善の方法とは思えません。

9

シェルスクリプトにこのコードを追加するだけで、rvmがソースから読み込まれるため、PATH変数をエクスポートする必要があります。

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

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

3
Mahattam

jenkinsのビルドコマンドにシバンを追加すると、これが修正されました

    #!/usr/bin/env bash

    rvm use 2.0.0
    bundle install
    rake test
    ...
2

Jenkinsノードは同じ方法でパスをロードしないため、適切なパスを使用してrvmのバージョンのRubyを検索していません。特定のエージェントのパスを設定できます。

  1. echo $PATHを実行して、現在のPATHを見つけます
  2. RVMが適切に設定されていると仮定して、which Rubyを実行して、RVMのバージョンRubyがどこにあるかを確認します。
  3. エージェントの構成には、環境変数を設定できる設定があります。 PATHを1と2が連結されるように設定します。
0
Ethan