Najczęstsze pytania

Jeśli masz pytania lub problemy, skorzystaj z Pomocy.

Co to jest Bazel?

Bazel to narzędzie, które automatyzuje kompilacje i testy oprogramowania. Obsługiwane zadania kompilacji obejmują uruchamianie kompilatorów i łączników do tworzenia wykonywalnych programów i bibliotek oraz tworzenie wdrażalnych pakietów na Androida, iOS i inne środowiska docelowe. Bazel jest podobny do innych narzędzi, takich jak Marka, Ant, Gradle, Buck, Spodnie czy Maven.

Co jest wyjątkowego w bazarze?

Bazel został zaprojektowany tak, by pasował do sposobu, w jaki tworzy się oprogramowanie w Google. Cechy te:

  • Obsługa wielu języków: Bazel obsługuje wiele języków i można ją rozszerzyć na dowolne języki programowania.
  • Ogólny język kompilacji: projekty są opisywane w języku BUILD, zwięzłym formacie tekstowym, który opisuje projekt jako zbiór małych połączonych bibliotek, plików binarnych i testów. W przeciwieństwie do narzędzi takich jak Make musisz opisać poszczególne pliki i wywołania kompilacji.
  • Obsługa wielu platform: to samo narzędzie i te same pliki BUILD mogą służyć do tworzenia oprogramowania dla różnych architektur, a nawet różnych platform. W Google bazujemy na bazach danych, takich jak aplikacje serwerowe działające w systemach w naszych centrach danych czy aplikacje klienckie działające na telefonach komórkowych.
  • Możliwość odtworzenia: w plikach BUILD każda biblioteka, test i plik binarny muszą wyraźnie określić swoje bezpośrednie zależności. Bazel korzysta z tych informacji o zależności, aby dowiedzieć się, co trzeba utworzyć ponownie podczas wprowadzania zmian w pliku źródłowym i jakie zadania można uruchamiać równolegle. Oznacza to, że wszystkie kompilacje są przyrostowe i zawsze przynoszą taki sam wynik.
  • Skalowalność: Bazel może obsługiwać duże kompilacje; w Google często zdarza się, że plik binarny serwera zawiera 100 tys. plików źródłowych. Kompilacje, w których nie zostały zmienione żadne pliki, zajmują ok. 200 ms.

Dlaczego Google nie używa...?

  • Marka, ninja
    • Użytkownicy korzystają z usługi Bazel na wyższym poziomie. Na przykład bazel ma wbudowane reguły dotyczące „testu Java”, „Cbin++ binarny” i określeń takich jak „platforma docelowa” i „platforma hosta”. Te reguły zostały przetestowane w celu zapewnienia im niezawodności.
  • Ant i Maven: Ant i Maven są nastawione głównie na Javę, natomiast Bazel obsługuje wiele języków. Bazel zachęca do dzielenia baz danych na mniejsze jednostki wielokrotnego użytku oraz tworzenie od nowa tylko tych, które wymagają przebudowy. Przyspiesza to pracę programistów podczas pracy z większymi bazami kodu.
  • Gradle: pliki konfiguracji Bazel są znacznie bardziej rozpowszechnione niż Gradle, dzięki czemu Bazel wie dokładnie, do czego służy poszczególne działania. To pozwala zachować równoległość i łatwiej odtwarzać.
  • Spodnie, Buck: oba narzędzia zostały opracowane i opracowane przez byłych pracowników Google odpowiednio na Twitterze, Foursquare i na Facebooku. Modele te zostały wymodelowane na podstawie bazylu, ale ich funkcje są różne, więc nie możemy ich zastąpić.

Skąd pochodzi bazel?

Bazel to rodzaj narzędzia używanego przez Google do wewnętrznego tworzenia oprogramowania serwera. Rozszerzyliśmy ją również na inne oprogramowanie, takie jak aplikacje mobilne (iOS, Android) łączące się z naszymi serwerami.

Czy Twoje narzędzie wewnętrzne zostało zaprojektowane od nowa jako open source? Czy to rozwidlenie?

Bazel udostępnia większość kodu swojemu narzędziu wewnętrznemu, a jego reguły są używane w milionach kompilacji każdego dnia.

Dlaczego Google stworzył Bazel?

