ルビコンペレストロイカ〜rubyonrailsにおけるci改革〜

Post on 26-Jun-2015

986 Views

Category:

Technology

3 Downloads

Preview:

Click to see full reader

DESCRIPTION

LLDecade 講演資料です。

TRANSCRIPT

〜RubyOnRailsにおけるCI改善〜

RubyOnRails CI Perestroika

高倉利明 / @TrinityT

はじめに_自己紹介

● 高倉利明 / id:TrinityT● 株式会社アピリッツ(旧社名KBMJ)で

RubyOnRailsでWebアプリ、

ブラウザゲーム開発してます。

● 社内CIサーバ管理者

→今日はノウハウを紹介

はじめに_今日の内容

1. 社内CI環境の概要と工夫点

2. RubyOnRailsでのCI設定例紹介

3. ビルド結果通知の工夫点

4. まとめ

社内CI環境の概要と工夫点

構成図

ソース管理サーバCIサーバ

開発者

テスト結果

構成

CIツール Jenkins

ソース管理 Git、Subversion

ビルド、テスト Rspec、RUnit、Maven2..etc

CI環境においての工夫3点

● ライブラリバージョン管理

● 新規プロジェクト追加の高速化

● テスト実行DB I/O高速化

工夫1_ライブラリバージョン管理

Ruby関連ライブラリは進化が激しいので、

社内に異なるバージョンの案件が多数存在

● Jenkinsサーバ上にRVM(RubyVersionManager)

で主要バージョンのRubyを設定してある● ライブラリはBundler or gemset(依存管理ツー

ル)で管理

→どんな構成(Ruby20XX)でもすぐにCI対応可能

工夫2_新規プロジェクト追加の高速化

● 社内Gitリポジトリアクセス用のJenkins専用公開鍵を配置

● テスト環境用のDBユーザ/パスワードは共通● Jenkins設定項目を標準化したひな形を作って

おきコピー

→10分程度で新規プロジェクトのCI追加可能!

工夫3_テスト実行DB I/O高速化

しょぼいサーバのためテスト遅い。。。→MySQLのデータディレクトリをオンメモリ(tmpfs)に配置

→0円でテスト処理時間向上!

※弊社環境ではテスト実行時間20%減ぐらい   CPU強化やSSD化などのほうが効率良さげ

RubyOnRailsでの

CI設定例紹介

テストカバレッジ取得

RcovやSimpleCovでカバレッジを取得。

テスト追加の指針としている。

テスト結果詳細取得

詳細テスト結果が表示されるように、CI::Reporter(JUnit互換出力ツール)で詳細表示

テーブル&カラムコメント追加

ActiveRecordコネクタを拡張して、

Migrationでコメントを追加している。

#テーブル作成時

create_table :hoges, :comment => "テーブルコメント" do |t| t.string :code, :comment => "fugafuga"end

#カラム追加時

add_column :hoges, :value, :integer, :comment => "カラムコメント"

テーブル定義書自動生成

常に最新のテーブル定義書をテーブル&カラムコメントをもとに自動生成

ビルド結果通知設定

なぜメール通知だけじゃ駄目?

● メールだと無視される可能性が高い→迷惑メール扱いする人も・・・

● CIを知らない人は堅苦しく感じるらしい→遊び心が重要

IRCでの通知

社内IRCサーバのチャンネルに通知

通知ランプ

※三○兎で1000円ぐらい

JenkinsPersonaPlugin

ドラクエ

JenkinsPersonaPlugin

コマンドー

JenkinsPersonaPlugin

ガンダムUC

まとめ

まとめ

● 予め環境を最適化しておくことで新規案件にすぐにCIを適用可能

● 自動的に様々な情報を取ることでクオリティを上げる指針に

● ビルド失敗の早期対処は最重要。通知の工夫して遊び心を!!

CIツール導入して一番良かったこと

テストコード書かないメンバーが激減!

ご清聴ありがとう

ございました!

高倉利明 / @TrinityT

サイト:http://d.hatena.ne.jp/TrinityT/

top related