The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выпуск сборочной системы Bazel 2.0

25.12.2019 11:39

Доступен выпуск открытого сборочного инструментария Bazel 2.0, развиваемого инженерами из Google и используемого для сборки большинства внутренних проектов данной компании. Bazel обеспечивает сборку проекта, запуская необходимые компиляторы и тесты. Поддерживается сборка и тестирование кода на Java, C++, Objective-C, Python, Rust, Go и многих других языках, а также сборка мобильных приложений для Android и iOS. Код проекта распространяется под лицензией Apache 2.0.

Значительное изменение версии связано с добавлением изменений, нарушающих обратную совместимость. Начиная с Bazel 2.0 включены по умолчанию режимы "--incompatible_remap_main_repo" (ссылки по имени и через @ теперь ссылаются на один репозиторий), "--incompatible_disallow_dict_lookup"_(применение нехешируемых ключей), "--incompatible_remove_native_maven_jar" и "--incompatible_prohibit_aapt1". Среди других изменений:

  • В команде aquery появилась экспериментальная поддержка новой редакции формата вывода "proto" (--output=proto), которая пока отключена по умолчанию (--incompatible_proto_output_v2) и обеспечивает более компактное представление данных;
  • Добавлен флаг "--incompatible_remove_enabled_toolchain_types", позволяющий удалить поле PlatformConfiguration.enabled_toolchain_types;
  • Добавлена защита от загрузки пакетов, при загрузке которых при раскрытии путей используются цикличные символические ссылки;
  • Реализована возможность использования флага "--disk_cache" с внешними кэшами gRPC;
  • В пакет для Debian и бинарный инсталлятор включена улучшенная прослойка, обрабатывающая файлы ~/.bazelversion и переменную окружения $USE_BAZEL_VERSION;
  • В рамках подготовки к переводу файлов с манифестом runfiles в категорию устаревших возможностей добавлен флаг "--experimental_skip_runfiles_manifests".

Среди отличительных особенностей Bazel выделяются высокая скорость, надёжность и повторяемость процесса сборки. Для достижения высокой скорости сборки в Bazel активно применяются техники кэширования и распараллеливания процесса сборки. В BUILD-файлах обязательно полностью определены все зависимости, на основе которых принимаются решения по пересборке компонентов после внесения изменений (пересобираются только изменившиеся файлы) и распараллеливания процесса сборки. Инструментарий также гарантирует повторяемость сборки, т.е. результат сборки проекта на машине разработчика будет полностью совпадать со сборкой на сторонних системах, таких как серверы непрерывной интеграции.

В отличие от Make и Ninja в Bazel применяется более высокоуровневый подход к построению правил сборки, при котором вместо определения привязки команд к собираемым файлам производится применение более абстрактных готовых блоков, таких как "сборка исполняемого файла на языке С++", "сборка библиотеки на C++" или "запуск теста для C++", а также определение целевых и сборочных платформ. В текстовом файле BUILD компоненты проекта описываются как связка библиотек, исполняемых файлов и тестов, без детализации на уровне отдельных файлов и команд вызова компилятора. Дополнительная функциональность реализуется через механизм подключения расширений.