Długo temu Google stworzył swoje oprogramowanie, wykorzystując duże, wygenerowane pliki Makefiles. Doprowadziło to do powolnych i niestabilnych kompilacji, co zaburzało wydajność naszych programistów i elastyczność firmy. Bazel to sposób na rozwiązanie tych problemów.

Czy bazel wymaga klastra kompilacji?

Bazel domyślnie uruchamia operacje kompilacji lokalnie. Bazel może się jednak łączyć z kompilacją kompilacji, co zapewnia jeszcze szybsze kompilacje i testy. Więcej informacji znajdziesz w dokumentacji na temat zdalnego buforowania i zapisu w pamięci podręcznej oraz zdalnego buforowania.

Jak wygląda proces programowania przez Google?

W przypadku bazy kodu serwera stosujemy ten przepływ pracy:

  • Cały nasz kod serwera znajduje się w jednym, gigantycznym systemie kontroli wersji.
  • Każdy tworzy swoje oprogramowanie dzięki Bazelu.
  • Różne zespoły są właścicielami różnych części drzewa źródłowego i udostępniają swoje komponenty jako cele BUILD.
  • Rozgałęzienie jest używane przede wszystkim do zarządzania wersjami, więc każdy tworzy oprogramowanie na wczesnym etapie.

Bazel to podstawa tej filozofii: ponieważ baza wymaga pełnego wskazania wszystkich zależności, możemy przewidzieć, które programy i testy zostaną objęte zmianą, a następnie sprawdzić je przed przesłaniem.

Więcej informacji o procesie programowania w Google znajdziesz na blogu narzędziowym eng.

Skąd wzięła się Twoja baza danych?

Tworzenie oprogramowania powinno być ciekawe i proste. Wolne i nieprzewidywalne budowle sprawiają, że programowanie jest przyjemniejsze.

Dlaczego warto korzystać z Bazela?

  • Bazel może skrócić czas kompilacji, bo może skompilować tylko te pliki, które trzeba ponownie skompilować. Może też pominąć ponowne uruchamianie testów, o których wiadomo, że się nie zmieniły.
  • Bazel generuje wyniki deterministyczne. To pozwala wyeliminować odchylenie między przyrostowymi i czystymi kompilacjami, laptopami, systemem CI itp.
  • Bazel może tworzyć różne aplikacje klienckie i serwerowe za pomocą tego samego narzędzia z tego samego obszaru roboczego. Możesz na przykład zmienić protokół klienta lub serwera w ramach jednego zatwierdzenia i sprawdzić, czy zaktualizowana aplikacja mobilna współpracuje ze zaktualizowanym serwerem. Budując oba za pomocą tego samego narzędzia i wykorzystując wszystkie wspomniane wyżej zalety Bazel.

Czy mogę zobaczyć przykłady?

Tak; Zobacz prosty przykład lub przeczytaj kod źródłowy aplikacji Baidu, by poznać bardziej złożony przykład.

Co jest najlepsze w Bazach?

Bazel jest idealny do tworzenia i testowania projektów z tymi właściwościami:

  • Projekty z dużą bazą kodu
  • Projekty napisane w (wielu) skompilowanych językach
  • Projekty wdrażane na wielu platformach
  • Projekty z kompleksowymi testami

Gdzie mogę uruchomić Bazel?

Bazel działa w systemach Linux, macOS (OS X) i Windows.

Przenoszenie do innych platform UNIX powinno być stosunkowo proste, o ile jest dostępna platforma JDK.

Do czego nie należy używać usługi Bazel?

  • Bazel próbuje mądrze korzystać z pamięci podręcznej. Oznacza to, że nie nadaje się ona do uruchamiania operacji kompilacji, których dane wyjściowe nie powinny być buforowane. Na przykład w Bazelu nie należy wykonywać tych czynności:
    • Kompilacja, która pobiera dane z internetu.
    • Krok testowy, który łączy się z instancją kontroli jakości Twojej witryny.
    • Krok wdrożeniowy, który zmienia konfigurację chmury Twojej witryny.
  • Jeśli kompilacja składa się z kilku długich kroków, Bazel może nie pomóc zbyt wiele. Szybciej wykonasz działanie, dzieląc długie kroki na mniejsze, odrębne cele, które Bazel może uruchamiać równolegle.

