A equipe de infraestrutura do .NET investe em consistência para acelerar a inovação de software livre
Veja como as ferramentas compartilhadas e um único sistema de CI compartilhado nos repositórios do GitHub oferecem enormes ganhos na produtividade do desenvolvedor.
O desafio: Simplificar a colaboração para colaboradores de software livre
Como uma organização independente criada para fomentar a inovação por meio do desenvolvimento aberto e da colaboração, a .NET Foundation oferece suporte a um grande e complexo conjunto de projetos de código aberto, incluindo .NET Core. A equipe de Serviços de Engenharia do Microsoft .NET contribui para o projeto e é responsável por grande parte da infraestrutura que possibilita aos colaboradores de todo o mundo trabalharem juntos.
Com dezenas de repositórios git diferentes no GitHub, uma ampla variedade de ferramentas e vários sistemas distintos de CI (integração contínua) em uso no projeto, houve muita confusão que inibiu a produtividade. A escala completa do projeto aumentou a complexidade. Por exemplo, o repositório Roslyn (compilador C#) sozinho executa mais de 600,000 testes automatizados para uma iteração de uma solicitação pull. Com mais de 50 solicitações de pull por semana, cada uma com várias iterações, o número de testes de CI está na casa dos bilhões. Para CoreFx (bibliotecas), os números são ainda maiores. Conforme a equipe de Serviços de Engenharia do .NET planejava-se para o lançamento do .NET Core 3.0, ela decidiu fazer grandes mudanças para estabelecer maior consistência e possibilitar que os colaboradores aproveitassem todo o potencial do projeto.
O desafio: adaptação a um modelo operacional de nuvem
"Uma estrutura e ferramentas de repositório distribuídas tornam muito mais difícil para os desenvolvedores passarem de um repositório para outro … E se é tão difícil para os desenvolvedores da Microsoft, como podemos esperar que a maioria dos contribuidores individuais descubram isso?"
Matt Mitchell, engenheiro de software principal, Serviços de Engenharia do .NET
Melhorar a produtividade por meio de ferramentas compartilhadas e um único sistema de CI
Para facilitar a movimentação dos desenvolvedores entre diferentes partes da pilha de software, a equipe de Serviços de Engenharia do .NET trabalhou para incluir todos os repositórios em uma estrutura de diretório comum, um conjunto de comandos e uma lógica de criação e teste. A equipe eliminou mais barreiras à produtividade movendo todos os fluxos de trabalho existentes dos diferentes sistemas de CI para um único sistema em Azure Pipelines. Como o sistema é totalmente gerenciado, não há mais o custo indireto de gerenciar a infraestrutura do servidor de CI. A equipe agora está praticando a configuração como código por meio de arquivos YAML armazenados no GitHub e os pipelines YAML são usados em todos os lugares. Enquanto os repositórios faziam anteriormente a CI de forma serial, exigindo que os desenvolvedores esperassem duas ou três horas entre as iterações no código, todos os pipelines de CI agora estão paralelizados para permitir iterações mais rápidas.
O desafio: adaptação a um modelo operacional de nuvem
"Agora que não precisamos mais nos preocupar com os aspectos operacionais da CI, estamos livres para focar em outras melhorias que serão sentidas por todos—incluindo desenvolvedores da Microsoft e colaboradores individuais."
Matt Mitchell, engenheiro de software principal, Serviços de Engenharia do .NET
Melhor colaboração gera um produto melhor
Agora os desenvolvedores podem facilmente mover de um repositório para outro, rastrear a causa raiz de um bug e propor e testar correções – tudo isso sem precisar ter o conhecimento especializado que era necessário no passado. Essa colaboração simplificada de software livre no GitHub permite que os desenvolvedores inovem de forma mais rápida conforme trabalham juntos para gravar, testar, criar e fornecer software de alta qualidade. Como a equipe de Serviços de Engenharia do .NET pode fazer alterações na infraestrutura em toda a pilha, ela oferece melhorias nas ferramentas que os desenvolvedores podem utilizar em todos os repositórios com muito mais rapidez e eficiência.