Поддерживается использование единых сборочных файлов для разных платформ и архитектур, например, один файл сборки без изменений может применяться как для серверной системы, так и для мобильного устройства. Сборочная система изначально спроектирована для оптимальной сборки проектов Google, в том числе сборки очень больших проектов и проектов, содержащих код на нескольких языках программирования, требующих расширенного тестирования и собираемых для нескольких платформ.

  1. Главная ссылка к новости (https://blog.bazel.build/2019/...)
  2. OpenNews: Выпуск сборочной системы Bazel 1.0
  3. OpenNews: Выпуск сборочной системы Meson 0.52
  4. OpenNews: Разработчики из компании Google открыли код системы сборки Ninja
  5. OpenNews: Первый публичный выпуск сборочного инструментария build2
  6. OpenNews: Выпуск сборочного инструментария Qbs 1.15 и среды разработки Qt Design Studio 1.4
Лицензия: CC-BY
Тип: Программы
Ключевые слова: bazel, build
При перепечатке указание ссылки на opennet.ru обязательно
Обсуждение (21) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, X4asd (ok), 11:45, 25/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    > Сборочная система изначально спроектирована для оптимальной сборки проектов Google, в том числе сборки очень больших проектов и проектов, содержащих код на нескольких языках программирования, требующих расширенного тестирования и собираемых для нескольких платформ.

    изначально спроектирована для проектов Google.

    в конечном итоге только для них и используется :-) .

     
     
  • 2.3, Аноним (3), 12:58, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Еще Дропбокс использует https://github.com/dropbox/dbx_build_tools например
     
  • 2.4, Аноним (4), 12:59, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Монорепо - это костыль для тех, кто путает VCS с пакетным менеджером.
     
     
  • 3.7, yet another anonymous (?), 13:38, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Наблюдается тенденция замешивать в "систему сборки" не только систему сбора информации о сборочной машине и целевой системе, но и собственный пакетный менеджер и примотанный синей изолентой VCS.

    А что, пипл горячо одобряет.

     
     
  • 4.25, Аноним (25), 01:37, 01/01/2020 [^] [^^] [^^^] [ответить]  
  • +/
    Надо еще свою операционку, чтоли, тащить. Гугл вот например может попробовать андроид всучивать внагрузку.
     
  • 3.8, Аноним (8), 15:17, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Так а зачем прикручивать еще и пакетный менеджер, когда можно обойтись одной сущностью?
     
     
  • 4.11, Аноним (11), 17:00, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Потому что на проекте бывает больше одного разработчика иногда.
     
     
  • 5.12, Аноним (8), 17:20, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    И что? Разработчикам монорепо начинает доставлять неприятности только когда разрастается до совсем уж космических размеров (или когда работодателя душит жаба купить для них современные машины). Или на оффтопике из-за убогой работы кэша ФС, но на оффтопике и других страданий полно. А при адекватном размере монорепы она наоборот, упрощает жизнь
     
  • 2.9, Аноним (9), 16:14, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    нет. Basel широко применяется, при сборке суровых энтерпрайзных проектов под андроид без него вообще никуда. Но конечно, это специфический инструмент, в небольших опенсорсных проектах он не нужен.
     
  • 2.13, Google (?), 21:14, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Внутри Гугла она называется Blaze
     
     
  • 3.18, Аноним (18), 01:19, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Blazer вишневый
     
  • 2.19, добрый анонимайзер (?), 13:02, 26/12/2019 [^] [^^] [^^^] [ответить]  
  • –1 +/
    только для нас и только у нас, это что бы за забор не смотрели, а только у нас сидели
     
  • 2.24, Аноним (-), 21:11, 31/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    > в конечном итоге только для них и используется :-) .

    Потому что гугломонстр как он есть. Я насчитал там как минимум яву, питон, с++, шелл, файлы для самого себя, и наверняка еще что-то пропустил. В общем обычная гугловская сборочница - надо скачать половину интернета и забить половину диска. Чтобы скомпилить уже наконец вон тот чертов хелловорлд.

     

  • 1.2, yet another anonymous (?), 12:06, 25/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А как на практике соотносится

    > вместо определения привязки команд к собираемым файлам производится применение более абстрактных готовых блоков, таких как "сборка исполняемого файла на языке С++", "сборка библиотеки на C++"

    и

    > ... в том числе ... проектов, содержащих код на нескольких языках программирования

    ?

    В контексте

    > один файл сборки без изменений может применяться как для серверной системы, так и для мобильного устройства

    подозревается беспощадный ad-hoc, засунутый под заваренный капот системы.

     
     
  • 2.5, Аноним (3), 13:07, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Это как сборка для сборки для сборки. Там пишется такой обвес что он сам по себе как целая программа только кофе не готовит.
     
     
  • 3.6, Аноним (6), 13:22, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Добро похаловать в реальность, так делают почти все: от заурядного autotools, до всяких CMake, meson и т.д.
     
     
  • 4.10, Аноним (11), 16:58, 25/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Бывает все-таки попроще. Но реальный мир такой реальный.
     

  • 1.14, BlackRot (ok), 22:35, 25/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А сам андроид в нем собрать можно?
     
     
  • 2.22, Аноним (22), 05:04, 27/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    В нем собирается все, даже небо, даже Аллах!
     
     
  • 3.23, Аноним (23), 17:29, 28/12/2019 [^] [^^] [^^^] [ответить]  
  • +/
    Это тебе так кажется.
    Я хоть и не мусульманин, однако могу сказать
    - у тебя программа
    "выполнила недопустимую ошибку и будет закрыта".
     

  • 1.20, qsdg (ok), 22:35, 26/12/2019 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Работал в двух разных компаниях с Bazel -- проект собирался час-полтора (со всеми включенными кешами!). Мне почему-то кажется, что если бы люди делали раздельные репы и версионирование депенденсей, то (контринтуитивно) было бы проще и быстрее.

    Но самая главная проблема -- monorepo (на самом деле monobuilder) очень враждебен к любому third-party. Либо вы пишите всё сами in-house (как гугля), либо сидите на древней версии какого-либо third-party (и самого базеля). У нас дошло до того, что нужно хитро качать и устанавливать редактор кода, который бы смог работать этими старыми версиями. А реюзать код (и протобуферы!) из монорепы в других проектах почти невозможно (протобуферы не компилятся отдельно).

     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2020 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру