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

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](https://qiita-image-store.s3.amazonaws.com/0/20424/3f91849c-6b11-22fe-d3bb-93e1cc966982.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](https://qiita-image-store.s3.amazonaws.com/0/20424/e86b5a29-b3a1-e411-1846-873190cd803a.png)

使用するrubyはrbenv build wrapperで指定したrbenv内のrubyのパスを指定してやるとgemのインストール漏れはないはずなので安心である。 
ただし、まだjenkinsで使用するrbenvを未インストールの場合だと、Rake Versionにパスを追加できないので、あらかじめrbenvインストール用にjobを走らせる必要がある。