Jak stabilny jest zestaw funkcji Bazel?

Główne funkcje (reguły C++, Java i powłoka) mają intensywne zastosowanie w Google, więc są dokładnie testowane i mają bardzo małą liczbę rezygnacji. Podobnie codziennie sprawdzamy nowe wersje bazy danych w setkach tysięcy celów, aby znaleźć regresje, a nowe publikujemy kilka razy w miesiącu.

Krótko mówiąc, z wyjątkiem funkcji oznaczonych jako eksperymentalne usługa Bazel powinna po prostu działać. Zmiany w regułach nieeksperymentalnych będą zgodne wstecznie. Szczegółową listę stanów obsługi funkcji znajdziesz w dokumencie pomocy.

Jak stabilny jest Bazel jako plik binarny?

W Google dbamy o to, żeby awarie baz danych były bardzo rzadkie. To powinno także dotyczyć naszej bazy kodu typu open source.

Jak zacząć korzystać z Bazel?

Zobacz Pierwsze kroki.

Czy Docker nie rozwiązuje problemów z odtwarzalnością?

Możesz łatwo tworzyć piaskownice ze stałymi wersjami systemu operacyjnego, na przykład Ubuntu 12.04 lub Fedora 21. Pozwala to rozwiązać problem z odtwarzaniem w środowisku systemowym, tj. „Jakiej wersji /usr/bin/c++ potrzebuję?”.

Docker nie bierze się za powielanie informacji o zmianach w kodzie źródłowym. Uruchomienie MakeMake z nieprawidłowo zapisanym plikiem Makefile w kontenerze Dockera może przynieść nieprzewidywalne wyniki.

Sprawdzamy narzędzia w kontroli źródła pod kątem możliwości odtworzenia problemu. W ten sposób możemy weryfikować zmiany w narzędziach („Uaktualnienie GCC do 4.6.1”) przy użyciu tego samego mechanizmu co w przypadku zmian w bibliotekach podstawowych („sprawdź ograniczenia w OpenSSL”).

Czy mogę tworzyć pliki binarne do wdrożenia w Dockerze?

Bazel umożliwia tworzenie samodzielnych, statycznie połączonych plików binarnych w języku C/C++ i niezależnych plików jar dla Javy. Działają one z kilkoma zależnościami od zwykłych systemów UNIX, dlatego powinny być łatwe do zainstalowania w kontenerze Dockera.

Baza ma konwencje dotyczące tworzenia bardziej złożonych programów, na przykład programu Java, który wykorzystuje zestaw plików danych lub uruchamia inny program jako podproces. Możesz pakować takie środowiska jako samodzielne archiwa, aby można je było wdrożyć w różnych systemach, w tym w obrazach Dockera.

Czy dzięki Bazelu mogę tworzyć obrazy Dockera?

Tak, możesz używać naszych reguł Dockera do tworzenia powtarzalnych obrazów Dockera.

Czy Bazel pozwoli automatycznie odtwarzać moje budowle?

W przypadku plików binarnych Java i C++ tak, przy założeniu, że nie zmienisz łańcucha narzędzi. Jeśli masz kroki kompilacji, które obejmują niestandardowe przepisy (na przykład uruchamianie plików binarnych za pomocą skryptu powłoki w obrębie reguły), musisz zachować szczególną ostrożność:

  • Nie używaj zależności, które nie zostały zadeklarowane. Uruchomienie w trybie piaskownicy (–spawn_strategy=sandboxed, tylko w systemie Linux) może pomóc w znalezieniu niezadeklarowanych zależności.
  • Unikaj zapisywania sygnatur czasowych i identyfikatorów użytkownika w wygenerowanych plikach. Jest to szczególnie podatne na pliki ZIP i inne archiwa.
  • Nie łącz się z siecią. Pomocne może być też wykonanie w trybie piaskownicy.
  • Unikaj w szczególności procesów, w których stosuje się liczby losowe, w szczególności przemierzanie słownika w wielu językach programowania.

Czy masz wersje binarne?

Tak, możesz zapoznać się z najnowszymi plikami binarnymi i poznać nasze zasady dotyczące wersji.

Używam Eclipse/IntelliJ/XCode. W jaki sposób Bazel współdziała z IDE?

