Jenkinsでexpressoを使う

TDD、宇宙の半分ぐらいヤバいと周りに触れ回ってはいるものの、発信源の自分は

テスト駆動開発入門

テスト駆動開発入門

これを眺めているだけで、こりゃあいかん、実際にやらねばあかんだろうと、今、node.js+expressで作っているやつにexpressoというTDDフレームワークを導入しました。
こいつ、./test以下にテストを書いたファイルを置いて、app.jsがあるところでexpressoとコマンドをうてばテストを実行してくれるんですが、噂で聞く便利なCIツール、Jenkinsでexpressoが使えないかなとか思っていたのです。

ぐだぐだ書きましたが、要は
Jenkinsでexpressoを定期/トリガ実行する
です。

以下の設定をやればJenkinsは次のことをやってくれます。

  1. gitでプロジェクトのリポジトリを取得
  2. 取得したリポジトリの中でexpressoを実行

と、これだけです。そんでもって成功したか否かはおなじみ信号機マークでJenkinsのトップページに載ります。
今は手動実行するか、もしくはJenkinsが定期的にリポジトリを取得して変更が有ればexpressoを実行してくれますが、決まったフォーマットのURLにcURLwgetなんかでアクセスすると、実行してくれるみたいです。これをgitの.git/hooks/post-commitに書いておけば、コミット時にテスト実行なんてことをやってくれますね。
参考: http://unicus.jp/skmk/archives/41

ではでは、手順。Jenkins(日本語化済み/gitプラグインインストール済み)が既にインストールされた状態で行います。
また、環境はMacでnode.jsをbrewで入れて使っているのでnvmなどを使っている方は、後述のPATHの設定を変更してください。

  1. http://localhost:8080/ (ポート等は環境に合わせて)に行って新規ジョブ作成
  2. 「フリースタイル・プロジェクトのビルド」でOK
  3. ソースコード管理システムにgitを選択
  4. 「URL of Repository」にgit initしたローカルリポジトリディレクトリへのパスを入力。file://とかはいらない
  5. ビルドトリガは「SCMを定期的にポーリング」で。ここは好みに合わせて。前述のコミット後にgitからhookするなら選択しなくて良い。
  6. ビルド手順の追加では「シェルスクリプトの実行」を選択。内容は以下な感じ。
PATH=$PATH:/usr/local/bin:/usr/local/share/npm/bin:/usr/local/sbin
NODE_PATH=/usr/local/lib/node_modules ##意味ないかも
expresso -b

expressoの-bオプションはエスケープキャラクタ無しでの表示です。

こんな感じで保存すれば動くと思います。とりあえずこれでテストの自動実行とログは取れるようになりました。
ただ、Jenkinsでのテスト結果の解析や、expressoのカバレッジの結果を使うことが出来ないので、そのあたりはプラグイン書いたり組み合わせたりしないといけないのかなあって思いました。そこまではやらないけれど。

以上、こんな感じです。