79
Hudson ににに OSS にに cactusman

HudsonによるOss開発

Embed Size (px)

Citation preview

Page 1: HudsonによるOss開発

Hudson による OSS 開発

cactusman

Page 2: HudsonによるOss開発

アジェンダ• 自己紹介• CI とは• Hudson とは• 実例

Page 3: HudsonによるOss開発

自己紹介• HN : cactusman (さぼてん)• 年齢: 0x1c• 出身:関西• 所属: java-ja,Wicket-ja• 肩書き: Hudson コミッタ

Page 4: HudsonによるOss開発

今日はスーツコスプレですが、よろしくお願いします

Page 5: HudsonによるOss開発

今日の対象• OSS です– ドワンゴで働く id:t_yano がドワンゴ社内で

使ってます• 具体的なテストなどの話は範囲外です– これは id:t-wada でしょ JK

Page 6: HudsonによるOss開発

アジェンダ• 自己紹介• CI とは• Hudson とは• 実例

Page 7: HudsonによるOss開発

CI とは?

Page 8: HudsonによるOss開発

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

の略

Page 9: HudsonによるOss開発

XP のベストプラクティスのひとつ

Page 10: HudsonによるOss開発

システムのインテグレーション作業 を開発の初期段階から頻繁に行う

Page 11: HudsonによるOss開発

新しい概念ではない–Martin Fowler の「 Continuous

Integration 」( 2000/09/10 、最終2006/05/01 )– JavaWorld にて特集 ( 2006/06 、角谷信

太郎)

Page 12: HudsonによるOss開発

一言で言うと、頻繁にビルドし

Page 13: HudsonによるOss開発

具体的には

コンパイル

UnitTest

パッケージ

結合テスト

デプロイ

システムテスト

チェックアウト

インスペクション

Page 14: HudsonによるOss開発

CI を行うメリット

• 成果物の品質の保証–ビルドやテストが通らない、といった

開発時の不具合が先送りしにくくなり、早期発見しやすくなる–デグレートが起きにくくなる

• 手戻りコストの削減

Page 15: HudsonによるOss開発

Q. メリットがあるのに、なぜ広まらないのか?

Page 16: HudsonによるOss開発

A. 大変だから

Page 17: HudsonによるOss開発

自動でできることは自動で–コンピュータは昔に比べるとものすご

く安価になっている–一方、人の時間は貴重で高い→ 機械にできる作業は全て機械に

→ ツールをうまく使う

Page 18: HudsonによるOss開発

CI が有効なケース• 多人数• 分散開発• 複数の実行環境( OS 、ミドルウェア等)→ 巨大プロジェクト、 OSS に向いている

Page 19: HudsonによるOss開発

OSS での CI のメリット (1)

ソースコードの状況が把握しやすい– ビルドが通る、通らない– テストが通る、通らない

→ ユーザがビルドするときにはまりにくくなる!

Page 20: HudsonによるOss開発

• OSS でユーザがビルドできないというのは、チャンスロスしている• OSS ではどんなに優れたも

のでも改造できなければ価値が半減

Page 21: HudsonによるOss開発

OSS での CI のメリット (2)

個人では用意しにくい複数の実行環境– OS ( Windows 、 RHEL 、 Mac OS 、 Solari

s 、・・・)– Java   VM ( Sun 、 IBM 、 JRockit 、・・・)– RDBMS ( Oracle 、 DB2 、 SQLServer 、 Postgre

SQL 、 MySQL 、・・・)

Page 22: HudsonによるOss開発

アジェンダ• 自己紹介• はじめに• CI とは• Hudson とは• 実例

Page 23: HudsonによるOss開発

ところで、

Page 24: HudsonによるOss開発

皆さん、Hudson と

聞くと

Page 25: HudsonによるOss開発

こんなのとか

Page 26: HudsonによるOss開発

こんなのとか

Page 27: HudsonによるOss開発

こんなのを想像しますが

Page 28: HudsonによるOss開発

やっぱりHudson と

いえば

Page 29: HudsonによるOss開発

名人でしょ JK

Page 30: HudsonによるOss開発

お約束ですいません

m(_ _)m

Page 31: HudsonによるOss開発

Hudson とは?

Page 32: HudsonによるOss開発

OSS の CI ツール

Page 33: HudsonによるOss開発

TOP 画面

