- Bazel é um sistema de build de código aberto desenvolvido pelo Google para compilar grandes monorepos com eficiência
- Ele compila projetos complexos com precisão e rapidez, sendo especialmente eficaz ao lidar com codebases grandes e dependências em múltiplas linguagens
- Conceitos centrais do Bazel
- Velocidade baseada em correção: o Bazel trata builds como funções puras, garantindo que a mesma entrada gere a mesma saída
- Cache eficiente: em ambientes de grande escala como os do Google, cache é essencial, e a correção é o que torna isso possível
- Builds sem limpeza: após mudanças no código-fonte, é possível fazer builds estáveis sem um "clean build"
- Quando usar o Bazel
- Recomendado
- Grandes monorepos: quando há milhões de linhas de código e uso de várias linguagens
- Gerenciamento de dependências entre diferentes linguagens: por exemplo, treinar modelos em Python e processar dados em Scala
- Necessidade de CI/CD rápido e preciso: para acelerar o desenvolvimento e evitar conflitos
- Não recomendado
- Projetos pequenos: quando há menos de 100 mil linhas de código e uso de uma única linguagem
- Bibliotecas open source: o Bazel é adequado para gerar artefatos distribuíveis, mas deixa a desejar na distribuição de bibliotecas reutilizáveis
- Pontos a considerar ao adotar o Bazel
- A curva de aprendizado inicial é alta, e escrever e manter arquivos de build exige recursos adicionais
- É essencial montar a infraestrutura, como servidor de cache e configuração de execução remota
- Casos de sucesso com Bazel
- Netflix
- Problema: em um repositório com 250 mil a 300 mil linhas de código, o CI levava de 45 minutos a 1 hora
- Solução: após adotar o Bazel, o tempo de build caiu de 20 minutos para 6 minutos
- Efeito: redução de conflitos de merge e melhoria na velocidade de processamento de PRs
- Open Systems
- Problema: builds lentos e fluxo de trabalho ineficiente
- Solução: após migrar para o Bazel, o ciclo de feedback caiu de 20 minutos para 5 minutos
- Lição: treinamento e comunicação com os desenvolvedores são importantes
- Vantagens e desvantagens da adoção do Bazel
- Vantagens
- Tempos de build mais rápidos: melhoria de velocidade com cache e builds incrementais
- Correção e reprodutibilidade: representa com precisão grafos complexos de dependência
- Integração multilíngue: suporte a várias linguagens, como Haskell, TypeScript e Python
- Desvantagens
- Alto custo de adoção: configuração inicial e curva de aprendizado íngremes
- Necessidade de gerenciar arquivos de build: é obrigatório declarar entradas/saídas explicitamente, e vale usar ferramentas de automação
- Tooling de JavaScript e frontend: dificuldade de compatibilidade com workflows existentes, como hot reloading
- Dicas para migrar para o Bazel
- Montar uma equipe central: garantir especialistas capazes de entender e configurar o Bazel
- Treinamento e comunicação: no início da adoção, é essencial treinar desenvolvedores e alinhar expectativas
- Complexidade por linguagem: cada linguagem exige configurações de build diferentes
- Automatização de arquivos de build: usar ferramentas como Gazelle
- Conclusão
- O Bazel é excelente para lidar com grandes monorepos e dependências complexas, mas tem alto custo de adoção
- É indicado para organizações que trabalham com milhões de linhas de código e múltiplas linguagens
- Para projetos pequenos ou para quem quer uma transição gradual, vale considerar alternativas como Earthly em vez do Bazel
3 comentários
Acho que seria bom mencionar também casos de fracasso na adoção do Bazel.
No caso do AOSP, nos últimos anos houve algumas apresentações na BazelCon sobre a migração do sistema de build existente (Soong) para o Bazel.
https://developers.googleblog.com/en/…
No entanto, na BazelCon deste ano não houve compartilhamento de conteúdo relacionado ao AOSP e, em documentos recentes sobre build do AOSP, apareceu um aviso de que a migração para o Bazel foi interrompida.
Considerando que uma equipe como a do AOSP poderia receber muita ajuda em uma migração para o Bazel, o fato de terem desistido da adoção parece mostrar muitas implicações importantes.
Provavelmente… seu software não precisa de Bazel.
kkk, a Earthly está fazendo propaganda da Earthly.
O bazel coloca a ênfase em builds rápidos e em
testesrápidos. Não se fala muito sobre testes aqui.