21

JenkinsCIは初めてです。リモートのJenkinsにRVMをインストールし、シェルの下で実行します。

#!/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ビルドシェルは、RVM、gemset、およびgemを検出できません。私は何をすべきか?

更新2:したがって、jenkinsはルビーを検出できません。

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

私はjenkinsプラグを使用しておらず、[ビルド]->[シェルの実行]セクションからスクリプトを実行しています。

4

6 に答える 6

32

エラーメッセージが示すように、RVMはログインシェルを想定しています。ハッシュバンラインをに変更すると、#!/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の最新バージョンは、常に「ソース」を受け入れるとは限りませんが、「。」を受け入れます。RVM_USERは、RVMをインストールしたユーザーです。または、メインPATHでRVMコマンドをエクスポートすることもできます。

于 2012-04-18T14:13:57.807 に答える
11

はい、どうやらあなたはあなたので逃し$HOME/.rvm/binますPATH。Mac OS XでHudsonからrvmを正常に使用しています。最初に気付くのは、BASH_ENV環境変数(ENVshの場合)を定義しない限り.bashrc、対話型の非ログインシェルでのみ自動的に呼び出されることです。このようなシェルは、コマンドラインから次のように実行すると開始されます。

$ /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"新しいターミナルウィンドウ(インタラクティブ、ログインシェル)を起動するたびに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は機能しますが、最善のアプローチとは思えません。

于 2012-06-03T17:20:41.860 に答える
3

このコードをシェルスクリプトに追加するだけです。rvmはソースから読み込まれているので、動作するはずです。それ以外の場合は、PATH変数をエクスポートする必要があります。

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

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

于 2014-08-27T12:24:48.080 に答える
2

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

    #!/usr/bin/env bash

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

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

  1. 次の手順を実行して、現在のPATHを見つけますecho $PATH
  2. rvmを適切に設定したと仮定して、rvmのバージョンのrubyがどこにあるかを実行して見つけます。which ruby
  3. エージェントの構成には、環境変数を設定できる設定があります。PATHを1と2を連結するように設定します。
于 2017-06-23T19:09:36.183 に答える