Site icon AppTractor

Доктор Bazel: как я научился не волноваться и полюбил сборки

Создание программного обеспечения может быть как простым, как выпечка пирога, так и сложным, как ракетостроение. Все зависит от инструментов, которые вы используете. Будучи разработчиком, вы наверняка сталкивались с такими проблемами, как непоследовательные сборки, длительное время сборки и ад зависимостей. Если вы хотите сделать свою жизнь проще, а свое программное обеспечение — лучше, вам стоит попробовать Bazel, идеальный инструмент для сборки, который может справиться с чем угодно — от кексов до космических кораблей.

В этой статье мы познакомим вас с основами Bazel и покажем, как он может помочь вам перестать беспокоиться и полюбить создание приложений.

Что такое Bazel?

Bazel — это бесплатный инструмент с открытым исходным кодом, используемый для автоматизации создания и тестирования программного обеспечения. Google использует инструмент сборки Blaze внутри компании и выпустила порт с открытым исходным кодом под названием Bazel, названный как анаграмма Blaze.

Почему Bazel?

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

Она похож на другие инструменты сборки, такие как Make, Maven и Gradle, но гораздо более гибкая: ее можно использовать для создания проектов на различных языках программирования, включая Kotlin, Swift, Go и Python. Кроме того, у него есть несколько уникальных особенностей, которые делают ее особенной. Вот некоторые из них:

Давайте рассмотрим некоторые фундаментальные концепции системы.

Концепции Bazel

Прежде чем начать использовать платформу, необходимо разобраться в его концепциях.

Концепции в действии

Предположим, у нас есть приложение для Python Flask и приложение для Android, которое использует некий API из этого приложения, и мы хотим использовать Bazel для сборки обоих приложений.

Simple project structure:👇🏻

- WORKSPACE
- project_python
    - BUILD
    - server.py
    - …
- project_android
    - BUILD
    - AndroidManifest.xml
    - src/
        - …

Во-первых, мы должны иметь наш файл WORKSPACE в корне проекта. Он может быть пустым, чтобы просто определить точку входа в Bazel.

Во-вторых, нам нужно создать файл BUILD для каждого из пакетов.

# project_python/BUILD.bazel

load("@bazel_tools//tools/build_defs/python/rules:python_binary.bzl", "python_binary")

python_binary(
    name = "server",
    srcs = ["server.py"],
    deps = [
        "@pip//:flask",
    ],
)

Мы загружаем python_binary из правил Python и используем его для создания нашего сервера.

То же самое для Android:

# project_android/BUILD.bazel

load("@rules_android//android:rules.bzl", "android_binary")

android_binary(
    name = "app",
    resource_files = glob(["res/**/*"]),
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**/*"]),
)

Сборка целей

С помощью команды bazel build <target> вы можете собрать свои пакеты.

bazel build //project_python:server
bazel build //project_android:app

Или с помощью команды bazel build //..., которая рекурсивно собирает все цели в текущем рабочем пространстве. Сюда входят цели во всех подкаталогах, а также цели, которые объявлены как зависимости от других целей.

Использование Bazel в вашей системе CI/CD

Если вы сделали этот шаг в мир Bazel, поздравляем! Вы уже приняли разумное решение, теперь продолжайте плыть по течению на волне правильных решений и позвольте CI/CD трубопроводу стать ветром под вашими Bazel-крыльями. Ваша кодовая база и ваша команда будут вам благодарны!

Чтобы использовать Bazel в своих рабочих процессах Codemagic, вам сначала нужно установить Bazel на машину сборки. После этого можно запускать сценарий сборки. Ниже приведен пример добавления этих шагов в раздел «scripts» конфигурационного файла codemagic.yaml.

scripts:
  ...
  - name: Install Bazel
    script: |
        HOMEBREW_NO_AUTO_UPDATE=1
        brew install bazel        
  - name: Build all targets in workspace
    script: bazel build //...

Заключение

Bazel — это инструмент, который может изменить ваш мир. Он может сделать за вас всю тяжелую работу по созданию и тестированию программного обеспечения, сделав ее быстрой, точной, масштабируемой и гибкой. Так что перестаньте беспокоиться о создании приложений, вы только что узнали, как использовать Bazel. Счастливого программирования!

Ссылки

Exit mobile version