Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mozillaのビルドインフラ

2,765 views

Published on

Mozilla 勉強会@東京 8th https://dev.mozilla.jp/event/workshop16/

Published in: Technology
  • Be the first to comment

Mozillaのビルドインフラ

  1. 1. Mozillaにおけるビルドインフラ Makoto Kato / Mozilla Japan
  2. 2. Infra service• Mozilla.org開始時から• Bug Tracking System (Bugzilla)• Version Control System (CVS) / Viewer (Bonsai)• Automation building (Tinderbox)
  3. 3. Agenda• ソースコード管理など• Automations! • Building • Testing• etc
  4. 4. VCS / REPOSITORY
  5. 5. Version Control System• http://git.mozilla.org/ or https://github.com/mozilla/ for GIT (mirror)• http://hg.mozilla.org/ for mercurial• cvs.mozilla.org / cvs-mirror.mozilla.org for CVS• svn.mozilla.org for subversion
  6. 6. VCS history• mozilla.org設立時はCVS、Firefox 3.5からMercurial• githubにも現在ミラーが存在 (Mozillaで同期してます)• B2Gはgithub。B2G上のGeckoはgithubにあるミラーを利 用• NSPRやNSSは引き続きCVS (GoogleとかRedHatとかが 使ってるし)• 通常git使って、land時だけmercurial使う人もいる
  7. 7. Repositories
  8. 8. mozilla-central• 従来から使われている。通称Trunk• Nightly channelで使われるもの。NightlyはPSTの AM12:00ごろからビルドスタート• テスト失敗はlandした張本人がケアする必要あり or ryanvmなど)がmozilla-inboundからマー• コビトさん(ed ジしてくれる (Firefox teamは彼らでマージ)
  9. 9. mozilla-inbound• 開発者みんなが主に使ってるレポジトリ• テストが失敗したかどうかをlandした張本人がケアする必要がない • ちょっとしたtypoだと、r=bustageで直すけど• ビルド or テストがこけたらコビトさん達が問答無用にバックアウト• コビトさん達がm-cにマージしてくれる(1日2回程度)
  10. 10. Why Inbound?• DeveloperのPainを解消する • 常にテストを成功したかどうかをチェックしないといけない • Bustageかどうかの確認 • PGO対策 (Compiler Bug?)• 成功しなければバックアウトされるだけなので、ツリーを監視 する必要なし• Staff? もういらなくなった
  11. 11. Project Repositories• fx-team … m-cへのマージ用にFirefox teamが利用• UX … Firefox teamのテスト実装用• Alder … 現在はWebRTC用• Elm … 現在はWindows Metro版用• Ionmonkey … New Baseline JIT用にJavaScript Teamが 使用• などなど
  12. 12. Build automations• 各プロジェクトごとにビルド設定を決められる• Nightlyを有効にするかどうか• ビルドターゲット• 場合によって、toolchainを変えたりもしてる
  13. 13. User Repository• Level 1権限以上を持つと、hg.mozilla.org/users/<自分 のメアド>に自分専用レポジトリを持つことが可能• sshでhg.mozilla.orgに入って管理• https://developer.mozilla.org/en- US/docs/Creating_Mercurial_User_Repositories
  14. 14. Access Permission• Level 1-3まである • Level 1 … try server • Level 2 … Project Repository • Level 3 … mozilla-central• Mozillaに入社してもLevel 3もらえない (Level 1だけ)• ゲットするにはVocheが必要
  15. 15. Mercurial hook• Land時にコメントが正しくない場合はlandを受け付けない仕組みを導入• Treeのステータスに応じてコメントフォーマットが決まってる• Aurora / beta などのレポジトリでは、コメントのフォーマット にa=xxxxがないとlandを受け付けない• Tree ClosedのときはCLOSE TREEを入れないと受け付け ない
  16. 16. Approval?• Aurora、Betaなどでは、Approvalがないとチェックインダメ• Blocking+のFlagがBugzillaについている場合はいらない
  17. 17. Checkin-needed• コミット権限のない人がバグを修正する場合どうするか?• review+をもらったら、Bugzilla上にcheckin-neededをつけるとコビトさん達がlandしてくれます
  18. 18. 3rd party source code in m-c• Firefoxでは他のOSSのライブラリをいろいろ利用• about:license• 基本的にはUpstreamへの修正+*.patchファイルをレポジトリにland
  19. 19. Source Code Indexing• mxr.mozilla.org • 某ライセンス品をカスタマイズしてる • mozilla-central / mozilla-aurora / mozilla-beta から Chromiumまでいろいろとインデックス対象• dxr.mozilla.org • Mozilla謹製のインデクサ
  20. 20. Aside: GAIA/B2G• GAIAはルールが異なる• Githubでハンドリング• http://github.com/mozilla-b2g/gaia/• Firefox OS v1まではちょっとルールが変更になる • blocking-basecampものはBugzillaでも管理
  21. 21. AUTOMATIONS
  22. 22. とある会社の例
  23. 23.
  24. 24. Automations• Automation buildingに使われるもの • VMWare ESX • Amazon AWS (for Linux builders) • Mac mini• Automation用のインスタンス数は約1500以上
  25. 25. Automations• Automation Testing (additional) • Windows 7 (nVIDIAのGPU搭載。HWAテスト) • nVIDIA Tegra 2 Development board • Pandaboard (B2G) • etc
  26. 26. Target platforms• Tier 1 (full support and stable release ) • Windows x86 (MSVC10) • OSX x86 / x86-64 (clang 3.1) • Linux (GTK+2) x86 / x86-64 (gcc 4.5) • Android armv6 / armv7 (NDK r5c) • B2G armv6 (for Telefonica device) / armv7 (Panda)
  27. 27. Target Platforms• Tier 2 (support automation building) • Windows x64 (Tier 3に格下げ)• Tier 3 (by not Mozilla?) • Linux (non-intel) / Linux Qt • *BSD (OpenBSDの中の人がメンテ) • OS/2 (ドイツ方面) • Solaris (Oracle Chinaの中の人がメンテ)
  28. 28. Test Target Platforms• Windows XP / Windows 7• OSX 10.6 / 10.7 / 10.8• Linux (Fedora 12)• Android 2.2• B2G (based on ICS)
  29. 29. Tinderbox
  30. 30. Tinderbox• 要はbuildbot• 1998年のMozilla.org設立時に作成されたもの• Landごとにビルド• Orange / Red時にはコメント必須• NPOBとかのコメントを入れれば自動ビルドされない
  31. 31. Tree Status
  32. 32. Tree Status• Open • 通常の状態。誰もがland可能• Closed • ネットワークトラブル等でland不可能の状態 • CLOSED TREEコメントを入れればland可能• Approval • 誰かの許可が必要。a=xxxのログが必要
  33. 33. Tbpl (TinderBox Push Log)• Tinderboxの後継版• http://tbpl.mozilla.org/• そもそもはテスト失敗を調べるためのツールが正式ツールへ
  34. 34. Self service build interface• 自動ビルドをコントロール• 自動ビルドが始まった場合に止めることが可能• 他人のも可• 強制clobberやPGO buildやNightly buildのキックも可能
  35. 35. Web Tools• 今までのものはREST APIとしても提供されている• tbplもSelf Service buildもREST API経由でAutomation Builderにアクセス
  36. 36. B2G? GAIA?
  37. 37. Machine Assignment• Automation BuildとAutomation Testは別のマシンが割り当てられる • BuildはVM、Testは実際のクライアント • できる限り並列化!
  38. 38. Random Orange• テストの中でもよく失敗するもの(Random Orangeと呼んでます)が結構ある• マウスとかエディットとかフォーカスとか• どれがwell-knownかどうかなんて知ってる人しかわからな い• Well-knownの場合はコメントを入れること! • 対応するBuzillaのバグにもコメントを入れる
  39. 39. Suggestion for failure
  40. 40. New Test failure• 自分のlandが原因ではないRandom Orangeが発生した場合は、Bugzillaへバグを登録• Keywordへintermittent-failureを入れること• Tbplで自動的に拾ってくれるようになります
  41. 41. Try server• Land前にテストが失敗しないかどうかとかをテストするためのもの• お試しlanding+Automation Testingが可能• 作成したビルドはpublicのFTPサーバーに置かれる • 数日で削除• あまりにも便利すぎて、クロ何とかというブラウザの開発にも同様のものが導入されてます
  42. 42. How to use try server 1のチェックイン権限(10から20個くらいのバグの修• 要Level 正すればもらえる)• ssh://hg.mozilla.org/tryへ以下のコメントを修正ともにland するだけ try: -b do –p all –u all –t none• Try Chooser • http://trychooser.pub.build.mozilla.org/
  43. 43. Reftest / CrashTest• 二つのHTMLを比較して”画像的に”正しいかどうかを判断するテスト• 新しいCSSで書いたもの VS 従来のCSSで書いたものとか• HTMLやXULのRendering Testで利用• 何とかKitというRendering Engineにも採用されてる
  44. 44. MochiTest• ブラウザ上で動くテストツール• 主にUIとかchromeなところのテスト• Chrome権限が必要な場合はSpecialPowersを利用 • https://developer.mozilla.org/en- US/docs/SpecialPowers• タイミング依存するテストが多数あるのでよく失敗する (= 自分の開発環境ですべてパスするのを見ることは稀)
  45. 45. MochiTest
  46. 46. http.js• RefTestやMochiTestで利用されるXPCOM baseのHTTPServer• 当然JavaScriptで書いてあるので、Firefoxで動かそうと思 えば動くはず• HTTPヘッダとかも書き換えられます• サーバーサイドJavaScript (*.sjs) まで
  47. 47. JSReftest• JavaScriptエンジン自体のテスト• Browser GUI上で動作する• テスト結果を”コンソール”に出力 (dumpで)
  48. 48. xpcshell-test• コマンドラインで動くXPCOMテスト• JavaScriptで書く• UIを利用しない際に使われる • 主にXPCOMの実装テスト
  49. 49. xpcshell-test
  50. 50. Unit tests• make check時に動作する単体テスト • クロスなビルド環境 (Android / B2G) の場合は実行されな い• xpcshell-testで書けないときに用いられる(主にC++)• Javascriptの単体テストにも利用 (make jit-tests)
  51. 51. Marionette• Re-Implement WebDriver for Firefox • Also, work on chrome permission!• B2GのWebAPI用• B2G Emulator (QEMU) 上でのテスト• Remote (Cross) Target向け
  52. 52. MozMill• https://developer.mozilla.org/en-US/docs/Mozmill• PythonでFirefoxやThunderbirdをコントロールしてテスト• Thunderbirdで標準利用
  53. 53. Automation Test• これだけのテストを実行して、パスしないとバックアウト対象になる• Tier 1はすべてパスしなければいけない!• 各テストをすべて動かすと約5時間かかるので、並列に実行して1時間強で終わるようにしてる
  54. 54. 手動テスト?• 自動ではないQA Teamによるテスト項目も存在する • リリース前のテストとか • Android版のUIテスト• MozTrap • 自動テストでカバーできないもののため • https://github.com/mozilla/moztrap
  55. 55. MozTrap
  56. 56. Talos• Performance Test Suite• TP5• Start up time (clean profile / dirty profile)• Dromaeo• Memory usages• etc
  57. 57. Talos• 結果は常にtbpl上から確認可能• Improve / regressionした場合は、news://news.mozilla.org/mozilla.dev.tree-management にポストされる• Performance regression が認められるとバックアウト対象
  58. 58. TalosImprovement! Dromaeo (DOM) increase 2.95% on MacOSX 10.8 Mozilla-Inbound------------------------------------------------------------------------ Previous: avg 387.749 stddev 4.044 of 30 runs up to revision ab440f162ab8 New : avg 399.169 stddev 1.899 of 5 runs since revision a4c6aedf00de Change : +11.420 (2.95% / z=2.824) Graph : http://mzl.la/U77MByChangeset range: http://hg.mozilla.org/integration/mozilla-inbound/pushloghtml?fromchange=ab440f162ab8&tochange=a4c6aedf00deChangesets: * http://hg.mozilla.org/integration/mozilla-inbound/rev/a4c6aedf00de : Bill McCloskey <wmccloskey@mozilla.com> - Backout a6b604916694 (bug747066) because its broken : http://bugzilla.mozilla.org/show_bug.cgi?id=747066Bugs: * http://bugzilla.mozilla.org/show_bug.cgi?id=747066 - xpc_UnmarkGrayObjectis slow
  59. 59. PERF-O-MATIC• Graph ServerのWebインターフェイス • http://graphs.mozilla.org/• どっかの何とかKitというのにも今年導入されたはず
  60. 60. PERF-O-MATIC
  61. 61. Telemetry• ユーザー環境でのパフォーマンスデータ収集のためのツール• 許可を得てる場合のみ収集• about:telemetry add-on
  62. 62. Telemetry Dashboard
  63. 63. AreWe ?• JavaScript Performance • http://www.arewefastyet.com/• Memshrink • https://areweslimyet.com/• Package file size • http://www.arewesmallyet.com/• Snappy • http://arewesnappyyet.com/ (coming)
  64. 64. Crash analyzing
  65. 65. Crash analyzing• Socorro (Crash reporter) • https://crash-stats.mozilla.com/• Firefox 3から導入• 従来はTalkBackという製品を使用• Socorroはその解析用サーバー・Webインターフェイスの総 称
  66. 66. Client• GoogleとMozillaでやってるbreakpadを利用• Breakpadはクラッシュ時に指定されたサーバーへminidump形式のファイルを送る• about:crashesでクラッシュ情報を確認可能
  67. 67. BreakPad• 多数のプラットフォームサポート• Windows / OSX / Linux / Android / Solaris• arm / PPC / SPARC / x86 / x86-64• PTRACEが動かないとAndroidでダンプ取れないけどね! (SHARP製Androidは無理)• クラッシュ時にminidump形式のファイルを作成• スタック上のメモリと各スレッドのコンテキストを保持
  68. 68. Server• Automation build時にmake buildsymbolsで作成されたシンボル情報(ソースラインと関数名)を蓄積 • Symbol Dumperはbreakpadのソースコードにある• クラッシュデータが送られたときにそれをもとにスタック情報を生成 • AndroidでJava内でのUnhandled Exceptionの場合は AppNoteにログ
  69. 69. Automation• Painが存在するんであればそれを自身で解決する方法を考えよう• テストをチェックしないといけないんであれば、できる限りテストをチェックしなくてもいいことを!• 人手がなければ頭を使えばいい!
  70. 70. Automation• 一つの修正だけでも多くのテストを実行してます• Less Regression!• Mozillaだけでこんなにテストしてもしょうが無いので将来的には、W3Cのための自動テストフレームワークを作ろうって話も• For compatibility!• でも手動テストもいる• これは省きたいと思ってる• パフォーマンステスト項目もいろいろ追加してる
  71. 71. Communications• We are REMOTE! • Auckland? London? Mountain View? Paris? San Francisco? Taipei? Tokyo? Toronto? Vancouver?• Meetings• Mailing List• IRC• Work Week
  72. 72. Meeting• Weekly Status • 全体• Product (Firefox / Android / B2g) • 製品特化• Platform (GFX / DOM / GAIA / all / etc) • Platform Development
  73. 73. IRC• #developers • Mobileバージョン(現在は Firefox for Androidのみ) • 全般的な開発むけ 向け• #introduction • #windev • Mozillaのコードを触り始め • Windows 版開発者専用 た人向け • #maildev• #gfx • Thunderbird Team用 • GFX / Layout team • など• #mobile
  74. 74. IRC• 当然botいます (mozbot/firebot) • http://ftp.mozilla.org/pub/mozilla.org/webtools/• firebot:!seen <user name> firebot: uuid
  75. 75. Remote, but…• WorkWeek • 各地にいる人が集まって、集中的に仕事する週間• Vidyo • ビデオ会議するために導入

×