Travis CI + Coverall + Node.js (Hubot) で継続的インテグレーションしてみる

Hubot スクリプトのために、CI 環境を整えてみた。説明用にコードを切り出したりしているので、全体の設定は今回使っている libinc/hubot-scripts を見てください。

継続的インテグレーション (Continuous Integration) ツール

テストコード

テスト実行には

  • chai
  • mocha
  • hubot-mock-adapter

を利用しています。Hubot スクリプトは CoffeeScript で書いているので、mocha の設定 test/mocha.opts は以下の様に定義してます。

--compilers coffee:coffee-script/register
--recursive

テストコードは綺麗に整理できていないので、詳細については割愛。

Travis CI

オープンソースで良く利用されている。公開リポジトリなら無料で使える。

GitHub との連携

Travis にGitHub アカウントでログインして、リポジトリを選ぶだけ。連携後はGitHub にPush すると自動でフックしてテストを実行してくれる。Node の場合、テストの実行は npm test が実行される。細かい設定はプロジェクトのROOT ディレクトリ直下においた .travis.yml に記述する。

language: node_js
node_js:
  - 0.10

Node のバージョンは複数指定できるので、一括でバージョン対応をチェックできる。

Coveralls

テストカバレッジ計測のデータを集計してくれる。

インストール

Coveralls へのレポート作成用に必要な物を追加する。

npm install coveralls --save-dev
npm install mocha-lcov-reporter --save-dev

blanket

テストカバレッジの測定をしてくれるライブラリ。CoffeeScript にも対応しています。

npm install blanket --save-dev

設定は package.json に記述する。

"config": {
  "blanket": {
    "pattern": [
      "hubot-scripts/scripts",
      "hubot-scripts/module"
    ],
    "loader": "./node-loaders/coffee-script",
    "data-cover-never": "node_modules"
  }
}

pattern には計測対象のテストファイルを指定する。ただし、絶対パス (プロジェクトではなくシステムのROOT からのパス) に対してマッチング判定される。

カバレッジ測定用のスクリプト

Makefile で定義しているサンプルは見かけたけど、設定を package.json 内にまとめたかったので、下記の様に scripts を追加した。

"scripts": {
  "test": "mocha",
  "coveralls": "mocha test --require blanket --reporter mocha-lcov-reporter | coveralls"
}

これで npm run-script coveralls を実行すると、テストカバレッジを計測して、結果をCoveralls へ送信してくれます。

Travis との連携

Travis CI 内でテスト実行時の環境変数を設定する。.travis.yml ではなく、サイト内の設定画面で追加する。

COVERALLS_SERVICE_NAME=travis-ci
COVERALLS_REPO_TOKEN=%Coverall で発行されたトークン%

環境変数を設定するとテスト実行前に export してくれます。cf. libinc/hubot-scripts Build #5

Coveralls へのレポートは package.json で npm run-script coveralls コマンドを定義したので、Travis CI から実行させる。

after_success:
  - npm run-script coveralls

冗長だけど手元では Coveralls 通知なしでテスト実行したいので、デフォルトの npm test はカバレッジ計測しない形にした。

David.

依存ライブラリのバージョンをチェックしてくれる。古いバージョンを参照していると警告してくれる。cf. Hubot の依存ライブラリ

特に設定はいらないので、サイトの説明通りリポジトリのパスを指定してバッチを付けておくだけ。

![Dependencies Status](https://david-dm.org/username/repo.png)

まとめ

こんな感じで、CI モニタリングできます。

Build Status Coverage Status Dependencies Status