Page 34: HudsonによるOss開発

Job 画面

Page 35: HudsonによるOss開発

レポートグラフ

Page 36: HudsonによるOss開発

Sun Microsystems の川口耕介さんが

開発してます

Page 37: HudsonによるOss開発

コンセプト• 簡単、手軽、親切– JavaWebStart で起動– 「 java -jar hudson.war 」起動– 好きなサーブレットコンテナにデプロイ可能– 設定は Web の画面– DB が不要

• プラグインで機能拡張

Page 38: HudsonによるOss開発

開発に使われてるプロジェクト

• NetBeans• Gl assfish• JBoss• Apache

• JavaFX• JRuby• Seasar• Jiemamy

Page 39: HudsonによるOss開発

Hudson ( CI サーバ)の役割• チェックアウト• ビルドスケジュール管理• 通知• レポーティング• ログの保存

Page 40: HudsonによるOss開発

一例

Page 41: HudsonによるOss開発

Hudson

SCM

ローカル

コミット

Page 42: HudsonによるOss開発

Hudson

SCM

ローカル

チェックアウト

Page 43: HudsonによるOss開発

Hudson

SCM

ローカル

ビルド

Page 44: HudsonによるOss開発

Hudson

SCM

ローカル

メール送信

Page 45: HudsonによるOss開発

Hudson

SCM

ローカル

レポートの確認

Page 46: HudsonによるOss開発

概要図

Page 47: HudsonによるOss開発

Hudson の機能• SCM 対応• 通知機能• 綺麗なレポーティング• cron ライクなスケジューリング• Job のチェーン• master/slave 方式のクラスタリング• ファイル指紋

Page 48: HudsonによるOss開発

Hudson の対応• SCM– CVS– Subversion– VSS ( Plugin )– Mercurial ( Plugin )– git(Plugin)– Perforce (Plugin)

Page 49: HudsonによるOss開発

Hudson の対応• ビルドツール– Ant– Maven(1,2)– sh– bat– Rake(Plugin)– Gant(Plugin)– MSBuild (Plugin)

Page 50: HudsonによるOss開発

Hudson の対応• 通知手段– E-mail– RSS– IRC(Plugin)– Jabber(Plugin)– Twitter(Plugin)– XFD(Plugin)

Page 51: HudsonによるOss開発

XFDエクストリーム・フィードバック・デバイス

Page 52: HudsonによるOss開発

Hudson の対応• ビルドリポート– JUnitTestReport– FindBugs(Plugin)– Covertura(Plugin)– CheckStyle(Plugin)– PMD(Plugin)– TaskSccaner(Plugin)

Page 53: HudsonによるOss開発

Hudson の対応• BTS との連携– JIRA(Plugin)– Trac(Plugin)– Mantis(Plugin)– Bugzilla (Plugin)

Page 54: HudsonによるOss開発

とりあえず試したい場合• SCM がある場合

java –jar hudosn.war• TracLightning ( Windows のみ)– Subversion– Trac– Hudson→ インストールが簡単で、試すハードルが低い* JDK のインストールは別途必要

Page 55: HudsonによるOss開発

アジェンダ• 自己紹介• CI とは• Hudson について• 実例

Page 56: HudsonによるOss開発

実例• Jiemamy (メイン)• Seasar• CodeRepos

Page 57: HudsonによるOss開発

Jiemamy プロジェクト• 通称:地豆• DB 設計・リファクタリングサポートツール• Sourceforge• URL : http://www.jiemamy.org/• 提供インターフェース– Eclipse Plugin– Maven Plugin

• メンバー: 20 人弱– コミュニケーションは主に Skype– 共有情報は Wiki

Page 58: HudsonによるOss開発

コミッタ、コントリビュー

タ募集中!

Page 59: HudsonによるOss開発

Jiemamy の開発環境• サブプロジェクトが 3 つ• SCM : Subversion• ビルド: Maven 2• IDE : Eclipse• BTS : JIRA• ソースコードビューア: Fisheye + Clerusible• その他– Tugboat.GTD– Jiemamy-Polls

Page 60: HudsonによるOss開発

Jiemamy での Hudson(1)

• CPU : AMD Athlon(tm) 64 Processor 3500+• OS:CentOS 5.2• Java : jdk 6u11• AP : Tomcat 6• Maven 2.0.9

Page 61: HudsonによるOss開発

Jiemamy での Hudson(2)

• Hudson 1.280– Emotional plugin– Task Scanner Plugin– Checkstyle Plugin– FindBugs Plugin– disk-usage plugin– PMD Plugin– JIRA plugin

Page 62: HudsonによるOss開発

Jiemamy での Hudson(3)

• Hudosn のアップデート→ 手作業

• バックアップ→ 特にしていない

• ユーザ管理– Hudson のユーザーデータベース

→ 手作業で、連携なし

Page 63: HudsonによるOss開発

Jiemamy での Hudson(4)

• Hudson で 2 時間おきに SCM をポーリング• Job– 起点となるものからチェーン– Job ごとに別ワークスペース– インスペクション系は別 Job で• Maven2 の site ゴールで実行

Page 64: HudsonによるOss開発

Jiemamy での Hudson(5)

• 通知はメーリングリストにポスト• プラグインで JIRA 、 Fisheye と連携• TaskScanner Plugin でソースコードのタスク

をチェック– TODO 、 FIXME など

Page 65: HudsonによるOss開発

Job のチェーン

specs artemis vesta

specs-site artemis-site vesta-site

Page 66: HudsonによるOss開発

メリット・デメリット• メリット– テストが充実– ソースコードの状態を把握– JIRA や Fisheye などの他のツールとの連携

• デメリット–敢えて言えば、マシンリソースが必要

Page 67: HudsonによるOss開発

苦労した点• プロジェクト途中で Hudson を導入–そもそもビルドができない– JUnit が真赤

• Eclipse Plugin と Maven2 の相性–依存ライブラリの 2 重管理

• Maven2– Hudson で実行するとなぜか動かない

Page 68: HudsonによるOss開発

今後• 自動化できることをやっていく• 動作しないところを調査、改修• データ収集• バックアップ–そもそもする必要があるのか?

Page 69: HudsonによるOss開発

Seasar での Hudson(1)

• プロジェクトは 5 つ• SCM : Subversion• ビルドツール: Maven2• ユーザ認証に LDAP を使用• 複数 DB でのテスト–独自 Plugin 使用

Page 70: HudsonによるOss開発

Seasar での Hudson(2)

• 使用プラグイン– Disk Usage Plugin– JIRA Plugin– Task Scanner– Checkstyle Plugin– FindBugs Plugin– PMD Plugin– Warnings Plugin– Phing Plugin– Emotional Hudson Plugin– (Hudson Test Database Plug-in)

Page 71: HudsonによるOss開発

Hudson の Plugin の作り方• PluginImpl クラスで拡張ポイントを指定• 拡張ポイントを継承• ビューは Jelly• 詳しくは公式Wiki で

http://wiki.hudson-ci.org/display/HUDSON/Extend+Hudson

Page 72: HudsonによるOss開発

Seasar での Hudson(3)

導入後• DB テストは充実– S2JDBC など

• 品質が安定• テスト導入だったのが本番導入へ

Page 73: HudsonによるOss開発

CodeRepos での Hudosn(1)

注意• 私個人が勝手にやっています– CodeRepos の運営本体と関係がないです– 自分は CodeRepos のコミッターですが、他の

コミッターとも関係ないです。

Page 74: HudsonによるOss開発

CodeRepos での Hudosn(2)

• SCM : Subversion• 家のサーバ– VMware上• メモリ: 512M• HDD : 32G• OS : CentOS 5.2• AP : Tomcat 6.018• ビルドツール: Maven2 2.0.9 、 Ant 1.7.1

Page 75: HudsonによるOss開発

CodeRepos での Hudosn(3)

• Hudson 1.291–適宜手動でバージョンアップ– 通知方法は Twitter

• レポート系 Plugin• Trac Plugin• Twitter   Plugin

Page 76: HudsonによるOss開発

Hudson Twitter Plugin

Page 77: HudsonによるOss開発

CodeRepos での Hudosn(4)

• ビルドできない、ということがすぐにわかる– OS の違い– 設定ファイル

• もっと他の人も活用してほしいなぁ

Page 78: HudsonによるOss開発

まとめ• OSS で Hudson を使用するのは有効– 品質の向上– ソースコードの状態を把握• コミッター• 利用者

– 複数環境の利用– 自動化

Page 79: HudsonによるOss開発

ご静聴ありがとうございまし