BT

Bazel: A ferramenta de build da Google se tornou open source

| por Sergio De Simone Seguir 12 Seguidores , traduzido por Wellington Soares Seguir 1 Seguidores em 29 jul 2015. Tempo estimado de leitura: 3 minutos |

Bazel, a ferramenta que a Google utiliza para realizar o build da maioria dos seus softwares, tem sido parcialmente liberado como open source. De acordo com a Google, a Bazel é destinado a realizar builds "de forma mais rápida e confiável. Sendo fundamental para a Google continuar escalando suas práticas de desenvolvimento de software no mesmo ritmo que a empresa cresce."

A Bazel é uma ferramenta que executa o compilador e os testes para construir seu software, similar ao Make, Ant, Gradle, Buck, Pants, and Maven. Possui suporte a diversas linguagens, como Java, Objective-C e C/C++; podendo ser estendida para suportar outras linguagens. Além disso, possui suporte a multiplataformas, a Google a utiliza para realizar desde build de aplicações que executam nos data centers, como também para as aplicações que executam dispositivos móveis.

Antes de desenvolver a Bazel, a Google construia seus softwares utilizando Makefiles. Sendo que estes Makefiles tendiam a ser extensos e levavam a processos builds lentos e pouco confiáveis, o que começou a interferir com a produtividade dos desenvolvedores e a agilidade da empresa. Além disso, em comparação aos Makefiles, a Bazel fornece diversos comandos de alto nível, como por exemplo exemplo: "Java test", "C++ binary", "C++ library", ou até mesmo definir que aquele artefato é de uma plataforma específica.

Este nível de abstração é fornecida pela linguagem BUILD, que é basicamente uma linguagem que descreve um projeto como um conjuntos de pequenas bibliotecas interligadas, arquivos binários e testes. Sendo um exemplo simples de arquivo BUILD:

package(default_visibility = [“//visibility:public”])

cc_library(
  name = "hello-lib",
  srcs = ["hello-lib.cc"],
  hdrs = ["hello-lib.h"],
)

cc_binary(
  name = "hello-world",
  srcs = ["hello-world.cc"],
  deps = [":hello-lib"],
)

cc_test(
  name = "hello-success_test",
  srcs = ["hello-world.cc"],
  deps = [":hello-lib"],
)

Entre outras vantanges que a Bazel fornece:

  • Escalabilidade: devido o fato que ela recompila apenas os arquivos que necessitam e por ser capaz de ignorar testes que não precisam ser executados naquele momento. Por exemplo, é comum para uma aplicação servidor que tem 100 mil arquivos de código fonte (sem alterações) e o processo de build durar apenas aproximadamente 200ms;
  • Facilidade em reproduzir os resultados: cada biblioteca, teste, e aplicação precisa especificar suas dependências completamente. E a Bazel utiliza esta informação para saber exatamente o que precisa realizar o build novamente quando há mudanças no código fonte, e quais tarefas podem ser executadas paralelamente. Isto resulta em builds incrementais e sempre irá produzir o mesmo resultado. Ou seja, não há diferença entre um build realizado na máquina do desenvolvedor e o build realizado no sistema de Integração Contínua.

Projetado para os próprios requisitos da Google, a Bazel é apresentada como sendo particularmente adequada para projetos que tenham qualquer uma das seguintes características: têm uma grande base de código compartilhado; suporte a múltiplas plataformas; utiliza várias linguagens de programação; tem um um extenso conjunto de testes.

Vale a pena notar que o Bazel não será desenvolvido totalmente como open source. A equipe da Google disse:

Temos uma grande quantidade de código da Bazel que não é open source; em termos de comandos alto nível, aproximadamente 10% são open source neste momento.

A política de aceitação de código é com base na aprovação do grupo principal de contribuidores que irão ativamente trabalhar no Bazel, enquanto que contribuidores externos não estão apoiando ativamente o projeto, mas apenas contribuindo com mudanças individuais.

Para mais informações sobre a Bazel, acesse a página de FAQ e poderá encontrar informações como:

  • O que tem de especial na Bazel?
  • Por que a Google não utiliza Make/Ninja, Ant/Maven, Pants/Buck, Gradle?
  • Como funciona o processo de desenvolvimento da Google com a Bazel?
  • O Docker já não resolve o problema de reproduzir o mesmo resultado nos builds?
  • A Bazel integra com IDEs como Eclipse/IntelliJ?
  • Como é a integração com os sistemas de Integração Contínua?
  • Quais as futuras funcionalidades previstas na Bazel?

A Bazel roda em sistemas operacionais Linux e no Mac OS X. Sendo que atualmente não é suportado no Windows e nem há planos para investir nisto agora.

Avalie esse artigo

Relevância
Estilo/Redação

Olá visitante

Você precisa cadastrar-se no InfoQ Brasil ou para enviar comentários. Há muitas vantagens em se cadastrar.

Obtenha o máximo da experiência do InfoQ Brasil.

Dê sua opinião

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão
Comentários da comunidade

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

HTML é permitido: a,b,br,blockquote,i,li,pre,u,ul,p

Receber mensagens dessa discussão

Dê sua opinião

Faça seu login para melhorar sua experiência com o InfoQ e ter acesso a funcionalidades exclusivas


Esqueci minha senha

Follow

Siga seus tópicos e editores favoritos

Acompanhe e seja notificados sobre as mais importantes novidades do mundo do desenvolvimento de software.

Like

Mais interação, mais personalização

Crie seu próprio feed de novidades escolhendo os tópicos e pessoas que você gostaria de acompanhar.

Notifications

Fique por dentro das novidades!

Configure as notificações e acompanhe as novidades relacionada a tópicos, conteúdos e pessoas de seu interesse

BT