HudsonでPerlプロジェクトの継続テスト(株)はてな 栗林健太郎Kansai.pm #13 (2010/11/20)
View Slide
自己紹介●栗林健太郎●id:antipop●@kentaro●Perler / Emacser
自己紹介●(株)はてな勤務●アプリケーションエンジニア○はてなダイアリー○新サービス○etc.● 文化系プログラマ担当
自己紹介●ポリコムをPerlから動かしたり○ 「PolycomをPerlから操作する」●Acme::MorningMusumeの久々の更新に向けてアップを開始したり○「モーニング娘。9期メンバーオーディション」
自己紹介●天龍寺にいます
アジェンダ●継続テスト環境の必要性●Hudsonを使おう○Hudsonの導入○テスト実行方法○Tips●まとめ
テストできてる?●一点の曇りもなく素晴しいテストを書くぞ!!1●開発が進むにつれて:○仕様追加などで、テストが通らない、あるいはそもそもテストがない機能が増えてくる○破滅……
なぜそうなるか?●そりゃ、テストを書く、テストを通してからコミットするってのは前提だけど……●個人のやる気だけでやると破綻●自動的に、誰からでも見えるようにテストが実行される必要性
テストの自動化●個人は普段のサイクルで開発○開発→テスト→コミット●あとは自動的にテストが勝手に行われる●さらに、ツールが表示する結果がビジュアルで美しいと、それを乱したくないという気持ちが働く
テストツールの要件●Perlプロジェクトのテストに使える●導入が簡単●テスト実行のタイミングを柔軟に設定できる●結果の通知方法を柔軟に設定できる●テスト結果の表示がビジュアルできれい
Hudson
Hudson●Java製のCI(Continuous Integration)環境●インストール、設定が簡単●柔軟な設定が可能●豊富な拡張機能
Hudson●実行タイミングいろいろ○cronぽいスケジューラ○SCMをポーリング○コミットフックで通知
Perlから使うには?●シェルコマンドを実行できる○proveすればいい●JUnit形式で結果を吐いておけば、テスト結果を集積できる●具体的な設定は後述
Perl + Hudsonを試してみる●SCMはgit●普通のPerlプロジェクト○proveでテスト実行
Hudsonインストール・起動●$ wget http://hudson-ci.org/latest/hudson.war●$ java -jar hudson.war●http://localhost:8080/にアクセス
Gitプラグイン導入●「Hudsonの管理」 → 「プラグインの管理」にアクセス●「利用可能」タブの中のGitプラグインにチェックを入れて、インストール
プロジェクトの追加
プロジェクトの概要
Gitリポジトリの設定
テストのスケジューリング
テスト実行のしかた
テスト結果の集計
テストの実行●とりあえず実行するには「ビルド実行」をクリック● 定期実行するには、前述の「設定」→「ビルド・トリガ」●API経由でビルドをキックすることもできます
コミットフック●Gitリポジトリへのpushをトリガにテストを実行○SCMのポーリングよりリアルタイム●特定のURLにリクエストを送るだけ○ http://${hudson}/job/${project}/build
REST API●新規プロジェクトの作成、既存ジョブからのコピー●登録されているジョブの情報を取得●プロジェクトに関するビルド一覧●それぞれのビルド詳細●ビルドの実行●Hudsonサーバのリスタート
hudson-cli●Hudsonサーバ/プロジェクト/ジョブに関する様々な操作●Groovyスクリプト/GroovyシェルでHudsonサーバの内部状態を操作
テスト結果を受け取る●メール●IRC
テスト結果を受け取る●Hudson Tracker○http://hudsontracker.sourceforge.net/
安全なテスト実行ために●Test::mysqld○テスト実行時にDB/table作成○テストデータのロード●DBIx::RewriteDSN○確実に、テスト用DBにアクセスするように
Hudsonを実運用する●各OS用のパッケージが用意されています。●CenoOSでのやり方についてはブログに書いた○http://d.hatena.ne.jp/antipop/20101119/1290180195
まとめ●Hudsonで継続テスト環境を作ろう○誰からでもわかる可視化重要○導入はとても簡単●テスト結果を確実に受け取れるようにしよう●安全なテスト実行ができるようにしよう
ご静聴ありがとうございました。質問がありましたらお気軽に!!1