Noções básicas de criação

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.

  • Builds distribuídos

    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!)

  • Gerenciamento de dependências

    Esta página aborda algumas complicações de dependências em grande escala e estratégias para combater essas complicações.