Il team che si occupa dell'infrastruttura .NET investe in coerenza per accelerare l'innovazione open source

Scopri come gli strumenti condivisi e un unico sistema di integrazione continua condiviso tra i repository di GitHub consentono un notevole miglioramento della produttività degli sviluppatori.

La sfida: Semplificare la collaborazione per i collaboratori open source

.NET Foundation, un'organizzazione indipendente creata per favorire l'innovazione tramite collaborazione e sviluppo open source, supporta un ampio e complesso set di progetti open source, tra cui .NET Core. Il team Microsoft .NET Engineering Services contribuisce al progetto ed è responsabile di gran parte dell'infrastruttura che consente ai collaboratori di tutto il mondo di lavorare insieme.

Con decine di repository Git diversi in GitHub, un'ampia gamma di strumenti e numerosi sistemi di integrazione continua in uso nel progetto, si era creata molta confusione che ostacolava la produttività. Le vaste dimensioni del progetto hanno reso tutto ancora più complesso. Ad esempio, il repository Roslyn (compilatore C#) esegue, da solo, oltre 600.000 test automatizzati per un'iterazione di una richiesta pull. Con oltre 50 richieste pull a settimana, ognuna con più iterazioni, il numero di test di integrazione continua è nell'ordine di grandezza di miliardi. Per CoreFx (librerie), le cifre sono ancora più alte. Durante la pianificazione del rilascio di .NET Core 3.0, il team .NET Engineering Services ha deciso di apportare importanti modifiche per garantire una maggiore coerenza e consentire ai collaboratori di sfruttare appieno il potenziale del progetto.

"A distributed repo structure and tooling makes it a lot harder for developers to move from one repo to another … And if it's this hard on Microsoft developers, how can we expect most individual contributors to figure it out?"

Matt Mitchell, Principal Software Engineer, .NET Engineering Services

Miglioramento della produttività tramite strumenti condivisi e un unico sistema di integrazione continua

Per permettere agli sviluppatori di spostarsi più facilmente tra parti diverse dello stack software, il team .NET Engineering Services ha lavorato per riunire tutti i repository in un'unica struttura di directory, con un set di comandi e logica di compilazione e test comuni. Il team ha eliminato ulteriormente gli ostacoli alla produttività spostando tutti i flussi di lavoro esistenti dai diversi sistemi di integrazione continua in un unico sistema in Azure Pipelines. Poiché il sistema è completamente gestito, viene eliminato il carico di gestione dell'infrastruttura del server di integrazione continua. Il team si sta ora concentrando sulla configurazione come codice tramite file YAML archiviati in GitHub e le pipeline YAML vengono usate ovunque. Mentre in precedenza l'integrazione continua in alcuni repository avveniva in modo seriale, richiedendo talvolta agli sviluppatori attese di due o tre ore tra le iterazioni nel codice, adesso tutte le pipeline di integrazione continua avvengono in parallelo, per consentire iterazioni più rapide.

"Now that we longer need to worry about the operational aspects of CI, we're free to focus on further improvements that will be felt by all—including Microsoft developers and individual contributors alike."

Matt Mitchell, Principal Software Engineer, .NET Engineering Services

Da una collaborazione migliore nasce un prodotto migliore

Oggi gli sviluppatori possono passare da un repository a un altro, risalire alla causa radice di un bug e proporre e testare una correzione più facilmente, il tutto senza necessità di un livello di conoscenze specialistiche elevato come in passato. La collaborazione open source semplificata in GitHub consente agli sviluppatori di innovare più rapidamente mentre lavorano insieme a scrittura, test, compilazione e distribuzione di software di alto livello. Grazie alla possibilità di modificare l'infrastruttura per l'intero stack, inoltre, il team .NET Engineering Services può fornire miglioramenti per gli strumenti che gli sviluppatori possono sfruttare in tutti i repository in modo molto più rapido ed efficace.

Esamina più da vicino il percorso dei team e il processo decisionale.

Leggi la storia completa