Skip to content
Latchkey

O que é o Bazel? O sistema de build escalável e poliglota

O Bazel é um sistema de build e test projetado para grandes bases de código multilíngues, que alcança builds rápidos e reproduzíveis por meio de execução hermética e cache agressivo.

O Bazel, originário da ferramenta de build interna do Google, mira o caso mais difícil: monorepos enormes com muitas linguagens. Suas ideias centrais são a hermeticidade (builds dependem apenas de inputs declarados) e o cache (inputs idênticos nunca são reconstruídos), que juntos tornam até builds enormes rápidos e reproduzíveis.

O que é o Bazel

O Bazel é uma ferramenta de build e test para projetos de qualquer tamanho, com suporte a muitas linguagens (C++, Java, Go, Python e mais) em um único repositório. Os builds são descritos em arquivos BUILD que declaram targets e suas dependências explícitas, e o Bazel orquestra a compilação e o teste deles.

Hermeticidade e cache

O Bazel exige que cada target declare seus inputs exatos, de modo que um build depende apenas desses arquivos e ferramentas declarados, não do ambiente circundante. Como os inputs são conhecidos, o Bazel faz cache das saídas indexadas por hashes dos inputs e pula qualquer coisa já construída. Um cache remoto compartilha essas saídas entre máquinas, então a CI raramente reconstrói código inalterado.

Um exemplo de uso

Faça o build e o test de um target pelo seu label.

Common Bazel commands
# build a specific target
bazel build //app:server

# run the tests for a package
bazel test //app/...

Papel em CI/CD

Em CI, o cache remoto e os builds incrementais do Bazel são transformadores para grandes monorepos: um pipeline só reconstrói e retesta o que mudou, muitas vezes transformando horas em minutos. Realizar isso requer um cache persistente ou remoto, que máquinas de CI recém-criadas não têm por padrão. Runners gerenciados que mantêm um cache Bazel quente tornam esses builds muito mais rápidos e baratos, com auto-retry suavizando falhas transitórias de fetch.

Alternativas

Para monorepos JavaScript, Nx e Turborepo oferecem cache semelhante com menos configuração. Buck2 (da Meta) e Pants são sistemas de build comparáveis em larga escala. Maven, Gradle e Make lidam com projetos menores de linguagem única de forma mais simples. O Bazel brilha especificamente em larga escala e poliglota.

Principais conclusões

  • O Bazel constrói grandes monorepos multilíngues de forma hermética.
  • Inputs explícitos permitem um cache que pula builds e testes inalterados.
  • Em CI, um cache remoto/quente transforma builds enormes de horas em minutos.

Guias relacionados