tsucchi’s diary(元はてなダイアリー)

はてなダイアリー(d.hatena.ne.jp/tsucchi1022)から移行したものです

家でも Hudson はじめました

Hudson をはじめてみました の続きみたいな話。(なのかな???)

dannさんが最近、Hudson 導入した記事を書いています。

これを読んでたら、自分の Perl モジュールも Hudson で CI したくなってきました。設定したやり方は、基本的には上記の記事の内容なのだけど、ちょっと+αを。

Devel::NYTProf

dann さんの記事には

Devel::NYTprofについても同様にHudsonで実行しておくと、継続的にパフォーマンス状況を確認できるのでとても便利です。

とありましたが、これ、設定しようとすると結構ハマりました。多分こんな感じでいけるはず。

まず、「ビルド手順の追加」で「シェルスクリプト」を追加し、こんな感じで書きます。

rm -rf nytprof/ nytprof.out* nytprof-merged.out
env PERL5OPT=-d:NYTProf prove -l
nytprofmerge nytprof.out*
nytprofhtml --file nytprof-merged.out

で、これを HTML Publisher で受けます。
ディレクトリは、「nytprof」、インデックスは「index.html」、タイトルは適当(「Profile Report」あたり)。

PERL5OPT とか、nytprofmerge とか、nytprofhtml に --file オプションが必要とか、調べても分からなかったり、思ってたプロファイルが出なかったりで、はまりまくりでした。今のコレもちょっとおかしい気がするのですが、「それっぽい」プロファイルが出るようになったので、とりあえず満足しました。。。

nytprofmerge と nytprofhtml は、かなり出力がうるさいので、/dev/null に流して黙らせたほうがいいかもしれません。

メトリクス

コードの複雑度とかのメトリクスをレポーティングするといいかな、と思いついたので、やってみました。
まず、Perl::Metrics::Simple をインストールしておきます。

で、「ビルド手順の追加」で「シェルスクリプト」を追加し、こんな感じで書きます。

countperl lib > metrics.txt

で、これも HTML Publisher で受けます。
ディレクトリは「.」、ファイル名は「metrics.txt」、タイトルは「Metrics Report」。

テキストファイルも HTML Publisher で受けれるみたいですね。他にもっといい方法があるのかもしれませんが。

カバレッジ

Devel::Cover でやるのですが、make test すると、xt(Author tests) もカバレッジの集計対象になってしまうみたいで、なんか訳分からない事態になったので、ちょっと dann さんのやつとは変えてみました。

perl Makefile.PL
cover -delete
HARNESS_PERL_SWITCHES=-MDevel::Cover=+ignore,inc prove -l t
cover

これも HTML Publisher で受けます。ディレクトリは「cover_db」、ファイル名は「coverage.html」、タイトルは「Coverage Report」。

まとめ

Perl でも Hudson を使って CI することは十分に可能です。Perl 向けの Hudson プラグインはほとんど(全然?)ありませんが、簡単なシェルスクリプトと、 Perl モジュールと、基本的な Hudson プラグインを組み合わせることで、他の言語と比べても決して見劣りしない運用が可能になるのではないか、と思います。