【jenkins】 RVMが正常に動作しない bundle: command not found


jenkinsにRVMのプラグインを入れてジョブを作成&実行したところ色々とエラーになったのでメモ。

こちら↓を参考に設定。
http://www.buildinsider.net/enterprise/jenkins/02

作成したジョブはこんな感じ。

bundle install
bundle exec rake db:migrate
bundle exec rake db:test:clone
bundle exec rspec

んで、ジョブを実行したろころ「bundle: command not found」となってしまった。

[workspace] $ bash -c " source /usr/local/rvm/scripts/rvm && rvm use --install --create 2.1.1@circle && export > rvm.env"
Using /usr/local/rvm/gems/ruby-2.1.1 with gemset circle
[workspace] $ /bin/sh -xe /tmp/hudson9209835951963043237.sh
+ bundle install
/tmp/hudson9209835951963043237.sh: line 2: bundle: command not found

RVMにて指定したgemset(circle)には既にbundlerはインストール済みなのに「command not found」になってしまった。
ジョブの中に「gem env」を出力するようにして確認してみる。

gem env
bundle install
bundle exec rake db:migrate
bundle exec rake db:test:clone
bundle exec rspec

ジョブを実行したところ下記のようにログが出力された。

[workspace] $ bash -c " source /usr/local/rvm/scripts/rvm && rvm use --install --create ruby-2.1.1@circle && export > rvm.env"
Using /usr/local/rvm/gems/ruby-2.1.1 with gemset circle
[workspace] $ /bin/sh -xe /tmp/hudson7844199427310751372.sh
+ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 1.8.25
  - RUBY VERSION: 1.9.3 (2013-02-22 patchlevel 392) [i686-linux]
  - INSTALLATION DIRECTORY: /usr/local/rvm/gems/ruby-1.9.3-p392@hogehoge
  - RUBY EXECUTABLE: /usr/local/rvm/rubies/ruby-1.9.3-p392/bin/ruby
  - EXECUTABLE DIRECTORY: /usr/local/rvm/gems/ruby-1.9.3-p392@hogehoge/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86-linux
  - GEM PATHS:
     - /usr/local/rvm/gems/ruby-1.9.3-p392@hogehoge
     - /usr/local/rvm/gems/ruby-1.9.3-p392@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :benchmark => false
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - http://rubygems.org/

「Using /usr/local/rvm/gems/ruby-2.1.1 with gemset circle」となっているのに「gem env」を出力すると「ruby-1.9.3-p392@hogehoge」となっていた。RVMが正常に動作していないようだ。

残念ながらこの現象がおきる理由は分からなかったので、ジョブの中で対応するようにした。

こちら↓を参考に対応しました。
http://stackoverflow.com/questions/21726635/rvm-not-loaded-in-jenkins-shell-environment

jenkinsは/bin/falseになっていてスイッチできないため「-s /bin/bash」を指定してjenkinsにスイッチ
# su – jenkins -s /bin/bash

rvmのpathを追加する。
(rvmをrootユーザで入れてるので「/usr/local/rvm」になっています。通常は「$HOME/.rvm」とかになると思います。)
# vi ~/.bashrc

[[ -s "/usr/local/rvm/scripts/rvm" ]] && source "/usr/local/rvm/scripts/rvm"
PATH=$PATH:/usr/local/rvm/bin

そしてジョブを下記のように修正

#!/bin/bash 
source ~/.bashrc 
rvm use 2.1.1@circle 
bundle install 
bundle exec rake db:migrate 
bundle exec rake db:test:clone 
bundle exec rspec

シェルを指定してpathを読み込んでRVMを実行しています。
これやるならRVMのプラグイン入れる必要無いのかな?
とりあえずこれで動きました。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です