2016-12-22 9 views
2

私はsshのユーザsnaggsで私のマシンに接続するJenkinsオートメーションサーバを持っています。ジェンキンスはデフォルトのルビーを使用しますが、RVMからは使用しません

私のマシンはrubyの2つのバージョンがあります:

  • デフォルトのバージョンはOS /System/Library/Frameworks/ ..... /usr/bin/rubyから来ているマシンでRVM

    でインストール

  • ruby v2.3.3が自動化は、いくつかのコマンドを使用して、いくつかのPerlスクリプトを実行します。ジェンキンスからwhoamiが与えsnaggs

Perlスクリプトは、コマンドgem envを実行すると、出力は次のようになります。しかし

$ gem env 
RubyGems Environment: 
    - RUBYGEMS VERSION: 2.0.14.1 
    - RUBY VERSION: 2.0.0 (2015-12-16 patchlevel 648) [universal.x86_64-darwin16] 
    - INSTALLATION DIRECTORY: /Library/Ruby/Gems/2.0.0 
    - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby 
    - EXECUTABLE DIRECTORY: /usr/local/bin 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - universal-darwin-16 
    - GEM PATHS: 
    - /Library/Ruby/Gems/2.0.0 
    - /Users/snaggs/.gem/ruby/2.0.0 
    - /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/lib/ruby/gems/2.0.0 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - :sources => ["http://rubygems.org"] 
    - REMOTE SOURCES: 
    - http://rubygems.org 

私は私が持っているのと同じユーザーsnaggssshと同じマシンに入力すると、 rubyバージョンがインストールされたrvm

私は$ gem envを実行すると、私は出力を得る:

RubyGems Environment: 
    - RUBYGEMS VERSION: 2.6.8 
    - RUBY VERSION: 2.3.3 (2016-11-21 patchlevel 222) [x86_64-darwin16] 
    - INSTALLATION DIRECTORY: /Users/snaggs/.rvm/gems/ruby-2.3.3 
    - USER INSTALLATION DIRECTORY: /Users/snaggs/.gem/ruby/2.3.0 
    - RUBY EXECUTABLE: /Users/snaggs/.rvm/rubies/ruby-2.3.3/bin/ruby 
    - EXECUTABLE DIRECTORY: /Users/snaggs/.rvm/gems/ruby-2.3.3/bin 
    - SPEC CACHE DIRECTORY: /Users/snaggs/.gem/specs 
    - SYSTEM CONFIGURATION DIRECTORY: /Users/snaggs/.rvm/rubies/ruby-2.3.3/etc 
    - RUBYGEMS PLATFORMS: 
    - ruby 
    - x86_64-darwin-16 
    - GEM PATHS: 
    - /Users/snaggs/.rvm/gems/ruby-2.3.3 
    - /Users/snaggs/.rvm/gems/[email protected] 
    - GEM CONFIGURATION: 
    - :update_sources => true 
    - :verbose => true 
    - :backtrace => false 
    - :bulk_threshold => 1000 
    - :sources => ["http://rubygems.org"] 
    - REMOTE SOURCES: 
    - http://rubygems.org 
    - SHELL PATH: 
    - /Users/snaggs/.rvm/gems/ruby-2.3.3/bin 
    - /Users/snaggs/.rvm/gems/[email protected]/bin 
    - /Users/snaggs/.rvm/rubies/ruby-2.3.3/bin 
    - /usr/local/bin 
    - /usr/local/bin 
    - /usr/bin 
    - /bin 
    - /usr/sbin 
    - /sbin 
    - /Users/snaggs/.rvm/bin 

/Users/snaggs/.rvm/gems/ruby-2.3.3下にある他のバージョンを使用するようにジェンキンズに伝えるためにどのように?

[EDIT]

は、私はJavaのバージョンを設定しようとしたとき、私は同様の問題があった

+0

PATHが期待どおりに設定されていないように見えます。どうすれば[rvm plugin](https://wiki.jenkins-ci.org/display/JENKINS/RVM+Plugin)を使うのですか? –

答えて

4

スーパーユーザーとしてではない実行スクリプトを実行します

Jenkins wiki上を見てみましょう:

SSHスレーブプラグインは、スレーブに接続すると、それは インタラクティブシェルを実行しません。 ssh [email protected] "gem env"

:代わりに、それはあなたがSSHからgem envを実行する際に

だから、ジェンキンスさんが得るようにあなたが同じ結果を得る必要があり、仮定「... sshの SLAVEHOSTコマンド」あなたのランニングと同等の処理を行いマシン上で、オートメーションはいくつかのコマンドでいくつかのPerlスクリプトを実行します。

あなたはジェンキンスは、デフォルトで自身.bash_profileを使用していますので、あなたが.bash_profile_CUSTOMを呼び出す必要があなたの元.bash_profileに等しいいくつかのカスタム.bash_profile_CUSTOMを作成しようとすることができます。以下のようなあなたのperlスクリプトを実行します。

ssh [email protected] "source ~/.bash_profile_CUSTOM && perl some_perl_script.pl" 

ちょうどあなたがバインドbash_profile_CUSTOMファイルにジェンキンスさんがビルドマシンに接続するたびに必要であることを覚えておいてください。

source ~/.bash_profile_CUSTOM && perl some_perl_script.pl 

編集

異なる出力に


を、それが動作するかどうか私に知らせたり、あなたを与える:(25/12/2016)

だから、ジェンキンスからのコマンドの実行可能ファイルは、のようなものでなければなりません

Jenkinsのプラグイン(Prefix Start Slaveコマンドの場合はEnvInject Pluginなど)をインストールしたくない場合は、次のようにbashスクリプトでPerlスクリプトをラップできます。

#!/bin/bash 

source ~/.bash_profile_ORIG; 

perl some_perl_script.pl; 

したがってPerlスクリプトは、.bash_profile_CUSTOMで定義したプロファイルで開始します。

+0

はあなたのソリューション(bashスクリプト付き)のように見えますが、私は '.bash_profile_CUSTOM'を作成してsshから動作します。わーい :)。 'perl'のフルパスを書く必要もあります。今はbashに取り組んでいますが、Perlから終了コードを取得する必要があります。あなたは数日保存しました。ありがとうございます。 – snaggs

+0

まだジェンキンスと私の側に問題があります。 – snaggs

+0

@snaggs、ok、私はあなたの宿題をすることができるようにあなたの環境を持っていません。私は私のために働いた概念を掲載しました。がんばろう –

関連する問題