JenkinsでNode.jsのテスト＆カバレッジレポートを管理する


[grunt+istanbul+mochaでNode.jsのテスト＆カバレッジ計測を行う](http://qiita.com/u-minor/items/35889e80fb5075d56903)
の続きになります。

ローカルでテストを実行するだけでなく、Jenkinsのジョブとして設定することで、テスト結果やカバレッジ計測結果を集計管理できるようになります。
プロジェクトの経過を追うことができるようになり、より便利になります。

## 関連パッケージのインストール

mochaからJenkins用のテスト結果レポートを出力するために、[mocha-jenkins-reporter](https://github.com/futurice/mocha-jenkins-reporter)を入れます。
また、このreporterは出力先ファイルの指定に環境変数`JUNIT_REPORT_PATH`を参照するので、gruntタスクで指定できるよう[grunt-env](https://github.com/jsoverson/grunt-env)も一緒に入れておきます。

```bash
npm install --save-dev grunt-env mocha-jenkins-reporter
```

## gruntタスクを設定する

[grunt+istanbul+mochaでNode.jsのテスト＆カバレッジ計測を行う](http://qiita.com/u-minor/items/35889e80fb5075d56903)
で設定したタスクを修正します。

istanbulのreport formatとして、Jenkins処理用に`cobertura`を追加、さらにmochaのreporterとして`mocha-jenkins-reporter`を指定します。
また、環境変数`JUNIT_REPORT_PATH`を設定するために、grunt-envの設定も記述しておきます。

> カバレッジレポートが`coverage`以下に生成されるため、テストレポートも`coverage`以下に設定していますが、別のディレクトリに設定しても問題ありません。
> `coverage`以外のディレクトリに設定した場合はディレクトリは自動生成されませんので、予めmkdirしておいてください。

```Gruntfile.coffee
    env:
      test:
        JUNIT_REPORT_PATH: 'coverage/test-results.xml'

    mocha_istanbul:
      test:
        src: 'build/test'
        options:
          mask: '**/*.spec.js'
          reporter: 'mocha-jenkins-reporter'
          reportFormats: [ 'cobertura', 'lcov' ]
```

また、testタスクには`env:test`後に`mocha_istanbul:test`が実行されるよう修正します。

```Gruntfile.coffee
  grunt.registerTask 'test', 'run test and generate coverage information', [
    'coffee_jshint:test'
    'coffee:test'
    'env:test'
    'mocha_istanbul:test'
  ]
```

## gruntでtestタスクを実行してみる

`grunt test`を実行して、以下の様な結果が表示されればOKです。

![grunt_test.png](https://qiita-image-store.s3.amazonaws.com/0/15611/4dfb8914-c894-9335-2af5-5db1eb95c7f5.png "grunt_test.png")

やや出力の見た目が変化しましたが、これまでのカバレッジレポートに加えて、`cobertura-coverage.xml`、`test-results.xml`の2つのファイルがcoverageディレクトリ以下に生成されていれば成功です。

## Jenkinsの設定

### Coberturaプラグインのインストール

Jenkinsでカバレッジレポートを集計するには、[Cobertura Plugin](https://wiki.jenkins-ci.org/display/JENKINS/Cobertura+Plugin)をインストールします。
Jenkinsの管理 -> プラグインの管理と進み、利用可能プラグインからCobertura Pluginをインストールします。

![jenkins_cobertura.png](https://qiita-image-store.s3.amazonaws.com/0/15611/75fbd2c1-94a9-9cf1-f7da-62f116aaeb6c.png "jenkins_cobertura.png")

### ジョブの設定

まずはビルド設定です。ビルド手順の追加で「シェルの実行」を選択し、シェルスクリプトの項で以下のように`grunt test`を走らせましょう。

```bash
npm install
grunt test
```

> 予めjenkinsユーザでnpmが実行できるよう環境を構築しておく必要があります。
> また、test以外のgruntタスク（build処理等）は状況に応じて任意に追加してください。

ビルド後の処理の追加で「Cobertura カバレッジ・レポートの集計」を選択し、レポートパターンに`cobertura-coverage.xml`のパスを入力します。

![jenkins_job_coverage.png](https://qiita-image-store.s3.amazonaws.com/0/15611/157e146b-5624-103c-183a-7e7e1e2ce342.png "jenkins_job_coverage.png")

再度ビルド後の処理の追加で今度は「JUnitテスト結果の集計」を選択し、テスト結果XMLに`test-results.xml`のパスを入力します。

![jenkins_job_test.png](https://qiita-image-store.s3.amazonaws.com/0/15611/b5ef54b7-aed9-f1ee-6cda-6ad9aea7cfcb.png "jenkins_job_test.png")

## Jenkins上でビルドを実行してみる

正しく設定が完了すれば、ビルドを実行した後プロジェクトのページをリロードすると、以下の様な表示になります。

> テスト結果の推移は、2つ以上の成功ビルドがないと表示されません。

![jenkins_project.png](https://qiita-image-store.s3.amazonaws.com/0/15611/d5c32c87-4498-e6a1-ba90-99f8fe82b89e.png "jenkins_project.png")

テスト結果、コードカバレッジの詳細は以下の様な表示になります。
非常に見やすい形で可視化されますので、テストを書く意欲が湧いてきます。たぶん。

![jenkins_test.png](https://qiita-image-store.s3.amazonaws.com/0/15611/62588bf7-b550-c2ea-e7d7-eedfaf02ccec.png "jenkins_test.png")

![jenkins_coverage.png](https://qiita-image-store.s3.amazonaws.com/0/15611/e6d33513-711f-c737-cb84-07fdc87f7482.png "jenkins_coverage.png")

JenkinsにGit Pluginをインストールし、ジョブの設定でgit pushに連動して自動実行されるようにしておけばいいでしょう。