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

26
〜RubyOnRailsにおけるCI改善〜 RubyOnRails CI Perestroika 高倉利明 / @TrinityT

Upload: trinityt-

Post on 26-Jun-2015

986 views

Category:

Technology


3 download

DESCRIPTION

LLDecade 講演資料です。

TRANSCRIPT

Page 1: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

〜RubyOnRailsにおけるCI改善〜

RubyOnRails CI Perestroika

高倉利明 / @TrinityT

Page 2: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

はじめに_自己紹介

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

RubyOnRailsでWebアプリ、

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

● 社内CIサーバ管理者

→今日はノウハウを紹介

Page 3: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

はじめに_今日の内容

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

2. RubyOnRailsでのCI設定例紹介

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

4. まとめ

Page 4: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

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

Page 5: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

構成図

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

開発者

テスト結果

Page 6: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

構成

CIツール Jenkins

ソース管理 Git、Subversion

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

Page 7: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

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

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

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

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

Page 8: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

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

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

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

● Jenkinsサーバ上にRVM(RubyVersionManager)

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

ル)で管理

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

Page 9: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

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

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

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

おきコピー

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

Page 10: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

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

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

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

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

Page 11: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

RubyOnRailsでの

CI設定例紹介

Page 12: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

テストカバレッジ取得

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

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

Page 13: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

テスト結果詳細取得

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

Page 14: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

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

ActiveRecordコネクタを拡張して、

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

#テーブル作成時

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

#カラム追加時

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

Page 15: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

テーブル定義書自動生成

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

Page 16: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

ビルド結果通知設定

Page 17: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

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

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

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

Page 18: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

IRCでの通知

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

Page 19: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

通知ランプ

※三○兎で1000円ぐらい

Page 20: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

JenkinsPersonaPlugin

ドラクエ

Page 21: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

JenkinsPersonaPlugin

コマンドー

Page 22: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

JenkinsPersonaPlugin

ガンダムUC

Page 23: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

まとめ

Page 24: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

まとめ

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

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

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

Page 25: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

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

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

Page 26: ルビコンペレストロイカ〜RubyOnRailsにおけるCI改革〜

ご清聴ありがとう

ございました!

高倉利明 / @TrinityT

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