Die Übernahme von Bazel für Web im großen Maßstab
Airbnb hat kürzlich Bazel, Googles Open-Source-Build-Tool, als universelles Build-System für Backend-, Web- und iOS-Plattformen übernommen. Das große Web-Monorepo des Unternehmens, das aus über 11 Millionen Codezeilen besteht, stellte Herausforderungen mit maßgeschneiderten Build-Skripten und Caching-Logik dar, die schwer zu warten und zu skalieren waren. Um diese Probleme zu lösen, migrierte Airbnb zu Bazel, das Sophistikation, Parallelität, Caching und Leistung bot.Der Migrationsprozess begann 2021, aber es gab keine öffentliche Industrie-Vorgabe für die Integration von Bazel mit Web im großen Maßstab außerhalb von Google. Das Team musste Leistungsprobleme bei der Übertragung großer Dateien in die Remote-Umgebung überwinden und etablierte Migrationsprinzipien, die die Verbesserung oder Aufrechterhaltung der Gesamtleistung und die Reduzierung der Auswirkungen auf Entwickler, die zum Monorepo beitragen, während des Übergangs umfassten.Um das Repository für Bazel vorzubereiten, führte das Team Zyklusbrechungen und automatisierte die Generierung von BUILD.bazel-Dateien durch. Sie migrierten auch CI-Jobs zu Bazel, beginnend mit Typprüfung, Linting und Unit-Testing. Das Team aktivierte TypeScript, ESLint und Jest und führte Caching ein, um die Eingabegröße zu reduzieren und die Leistung zu verbessern.Um ein Zurückfallen zu verhindern, versetzte das Team Tests von "versteckt" zu "erforderlich" über ein Regelattribut und stellte sicher, dass es nur eine einzige Wahrheitsquelle gibt, indem es Tests nicht unter der Jest-Konfiguration ausführt, die ersetzt wird. Sie schrieben auch ein Skript, um vor und nach Bazel zu vergleichen und die Migrationsbereitschaft mithilfe von Metriken wie Testlaufzeit, Code-Coverage-Statistiken und Fehlerhäufigkeit zu bestimmen.Parallel zur CI-Migration stellte das Team sicher, dass Entwickler Bazel lokal ausführen können, um CI-Fehler zu reproduzieren und zu iterieren. Sie lieferten ein lokales Bazel-Erlebnis, das dem bestehenden Entwickler-Erlebnis und der Leistung entspricht oder überlegen ist, sodass Entwickler weiterhin vertraute Tools verwenden und sich bei Bedarf für Bazel entscheiden können.