QA@IT

jenkinsでrailsのCIをしようとしているがうまく行かない

5945 PV

環境: amazon linux 3.14.20-20.44 + rvm 1.26.3 + OpenJDK 1.7.0_71 + jenkins 1.594
jenkinsプラグインでアンインストール可能なもの:Git Client Plugin 1.12 + Git Plugin 2.3.1 + Hudson Ruby Plugin 1.2 +
Rake plugin 1.8.0 + ruby-runtime 0.12 + RubyMetrics plugin for Jenkins 1.6.3 + Rvm 0.4 + SCM API Plugin 0.2 + Token Macro Plugin 1.10

jenkinsでrailsの自動テストや自動デプロイをしようとしているのですが、ビルドのシェルスクリプトの実行で

bundle install

とすると、

+ bundle install
/tmp/hudson3515773095911916356.sh: line 2: bundle: command not found

のようになって、失敗します。同様にgem envrvm -vruby -vなども、command not foundになっていました。
#!/bin/bashを頭につけても一緒でした。
rvmはyumを用いて入れ、/usr/local/rvmにrvmが入っているので、マルチユーザモードでインストールされていると思います。
(記憶が曖昧なのですが、インストール自体はec2-userでしたと思います)
/etc/passwdをいじり、jenkinsにsuしてbundleをしてみたところ、

Could not locate Gemfile

と出たので、普通にjenkinsユーザになったときは、bundleは認識されているみたいです。
ps auxwでjenkinsサービスはjenkinsユーザで動いていることは確認しました。
jenkinsで、jenkinsの管理 > システム設定 > Rakeにusr/local/rvmを指定してもダメでした。
シェルスクリプトの実行をなくして、Rake Invokeからdb:migrateをしましたが、

/usr/bin/env: ruby_executable_hooks: No such file or directory

と言われ、失敗しました。
どのような原因が考えられ、どうすればうまく行くでしょうか?

回答

jenkinsにsuしてbundleをしてみたところ、

具体的にコマンドは su - jenkins ですか? su jenkinsですか?後者であれば
スイッチ前のユーザーの環境で実行しているんじゃないかと思いますので確認できていません。

あとはそもそもどのユーザーでコマンドが実行されているか知るために whoami とか id をjenkinsに実行させてみるといいのではないでしょうか。

編集 履歴 (1)
  • `su jenkins`で確認していました。ですが、`su - jenkins`で再確認してみたところ、同様に`could not locate Gemfile`が出て来ましたし、workspaceに移動したところ正しく`bundle install --path vendor/bundle`出来ました。また、`id -un`をjenkinsに実行させてみたところ、jenkinsと出ました。 -
  • Could not locate GemfileはGemfileが無い時でしたね、失礼。なるほど、su - でもbundleコマンドは認識しているのですね。そうすると、pathとenvがどうなっているかではないでしょうか。idはグループも見ておいた方がいいですね。bashで起動するようにはなっているようですが、.bashrcや.bash_profileが読み込まれているか確認しないといけませんね。 -
  • 適当にexportしておけば確認は簡単だと思います。<.bash_profile -
  • jenkinsでPATHを出力したところ、ruby関連のPATHが通っていなかったので、シェルにPATHをexportする文を書いたところ、うまく行きました。ありがとうございました(.bashrcなどはまだ読み込めていないですが)。 -
ウォッチ

この質問への回答やコメントをメールでお知らせします。