Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Bazel - это бесплатный программный инструмент, который позволяет автоматизировать создание и тестирование программного обеспечения. [2] Компания Google использует инструмент сборки Blaze для внутренних целей [3] и выпустила часть инструмента Blaze с открытым кодом под названием Bazel, названную анаграммой Blaze. [4] Bazel был впервые выпущен в марте 2015 года и получил статус бета-версии к сентябрю 2015 года. [5]

Подобно инструментам сборки, таким как Make , Apache Ant или Apache Maven , [2] [4] Bazel создает программные приложения из исходного кода, используя набор правил. Правила и макросы создаются на языке Starlark (ранее называвшемся Skylark [6] ), диалекте Python . [4] Существуют встроенные правила для создания программного обеспечения, написанного на языках программирования Java , C , C ++ , Go , Python , Objective-C.и сценарии оболочки Bourne . [4] [5] Bazel может производить пакеты программных приложений, подходящие для развертывания в операционных системах Android и iOS. [7]

При разработке Bazel упор был сделан на скорость сборки, правильность и воспроизводимость. [2] [4] Инструмент использует распараллеливание для ускорения частей процесса сборки. [4] Он включает язык запросов Bazel, который можно использовать для анализа зависимостей сборки в сложных графах сборки. [4]

Обоснование [ править ]

Одна из целей Bazel - создать систему сборки, в которой целевые входы и выходы сборки полностью определены и, следовательно, точно известны системе сборки. [7] Это позволяет более точно анализировать и определять устаревшие артефакты сборки в графе зависимостей системы сборки . Повышение детерминированности анализа графа зависимостей приводит к потенциальному сокращению времени сборки за счет избежания повторного выполнения ненужных целей сборки. Надежность сборки повышается за счет исключения ошибок, когда цели сборки могут зависеть от устаревших входных артефактов.

Чтобы добиться более точного анализа графа зависимостей, Bazel использует дайджесты контента, а не временные метки на основе файлов. Временные метки файлов обычно используются для обнаружения изменений в таких инструментах, как Make или Apache Ant. Временные метки могут быть проблематичными, когда сборки распределяются по нескольким хостам из-за проблем с синхронизацией часов. [8] Одна из целей Bazel - обеспечить возможность распределенной и параллельной сборки в удаленной облачной инфраструктуре. Bazel также предназначен для масштабирования до очень больших репозиториев сборки, которые могут быть непрактичными для загрузки на рабочий компьютер отдельного разработчика. [9]

Bazel предоставляет инструменты, которые помогают разработчикам создавать воспроизводимые выходные данные сборки, идентичные битам. Реализованные в Bazel правила избегают типичных ошибок, таких как встраивание временных меток в сгенерированные выходные данные, чтобы гарантировать совпадение дайджеста контента. Это, в свою очередь, позволяет системе сборки надежно кэшировать ( запоминать) выходы промежуточных шагов сборки. Кроме того, воспроизводимая сборка позволяет обмениваться промежуточными результатами сборки между командами или отделами в организации, используя выделенные серверы сборки или распределенные кэши. Поэтому Bazel особенно хорошо подходит для крупных организаций и программных проектов, которые имеют значительное количество зависимостей сборки. Детерминированная сборка и способность точно анализировать входные и выходные артефакты сборки по графу зависимостей позволяют выполнять параллельное выполнение шагов сборки.

Bazel расширяется с помощью специального языка программирования Starlark. Старларк использует синтаксис, который является подмножеством синтаксиса языка программирования Python. Однако Starlark не реализует многие языковые функции Python, такие как возможность изменять коллекции или получать доступ к файловому вводу-выводу, чтобы избежать расширений, которые могут создавать побочные эффекты или создавать выходные данные сборки, неизвестные самой системе сборки. Такие побочные эффекты потенциально могут привести к некорректному анализу графа зависимостей сборки.

Bazel был разработан как многоязычная система сборки. Многие часто используемые системы сборки разработаны с предпочтением определенного языка программирования. Примеры таких систем включают Ant и Maven для Java, Leiningen для Clojure , sbt для Scala и т. Д. В многоязычном проекте объединение отдельных систем сборки и достижение описанных выше преимуществ скорости сборки и корректности может быть трудным и проблематичным.

Bazel также обеспечивает выполнение сборки в песочнице. Это можно использовать, чтобы убедиться, что все зависимости сборки указаны правильно и сборка не зависит, например, от библиотек, установленных только локально на рабочем компьютере разработчика. Это помогает гарантировать, что сборки останутся переносимыми и могут выполняться в других (удаленных) средах.

Системы сборки, наиболее похожие на Базель, - Штаны, [10] Бак и Пожалуйста. [11] [12] Брюки и Бак преследуют те же цели технического дизайна, что и Bazel, и были вдохновлены системой сборки Blaze, используемой внутри компании Google. Blaze также является предшественником Bazel. Bazel, Pants, Buck и Please приняли Starlark в качестве парсера файла BUILD в соответствии с его синтаксисом файла BUILD. Независимо разработанные системы сборки с аналогичными целями эффективного анализа графов зависимостей и автоматического отслеживания артефактов сборки были реализованы в таких системах сборки, как tup. [13]

Песочница [ править ]

Одной из ключевых особенностей, отличающих Bazel от других систем сборки, является использование песочницы для шагов компиляции. Когда Bazel выполняет отдельную компиляцию, он создает новый каталог и заполняет его символическими ссылками на явные входные зависимости для правила. Для таких языков, как C / C ++, это обеспечивает значительную безопасность для включения файлов заголовков: это гарантирует, что разработчик знает о файлах, которые используются при компиляции, и предотвращает неожиданное включение файла заголовка с аналогичным именем из другой каталог include.

Такой подход «песочницы» приводит к проблемам с общими инструментами сборки, что приводит к появлению ряда обходных путей, необходимых для правильной компиляции кода для разных архитектур. Например, при выполнении отдельной компиляции для архитектур Mac / Darwin компилятор записывает входные пути в символы SO и OSO в двоичном файле Mach-O, что можно увидеть с помощью такой команды, как nm -a mybinary | grep SO. Эти пути нужны для поиска символов при отладке. В результате сборки в Bazel должны исправлять скомпилированные объекты постфактум, пытаясь исправить проблемы, связанные с путями, которые возникли из конструкции песочницы, с использованием таких флагов, как -fdebug-prefix-mapи -oso_prefix, последний стал доступен в XCode 11.0.. Аналогичная обработка должна происходить на этапах компоновки, переписывая значения rpath в библиотеках общих объектов с помощью такой команды, как install_name_tool. [14]

[ править ]

Старый логотип Базель

С момента первого выпуска Bazel логотипом была зеленая буква «b», стилизованная под стебель базилика с двумя листьями.

5 июля 2017 года блог Bazel объявил о новом логотипе [15], состоящем из трех зеленых строительных блоков, расположенных в форме сердца.

См. Также [ править ]

  • Список программного обеспечения для автоматизации сборки
  • Монорепо

Ссылки [ править ]

  1. ^ "Релизы · bazelbuild / bazel" . GitHub .
  2. ^ a b c d Yegulalp, Сердар (11 сентября 2015 г.). "Масштабируемый программный инструмент с открытым исходным кодом Google, не зависящий от языка" . InfoWorld . Архивировано 25 октября 2017 года . Проверено 25 июня +2016 .
  3. ^ Бейер, Бетси; Джонс, Крис; Петофф, Дженнифер; Мерфи, Найл Ричард. Разработка надежности сайта: как Google управляет производственными системами . "O'Reilly Media, Inc.". п. 90. ISBN 9781491951187. Проверено 25 июня +2016 .
  4. ↑ a b c d e f g Болтон, Дэвид (27 апреля 2015 г.). «Базель, система сборки с открытым исходным кодом Google - новый стек» . thenewstack.io . Новый стек. Архивировано 24 октября 2017 года . Проверено 25 июня +2016 .
  5. ^ а б Доус, Райан. «Инструмент создания программного обеспечения Google Bazel готовится к бета-версии» . www.developer-tech.com . Разработчик Tech. Архивировано 23 октября 2017 года . Проверено 25 июня +2016 .
  6. ^ "Starlark - Bazel" . blog.bazel.build . Проверено 18 октября 2018 .
  7. ^ a b "FAQ - Базель" . базел . сборка . Проверено 25 июня +2016 .
  8. ^ "Что не так с GNU make?" .
  9. Натан Йорк (23 сентября 2011 г.). «Сборка в облаке: распределение этапов сборки» . google-engtools.blogspot.com .
  10. ^ «Штаны: быстрая масштабируемая система сборки» .
  11. ^ «Бак: высокопроизводительный инструмент для сборки» .
  12. ^ Пожалуйста, FAQ
  13. ^ Майк Шал (2009). «Построение системных правил и алгоритмов» (PDF) .
  14. ^ "инструменты / cpp / osx_cc_wrapper.sh" . Github.
  15. ^ Стерен Джаннини (5 июля 2017). «Новый логотип и домашняя страница Базэла» .

Внешние ссылки [ править ]

  • Официальный веб-сайт