ruby on rails on hudsonの活用事例

44
Ruby on Rails on Hudson の活用事例 Toshio Maki (@Kirika_K2 / id:Kirika)

Upload: maki-toshio

Post on 14-Jul-2015

4.437 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Ruby on rails on hudsonの活用事例

Ruby on Rails on Hudsonの活用事例

Toshio Maki

(@Kirika_K2 / id:Kirika)

Page 2: Ruby on rails on hudsonの活用事例

自己紹介• 名前

–牧 俊男( Toshio Maki)– Twitter @Kirika_K2 / はてな  id:Kirika

• 所属–ちょっと大きな SI企業の研究開発っぽいところ

• 社内 Ruby開発環境の整備担当• Ruby産業を国内に普及させるための取り組み

• 最近の活動– RubyWorld Conference 2010発表

Page 3: Ruby on rails on hudsonの活用事例

Hudsonとの出会い• 小規模の勉強会の中でリファクタリングをテーマにしたときに使用

• @ikikkoが Hudsonを使ったビルド環境を構築• それ以来自分の仕事にも Hudsonを取り込む

Page 4: Ruby on rails on hudsonの活用事例

ここに立つことになった経緯• RubyWorld Conference 2010で Hudsonを活用したネタを発表

Page 5: Ruby on rails on hudsonの活用事例

ここに立つことになった経緯• 発表した内容を簡単に勉強会で紹介

Page 6: Ruby on rails on hudsonの活用事例

ここに立つことになった経緯• 気がついたら ikikkoの RTに巻き込まれてた。

Page 7: Ruby on rails on hudsonの活用事例

ここに立つことになった経緯

• 軽いノリで発表を OK。

自主規制

Page 8: Ruby on rails on hudsonの活用事例

ここに立つことになった経緯• 気がつけば ATND 250人以上• RubyWorld Conferenceは 100人程度

Page 9: Ruby on rails on hudsonの活用事例

ここに立つことになった経緯• どうしてこうなった的な

Page 10: Ruby on rails on hudsonの活用事例

フィードバック希望です

• 何か思うことがあれば、懇親会の場でもTwitterでもいいのでフィードバックを頂ければと思います。

Page 11: Ruby on rails on hudsonの活用事例

アジェンダ

• Ruby on Rails on Hudsonのメリット• 活用事例

–全体概要– Hudsonの設定

• まとめ

Page 12: Ruby on rails on hudsonの活用事例

Ruby on Rails on Hudson

Page 13: Ruby on rails on hudsonの活用事例

RoRに Hudsonを適用することのメリット (1/4)

• デイリービルドによる日々の成果物チェック– Ruby / Railsは実行環境差で動いたり動かなかったり。

– 社内では用意したクリーンな環境で正しく動くことをテストする。

Page 14: Ruby on rails on hudsonの活用事例

RoRに Hudsonを適用することのメリット (2/4)

• テスト時間の省力化–毎日 rake testを実行してくれると、個別に

rake testしなくても良くなるので省力化できる。

Page 15: Ruby on rails on hudsonの活用事例

RoRに Hudsonを適用することのメリット (3/4)

• テストコードを書くモチベーションが上がる

Page 16: Ruby on rails on hudsonの活用事例

RoRに Hudsonを適用することのメリット (4/4)

• パッケージの自動生成と Capistranoの代用– Hudsonで Railsアプリを RPMに変換– RPMのインストールでデプロイ

Page 17: Ruby on rails on hudsonの活用事例

活用事例

Page 18: Ruby on rails on hudsonの活用事例

基本コンセプト

• 同じ環境が作れる• その上で動作確認がいつでもできる• なるべくデプロイにおける人手の介入を減らす

Page 19: Ruby on rails on hudsonの活用事例

全体図

⑤ ①⑤

① ⑤①Kickstartによる配信(初回のみ)②ソースコードのコミット③ソースコードの取得④成果物のアップロード⑤yum update(毎日実行)

① ⑤

Page 20: Ruby on rails on hudsonの活用事例

Hudsonの設定

Page 21: Ruby on rails on hudsonの活用事例

稼働状況

約 10のプロジェクトが 1台の Hudsonサーバで稼働。HDDが 60GBしかなく、既に限界

Page 22: Ruby on rails on hudsonの活用事例

メインで利用しているプラグイン

• Version Number Plug-in– 環境変数に日付やビルド番号を含めたバージョン番号を入れてくれる

• Rake Plugin– ビルドタスクに rakeタスクを使用することができる

• Ruby metrics Plugin– Rcov, Rails Statsなどを表示

• Subversion Plugin

• Hudson SCP publisher plugin– SCP経由で成果物を特定サーバにアップロード

Page 23: Ruby on rails on hudsonの活用事例

汎用的に利用している設定

Page 24: Ruby on rails on hudsonの活用事例

古いビルドの破棄• スタートアップのプロジェクトではグラフの遷移が気になるので 10程度を指定– 一番大きいプロジェクトはビルド履歴の保存は2– 1回のビルドに 3.4GB使用するため

Page 25: Ruby on rails on hudsonの活用事例

権限設定• プロジェクト単位の権限設定• PMっぽい人に configure権限を与えて運用

– まだ Hudsonの仕組みが社内に浸透していないので、設定を書き換えて使っている人はそんなに居ない

Page 26: Ruby on rails on hudsonの活用事例

ソースコード管理システム• Subversionを選択

– 社内インフラとして Subversionリポジトリが提供されているため、そのアドレスを記入

Page 27: Ruby on rails on hudsonの活用事例

ビルドトリガ

• 毎朝 5時に定期実行

• 全部のプロジェクトをまとめてビルドするので、人の居なさそうな時間を指定

Page 28: Ruby on rails on hudsonの活用事例

ビルド環境• Create a formatted version numberをチェック

– Version Number Pluginを入れることで利用可能• 環境変数 versionにビルド年月日とビルド番号を書き出す設定にする

Page 29: Ruby on rails on hudsonの活用事例

Version Number Plugin使用例

Page 30: Ruby on rails on hudsonの活用事例

ビルド

• ビルドタスクは以下の3ステップでビルド

1. db:migrateの実行2. rcovの実行3. テスト→ RPMパッケージの自動生成

Page 31: Ruby on rails on hudsonの活用事例

db:migrateの実行• Rake db:migrateを実行してデータベースの表設計を最新にする

• Rake Pluginの機能で Rakeを実行させる

Page 32: Ruby on rails on hudsonの活用事例

rcovの実行• rcovを実行して、カバレッジデータの収集をします

• Hudson標準のシェルの実行機能を使います

Page 33: Ruby on rails on hudsonの活用事例

RPMパッケージの生成• 独自の rakeタスクを実行( rails内  lib/taskに格納)• テスト後、成果物を RPMにパッケージング

– RPM内でやってくれること• 特定ディレクトリへのインストール• rake db:migrateの自動実行• Apacheの VirtualHostの自動設定

• Ruby・ Rails・ Passengerが構築済みの状態でインストールされるので、 RPMをインストールすると即実行可能状態になる

Page 34: Ruby on rails on hudsonの活用事例

ビルド後の処理

• 成果物を保存

Page 35: Ruby on rails on hudsonの活用事例

Publish Rcov Report

• Ruby metrics Pluginを使用• 生成したカバレッジデータの出力ディレクトリを指定

• カバレージ率が低い時に Hudsonにアラートをあげさせることもできる

Page 36: Ruby on rails on hudsonの活用事例

Publish Rcov Report

–テストを書くモチベーションを上げる–重点的にテストを書く箇所の判断材料

Page 37: Ruby on rails on hudsonの活用事例

Publish Rails Stats report

• 一応有効に。• あまり良い使い方が思い浮かばず。• うまく活用している人が居ましたら、教えてください。

Page 38: Ruby on rails on hudsonの活用事例

Publish Rails Stats report

Page 39: Ruby on rails on hudsonの活用事例

ビルド後の処理

• E-mail通知–管理者である自分と、 PMを加えておく

• 基本的には向こうで対応してもらうが、対応できなかったときは問い合わせがあるので、いつでも対応できるように。

Page 40: Ruby on rails on hudsonの活用事例

SCPによる成果物の転送

• SCPでアプリ配信サーバにデータを転送• アプリ配信サーバは1日1回、レポジトリの内容を更新する

Page 41: Ruby on rails on hudsonの活用事例

適用後の効果

Page 42: Ruby on rails on hudsonの活用事例

良かったところ

• 適用前はうさんくさいツールだと思われていたようだが、こちらから設定とかをお膳立てしてあげると、積極的に使ってくれるようになった。–1回のテストで動作確認から、インストール用パッケージ生成まで出来るのが良い

– Capistranoに比べて、 UIが優れていて、設定しやすい

Page 43: Ruby on rails on hudsonの活用事例

反省ポイント

• マシンのスペックが貧弱だと色々悩まされる–ビルド時間、 HDDの容量–特に HDDの容量は気を抜くとすぐなくなります

• 何かトラブルが発生したときは、まだSSHを使うことが多い

• RPM生成やパッケージの自動更新の仕組みはかなり作りこんでいるので、将来的に引き継ぐのが大変になる

Page 44: Ruby on rails on hudsonの活用事例

まとめ

• 開発インフラの中に Hudsonが1つ入ると、色々と捗るぞ。