A primeira resposta a um velho, ativo recentemente questão ligada a um vídeo que fala sobre como repositório Google é feito.
Uma coisa interessante mencionada é o fato de que tudo é construído a partir da fonte, sem depender de binários. Isso ajuda a evitar problemas com as dependências se tornando obsoletas, mas ainda sendo usadas em outros projetos, um problema que de fato encontrei bastante.
Como é tecnicamente possível? Se eu tentar a mesma coisa na minha empresa, mesmo considerando a enorme lacuna entre a escala da base de código da minha empresa e a escala da do Google, não seria possível por dois motivos:
O IDE (Visual Studio) ficará rapidamente sem resposta, uma vez que sofre muito até em pequenas soluções contendo, por exemplo, 50 projetos.
Qualquer análise estática seria analisada pelo tamanho de toda a base de código. Por exemplo, métricas de código ou verificação estática de contratos de código dificilmente seriam possíveis (contratos de código provavelmente levariam dias ou semanas).
Com a integração contínua, a compilação também levaria muito tempo e trituraria os servidores assim que um projeto com muitas dependências fosse modificado, exigindo que uma grande árvore de projetos fosse recompilada.
Como uma pequena empresa pode contornar esses problemas e ser capaz de:
Use o IDE sem ser afetado pelo mau desempenho,
Compile o código após cada confirmação sem compactar o servidor, mesmo quando as consequências de uma alteração exigirem que uma grande quantidade da base de código seja recompilada?
fonte
Respostas:
Você está assumindo um processo de criação tradicional, e o processo do Google é tudo menos tradicional. Há uma série de artigos no blog Ferramentas de engenharia que explicam seus processos com mais detalhes, elaborando a apresentação de 2010: Ferramentas para integração contínua na escala do Google :
Para resumir, eles usam um sistema de construção distribuído personalizado que permite um alto grau de paralelismo e automação, aproveitando ao máximo sua infraestrutura existente. Ele também depende muito do armazenamento em cache, com uma taxa de acerto geral de cache de 90%.
Mas como você pode aplicar tudo isso na sua empresa? A primeira etapa é distribuir a compilação e, para isso, você precisará:
Em um ambiente de desenvolvimento gcc, configurar um farm de compilação é relativamente fácil. O distcc cuida da distribuição e o ccache cuida do cache, e eles funcionam lindamente juntos. Não conheço nenhuma ferramenta semelhante para o ecossistema da Microsoft (suponho que você esteja usando uma linguagem da Microsoft com base na sua escolha de IDE), mas sei que o MSBuild pode executar compilações em paralelo , aproveitando as CPUs com vários núcleos . Não é realmente uma fazenda compilada, mas certamente um passo na direção certa.
fonte
Dito isso, eu seria cauteloso em "construção just-in-time", a menos que o código que está sendo implantado em toda a empresa tenha sido verificado como parte de um (mais ou menos) ciclo formal de lançamento e não seja apenas um acaso Construção noturna. H
Ter 5000 desenvolvedores acessando 2000 projetos que estão todos em um estado contínuo de fluxo soa como uma receita para um desastre, e o Google contrata pessoas muito inteligentes, por isso tenho certeza de que não é isso que está realmente acontecendo.
fonte