Um sistema de compilação é uma das partes mais importantes de uma organização de engenharia, porque cada desenvolvedor interage com ele dezenas ou centenas de vezes por dia. Um sistema de compilação completo é necessário para permitir a produtividade do desenvolvedor à medida que a organização escalona. Para desenvolvedores individuais, é simplesmente compilar seu código. Portanto, um sistema de compilação pode parecer excesso. No entanto, em grande escala, um sistema de compilação ajuda a gerenciar as dependências compartilhadas, como depender de outra parte da base de código, ou de um recurso externo, como uma biblioteca. Os sistemas de compilação ajudam a garantir que você tenha tudo o que precisa para criar seu código antes que ele comece a ser criado. Os sistemas de compilação também aumentam a velocidade quando são configurados para ajudar os engenheiros a compartilhar recursos e resultados.
Esta seção aborda alguns históricos e noções básicas de criação e de sistemas de compilação, incluindo decisões de design que foram usadas para criar o Bazel. Se você tiver familiaridade com sistemas de compilação baseados em artefatos, como Bazel, Buck e Pants, poderá pular esta seção, mas é uma visão geral útil para entender por que os sistemas de compilação baseados em artefatos são excelentes para ativar a escala.
Por que um sistema de compilação?
Se você nunca usou um sistema de compilação, comece por aqui. Esta página explica por que você deve usar um sistema de compilação e por que os compiladores e scripts de compilação não são a melhor escolha quando sua organização começa a escalonar além de alguns desenvolvedores.
Sistemas de compilação baseados em tarefas
Esta página discute sistemas de compilação baseados em tarefas (como Make, Maven e Gradle) e alguns dos desafios.
Sistemas de compilação baseados em artefatos
Esta página discute sistemas de compilação com base em artefatos em resposta aos problemas dos sistemas de compilação baseados em tarefas.
-
Nesta página, abordamos builds distribuídos ou executados fora da máquina local. Isso requer uma infraestrutura mais robusta para compartilhar recursos e criar resultados (e é onde a verdadeira ferramenta fica!)
-
Esta página aborda algumas complicações de dependências em grande escala e estratégias para combater essas complicações.