今回作成するプロジェクトからRSpecを使用してBDDを行おうと思い、Railsプロジェクトを作成しました。また、データベースもこれまではSQLite3を使用していたのですが、Postgres9.0を使用することに。
Postgresについてはまた別途記述しますが、JenninsでRSpecを実行するとエラーになり四苦八苦しました。一応解決したので同じようなトラブルを抱えている人がいたときの参考になればと思います。
具体的には、以下のようなシェルを実行します。
[sourcecode language="bash"] cd $WORKSPACE cd trunk /usr/local/bin/bundle install /usr/local/bin/rake db:migrate /usr/local/bin/rake db:migrate RAILS_ENV=test /usr/local/bin/rake spec/ [/sourcecode]
すると、RSpecのパスが通っていないのか次のようなエラーが出ます。
[sourcecode] /usr/local/bin/ruby -S rspec ./spec/helpers/system_configs_helper_spec.rb ... /usr/local/bin/ruby: No such file or directory -- rspec (LoadError) rake aborted! [/sourcecode]
キーワード「ruby: No such file or directory -- rspec (LoadError)」としてGoogleで検索するもいまいちでした。 (ワークスペースに取得されたプロジェクト内で "rake spec" を実行した場合、正常に処理が行われることは確認済みです。 )
エラーメールが100通以上溜まっていたので、100回以上設定変更してはビルドを実行したようです(__;)
最終的に一晩いろいろと試してみてどうにもうまくいかなかったのでRSpecの実行方法を次の通り変更しました。 (RailsでのRSpecの実行方法は rakeを使用する方法と bundle exec を使用する二つの方法があるようです。)
[sourcecode language="bash"] cd $WORKSPACE cd trunk /usr/local/bin/bundle install /usr/local/bin/rake db:migrate /usr/local/bin/rake db:migrate RAILS_ENV=test /usr/local/bin/bundle exec /usr/local/bin/rspec spec/ [/sourcecode]
これで、正常にspecフォルダ内のテストを実行することができるようになりました。
ちなみに、環境は下記の通りです。 OS:CentOS5.6(x86_64) Ruby:1.9.2 Rails:Rails 3.0.9 gem:1.8.13 rake:0.9.2 RSpec:2.7.1
そもそも、今回の問題はたぶんですが、Jenkinsがruby関連のパスを認識していないことが原因ではないかと考えています。ただ、実行ユーザーではパス設定を行っていることもあり、どうすれば良いのかがいまいちわかりません。
また、rakeプラグインも使用したのですが、rakeコマンドが存在しないと言うことでやはりエラーに…。なんにせよ目的はJenkinsで定期的にリポジトリからファイルを取得→テストの実行→カバレッジの測定→リリースファイルの作成でエラーがあればメールが飛んでくるという仕組みがほしかったのでOKとします。
RSpecがとてもすばらしそうだと言うことで利用しようと思ったのですが、思わぬところでつまずいてしまいました(ーー;)