Jenkinsで行う並列テスト(公開用)

2,684 views
2,510 views

Published on

0 Comments
6 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,684
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
7
Comments
0
Likes
6
Embeds 0
No embeds

No notes for slide

Jenkinsで行う並列テスト(公開用)

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

×