Ruby
rbenv
Jenkins

Jenkinsでrubyのビルドでハマった点

More than 3 years have passed since last update.

Mac Book Proを購入し、以前ローカルで使用していたJenkinsを移行した時にハマったので、ハマったポイントをここに記載しておきます。


rbenv plugin

デフォルトでRBENV_ROOTが"$HOME/.rbenv"になっており、rbenvはそこから利用されるわけだが、rbenv build wrapper利用時だと、指定場所のbin/rbenvを使用しようとしておりエラーとなる

FATAL: (CommandError) failed: "env RBENV_ROOT\\=\\$HOME/.rbenv RBENV_VERSION\\=2.1.5 \\$HOME/.rbenv/bin/rbenv versions --bare"

org.jruby.exceptions.RaiseException: (CommandError) failed: "env RBENV_ROOT\\=\\$HOME/.rbenv RBENV_VERSION\\=2.1.5 \\$HOME/.rbenv/bin/rbenv versions --bare"

スクリーンショット 2015-05-04 10.19.24.png


解決策

これはrbenv build wrapperがリポジトリから落としてきたrbenvを想定して作られているため、brew install等で入れたrbenvでは構造が違うため、上記のシェルでは実行できない。


そのため、RBENV_ROOTを"$HOME/.rbenv-jenkins"等、別の場所を指定してやると、wrapperがgit cloneから行ってくれるので、既にインストールされているrbenvと別の場所を指定してあげればいい。


RubyMetrics plugin

Rails Reportを出力しようとするとエラーになる。

ERROR: Build step failed with exception

java.lang.NullPointerException
at hudson.plugins.rake.Util.getExecutable(Util.java:22)
at hudson.plugins.rake.RubyInstallation.getCanonicalExecutable(RubyInstallation.java:70)
at hudson.plugins.rake.Util.getCanonicalRubies(Util.java:212)
at hudson.plugins.rake.Util.getCanonicalRubies(Util.java:198)
at hudson.plugins.rake.Rake$RakeDescriptor.loadInstallations(Rake.java:245)
at hudson.plugins.rake.Rake.perform(Rake.java:100)
at hudson.plugins.rubyMetrics.AbstractRailsTaskPublisher.perform(AbstractRailsTaskPublisher.java:65)
at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:764)
at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:724)
at hudson.model.Build$BuildExecution.post2(Build.java:185)
at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:671)
at hudson.model.Run.execute(Run.java:1769)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:374)
Build step 'Publish Rails Notes report' marked build as failure
Publishing rails stats report...
ERROR: Build step failed with exception
java.lang.NullPointerException
at hudson.plugins.rake.Util.getExecutable(Util.java:22)
at hudson.plugins.rake.RubyInstallation.getCanonicalExecutable(RubyInstallation.java:70)
at hudson.plugins.rake.Util.getCanonicalRubies(Util.java:212)
at hudson.plugins.rake.Util.getCanonicalRubies(Util.java:198)
at hudson.plugins.rake.Rake$RakeDescriptor.loadInstallations(Rake.java:245)
at hudson.plugins.rake.Rake.perform(Rake.java:100)
at hudson.plugins.rubyMetrics.AbstractRailsTaskPublisher.perform(AbstractRailsTaskPublisher.java:65)
at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:764)
at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:724)
at hudson.model.Build$BuildExecution.post2(Build.java:185)
at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:671)
at hudson.model.Run.execute(Run.java:1769)
at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
at hudson.model.ResourceController.execute(ResourceController.java:98)
at hudson.model.Executor.run(Executor.java:374)
Build step 'Publish Rails stats report' marked build as failure

最終的にヌルポになるのでエラーの区別がつきづらい。。。

恐らくRakeのversionをDefaultに指定しているため、gem内に何かインストールしてないからだと思われる。


解決策

そもそもDefaultってmacにデフォルトでインストールされているrubyからなのかな。。。

rbenvでrubyを管理しているので直接それを使用してもらうようにする。


  1. Jenkinsの管理 > システムの設定を開き Rakeまで移動する。


  2. Ruby installationの"追加"をクリックし使用するrubyが格納されているパスを指定する。

  3. 保存し、jobのRails ReportでRake Versionを先ほどの保存したものを選択する。

jenkins-rbenv.png

使用するrubyはrbenv build wrapperで指定したrbenv内のrubyのパスを指定してやるとgemのインストール漏れはないはずなので安心である。

ただし、まだjenkinsで使用するrbenvを未インストールの場合だと、Rake Versionにパスを追加できないので、あらかじめrbenvインストール用にjobを走らせる必要がある。