Qualquer desenvolvedor de software pode criar, testar e empacotar qualquer projeto, de qualquer tamanho ou complexidade, com ferramentas fáceis de adotar e se estendem.
Os engenheiros podem considerar os princípios básicos do build como sempre. Desenvolvedores de software focam no processo criativo de autoria do código, porque a mecânica o processo de criação e teste seja resolvido. Ao personalizar o sistema de build para suporte a novos idiomas ou necessidades organizacionais únicas, os usuários se concentram no aspectos de extensibilidade exclusivos do caso de uso, sem a necessidade para reinventar a estrutura básica.
Engenheiros podem contribuir facilmente para qualquer projeto. Um desenvolvedor que quer começar a trabalhar em um novo projeto pode simplesmente clonar o projeto e executar o ser construído. Não é preciso fazer configurações locais, ele simplesmente funciona. Com execução remota entre plataformas, elas podem funcionar em qualquer máquina, em qualquer lugar, e testar totalmente suas alterações em todas as plataformas para as quais o projeto visa. Os engenheiros podem configurar rapidamente o build para um novo projeto ou de forma incremental migrar um build atual.
Os projetos podem ser escalonados para qualquer tamanho de base de código e equipe. Rápido, o teste incremental permite que as equipes validem totalmente cada mudança antes que ela seja comprometido. Isso continua sendo válido mesmo à medida que os repositórios crescem e os projetos abrangem vários repositórios e vários idiomas são introduzidos. A infraestrutura não força desenvolvedores a trocar a cobertura de teste pela velocidade do build.
Acreditamos que o Bazel tem o potencial de alcançar essa visão.
O Bazel foi criado do zero para possibilitar builds reproduzíveis (uma um determinado conjunto de entradas sempre produzirá as mesmas saídas) e portátil (um build podem ser executados em qualquer máquina sem afetar o resultado.
Essas características dão suporte à incrementabilidade segura (a reconstrução só mudou entradas não introduz o risco de corrupção) e distributibilidade (base ações são isoladas e podem ser descarregadas). Minimizando o trabalho necessário um build correto e paralelizando esse trabalho em vários núcleos e o Bazel pode agilizar qualquer build.
Camada de abstração do Bazel: instruções específicas para linguagens, plataformas e de ferramentas implementados em uma linguagem simples de extensibilidade — permite que ele seja pode ser facilmente aplicado a qualquer contexto.
Competências principais do Bazel
- O Bazel oferece suporte a builds e testes em várias linguagens e plataformas. Você pode executar um único comando para criar e testar toda a árvore de origem, não importa a combinação de idiomas e plataformas que você quer segmentar.
- As builds do Bazel são rápidas e corretas. Cada build e teste é incremental, em relação às necessidades e em CI.
- O Bazel fornece uma linguagem uniforme e extensível para definir builds para qualquer linguagem ou plataforma do usuário.
- O Bazel permite que suas compilações sejam escalonadas conectando-se à execução remota e e serviços de armazenamento em cache.
- O Bazel funciona em todas as principais plataformas de desenvolvimento (Linux, MacOS e Windows).
- Aceitamos que adotar o Bazel exige esforço, mas a adoção gradual é sempre que possível. Interfaces do Bazel com ferramentas padrão na prática para um determinado idioma/plataforma.
Atendimento a comunidades linguísticas
A engenharia de software evolui no contexto das comunidades linguísticas — normalmente, grupos auto-organizados de pessoas que usam ferramentas e práticas comuns.
Para serem usadas pelos membros de uma comunidade linguística, as regras do Bazel de alta qualidade precisam ser disponíveis que se integram aos fluxos de trabalho e convenções dessa comunidade.
O Bazel está comprometido em ser extensível e aberto e oferecer suporte a bons conjuntos de regras para em qualquer idioma.
Requisitos de um bom conjunto de regras
- As regras precisam oferecer suporte à criação e teste eficientes do incluindo a cobertura de código.
- As regras precisam interagir com um "gerenciador de pacotes" amplamente utilizado para linguagem de programação (como Maven para Java) e suporte a caminhos de migração incremental de outros sistemas de build muito usados.
- As regras precisam ser extensíveis e interoperáveis, seguindo "Sanduíche de bazel" princípios da segurança.
- As regras precisam estar prontas para execução remota. Na prática, isso significa configurável usando o mecanismo de conjuntos de ferramentas.
- As regras (e o Bazel) precisam interagir com um ambiente de desenvolvimento integrado amplamente utilizado para idioma, se houver.
- As regras precisam ter uma documentação completa e utilizável com instruções material para novos usuários, documentos abrangentes para usuários experientes.
Cada um desses itens é essencial e, juntos, eles fazem entregas competências para esse ecossistema específico.
Em geral, elas também são suficientes. Quando todas forem atendidas, o Bazel agrega valor aos membros dessa comunidade linguística.