狠狠撸

狠狠撸Share a Scribd company logo
Jenkinsで行う
並列テスト
岡山Ruby会議02
2013.07.06
山本 和久
13年7月10日水曜日
自己紹介
? 山本 和久
? 岡山Ruby/Ruby on Rails勉強会
? @kazuhisa1976
? 株式会社リゾーム
13年7月10日水曜日
RubyGemsパッケージ
13年7月10日水曜日
need_label
? 必須項目にしるしを出力
13年7月10日水曜日
13年7月10日水曜日
13年7月10日水曜日
hashed-jasper-rails
? jasper-reportsをRailsから使う
13年7月10日水曜日
csv_combine
? 複数のCSVファイルをあたかも1つのフ
ァイルのように扱う
? 行のダブリを考慮
13年7月10日水曜日
ken_all
? 全国の郵便番号データをRailsで使う
? 半分ネタ
13年7月10日水曜日
pg_index_where
? PostgreSQLのユニークインデックスで
Whereを指定
? acts_as_paranoidと併せて使うと良いよ
13年7月10日水曜日
勤務先
13年7月10日水曜日
勤務先
? 株式会社リゾーム
? ショッピングセンターのコンサル
? デベロッパーマネジメントシステム
? 顧客分析システム
13年7月10日水曜日
BOND GATE
? SC?専門店向けの
コミュニケーションウェア
13年7月10日水曜日
私の役割
? テストフレームワーク
? 技術検証
? インフラ(AWS,Chef)
13年7月10日水曜日
テストの歴史
? BGプロジェクト開始2011年1月
? 2011年4月 私が入社
? 2011年7月
? RubyKaigi2011
? いしきがたかくなった!
? 帰りの新幹線でテストフレームワーク
を設定
13年7月10日水曜日
テスト
? 2011年10月時点
? rspec
? 109ファイル
? cucumber
? 9ファイル
13年7月10日水曜日
ここで問題が
http://www.?ickr.com/photos/morinkovo_fotky/4168850871
13年7月10日水曜日
Slow Tests
? RSpec + Cucumberの実行だけで30分位
かかる
13年7月10日水曜日
Parallel Tests
13年7月10日水曜日
Slow Tests
? この時は一応解決した
13年7月10日水曜日
Slow Tests再び
? 2012年3月
? Parallel Testでも遅くなってきた
13年7月10日水曜日
Jenkinsの導入
? 岡山Javaユーザー会の@zephiransasさん
の影響でJenkinsを導入
13年7月10日水曜日
Jenkinsとは?
? 継続的インテグレーション
? cronやタスクスケジューラと似てる
? 豊富なプラグイン
? Javaを知らなくても使える
? 豊富な通知(mail, growl)
13年7月10日水曜日
インストール方法
? Mac
? brew install jenkins
? Other
? Glass?sh + jenkins.war
13年7月10日水曜日
Jenkins 黎明期
? 1台のマシン上で動かすJenkinsでParallel
Testを実行
? 自分のマシンがふさがらないので、そ
れなりに便利だった
13年7月10日水曜日
Parallel Testsでも遅い
http://www.?ickr.com/photos/66643556@N06/6065807649
13年7月10日水曜日
複数マシンでの並列実行
? ビルドパイプラインの構築
? テストの分割
? 全てのテストが成功した時のみ
リリース用ブランチにpush
13年7月10日水曜日
ビルドパイプラインの構築
準備
spec 1 spec 2 spec 3 spec n
...
後処理
13年7月10日水曜日
? Parameterized Trigger Pluginと組み合わせる
? (デモ)
? GitのコミットIDの引き継ぎ
? Parameterized TriggerでPass-through Git
Commit that was builtを指定
ビルドパイプラインの構築
13年7月10日水曜日
テストの分割
? 行数で平均して分散化
20
10
40
50
30
60
80
15
36
22
11
8
13年7月10日水曜日
テストの分割
? 行数で平均して分散化
20 10 40
5030 60
80 15
36
22
11
8
130
130
122
13年7月10日水曜日
テストの分割
? Jenkins用のrake taskを作成
? rake jenkins:rspec
? rake jenkins:cucumber
export SPLIT=16
export OF=4
bundle exec rake jenkins:rspec
13年7月10日水曜日
リリース用ブランチにpush
? Join Trigger
? Parameterized Triggerで指定したJobが全て
成功した時に走らせたいJobを指定
? テストが通ったものしかリリースできない
13年7月10日水曜日
13年7月10日水曜日
さらなる高速化http://www.?ickr.com/photos/wheat?elds/3938695154/
13年7月10日水曜日
コード量
? Controller
? 125
? Model
? 304
? View
? 1104
13年7月10日水曜日
毎日増えるテスト
13年7月10日水曜日
LinuxよりMac
? Capybara-webkitが高速
? Mac miniは省スペース
13年7月10日水曜日
Git Pullを高速化
Github
git pull ...
各テストはローカルからpullする
git pull git pull git pull
git pull
The Internet
Local Net
13年7月10日水曜日
より便利にhttp://www.?ickr.com/photos/75905404@N00/7126147125/
13年7月10日水曜日
任意のブランチでテスト
? ビルドのパラメータ化を利用
13年7月10日水曜日
任意のブランチでテスト
? rbenv or rvm pluginと組み合わせれば任意の
rubyバージョンでテストすることも可能
13年7月10日水曜日
任意のブランチでテスト
? rbenv or rvm pluginと組み合わせれば任意の
rubyバージョンでテストすることも可能
おーい。おじさん使うよ!
13年7月10日水曜日
テスト後にマージ
develop feature-foo
Github Jenkins local dev
feature-foofeature-foo
feature-foodevelop
13年7月10日水曜日
bundle update
? gemを取得する場所を指定
? bundle install --path vendor/bundle
? bundle update時のバッティングを防止
13年7月10日水曜日
今後やりたいこと
? pull 方式のテスト
spec 1
spec 2
spec 3
spec 4
spec 5
spec 6
spec 7
...
spec n
13年7月10日水曜日
今後やりたいこと
? pull 方式のテスト
spec 2
spec 3
spec 4
spec 5
spec 6
spec 7
...
spec n
13年7月10日水曜日
今後やりたいこと
? pull 方式のテスト
spec 2
spec 3
spec 4
spec 5
spec 6
spec 7
...
spec n
13年7月10日水曜日
今後やりたいこと
? pull 方式のテスト
spec 2
spec 3
spec 5
spec 6
spec 7
...
spec n
13年7月10日水曜日
今後やりたいこと
? pull 方式のテスト
spec 2
spec 3
spec 5
spec 6
spec 7
...
spec n
13年7月10日水曜日
今後やりたいこと
? RubyGemsのミラーで高速化
? 時々コケるテストのレスキュー
? テストが混線した時結果が分かりにく
い
13年7月10日水曜日
おしまい
13年7月10日水曜日

More Related Content

闯别苍办颈苍蝉て?行う并列テスト(公开用)