Dla IntelliJ wypróbuj wtyczkę Intel IntelliJ z bazelem.

W przypadku XCode zajrzyj do Tulsi.

Jeśli używasz Eclipse, wypróbuj wtyczkę E4B.

W przypadku innych IDE sprawdź, jak działają te wtyczki, w poście na blogu.

Używam Jenkins/CircleCI/TravisCI. Jak Bazel współdziała z systemami CI?

Jeśli baza danych lub testowanie wywołania się nie powiedzie, Bazel zwraca kod zerowy. Liczba ta powinna wystarczyć do podstawowej integracji CI. Ponieważ bazel nie wymaga poprawnych kompilacji, system CI nie powinien być skonfigurowany do czyszczenia przed rozpoczęciem kompilacji/testu.

Więcej informacji o kodach wyjść znajdziesz w Instrukcji obsługi.

Jakich przyszłych funkcji można się spodziewać w Bazelu?

Zobacz mapy dróg.

Czy mogę używać bazy danych w projekcie INSERT LANGUAGE HERE?

Baza danych jest rozszerzalna. Każdy może dodać obsługę nowych języków. Listę wielu języków znajdziesz w encyklopedii kompilacji, gdzie znajdziesz listę rekomendacji, a wewesomebazel.com – bardziej wyczerpującą.

Jeśli chcesz utworzyć rozszerzenia lub dowiedzieć się, jak działają, zapoznaj się z dokumentacją rozszerzania bazera.

Czy mogę używać bazy danych Bazel?

Zobacz nasze wytyczne dotyczące darowizn.

Dlaczego nie wszystkie procesy programowania są otwarte?

Nadal musimy często refaktoryzować interfejsy między kodem publicznym w Bazale a naszymi wewnętrznymi rozszerzeniami. Utrudnia to więc znaczne rozpowszechnienie tej funkcji.

Czy koniecznie udostępniasz zasoby na zasadach open source?

Platforma open source bazuje na czasie. Nadal jednak pracujemy nad oprogramowaniem typu open source:

  • Wiele testów integracyjnych i jednostek (które powinny ułatwić wprowadzanie poprawek).
  • Pełna integracja IDE.

Zależy nam przy tym na zapewnieniu nie tylko kodu, ale również opinii na temat kodu oraz śledzenia błędów i projektu, w której weźmie udział społeczność Bazel. Nie ma jeszcze rozwiązania, więc niektóre zmiany pojawią się w repozytorium Bazel bez wyraźnego wyjaśnienia. Pomimo braku przejrzystości chcemy wspierać zewnętrznych deweloperów i współpracować. W związku z tym otwieramy kod, mimo że część procesu programowania jeszcze trwa. Poinformuj nas, jeśli coś wydaje się niejasne lub niesprawiedliwe, ponieważ przechodzimy na model otwarty.

Czy są jakieś elementy bazera, które nigdy nie będą typu open source?

Tak, część kodu może być zintegrowana z technologią Google lub szukaliśmy sposobu na pozbycie się tego faktu (lub połączenie obu tych metod). Te części bazy kodu nie są dostępne na GitHubie i prawdopodobnie nigdy nie będą.

Jak skontaktować się z zespołem?

Można się z Tobą skontaktować pod adresem bazel-dyskusja@googlegroups.com.

Gdzie zgłaszać błędy?

Otwórz zgłoszenie na GitHubie.

Co się dzieje ze słowem „Blaze” w bazie kodu?

To jest wewnętrzna nazwa narzędzia. Bazylika to Basel.

Dlaczego inne projekty Google (Android, Chrome) korzystają z innych narzędzi do kompilacji?

Do czasu wprowadzenia pierwszej wersji (alfa) bazel nie był dostępny na zewnątrz, więc nie można było go używać na projektach open source takich jak Chromium czy Android. Ponadto pierwotny brak obsługi systemu Windows stanowił problem podczas tworzenia aplikacji systemu Windows, takich jak Chrome. Projekt jest już dojrzały i stabilny, dlatego projekt Android Open Source jest w trakcie przenoszenia do Bazel.

Jak się mówi „Bazel”?

Analogicznie do słowa „basil” (zioło) w języku angielskim: „BAY-zel”. Rymujące się słowa „hazel” IPA: /quit