Zespół ds. infrastruktury .NET inwestuje w spójność w celu przyspieszenia tempa wprowadzania innowacji w oprogramowaniu typu open-source
Obejrzyj, jak udostępnione narzędzia i pojedynczy współużytkowany system ciągłej integracji działający w repozytoriach GitHub mogą zwiększyć wydajność deweloperów.
Przeczytaj całą historięWyzwanie: Usprawnianie współpracy między współautorami oprogramowania typu open-source
Jako niezależna organizacja utworzona w celu wspierania innowacji poprzez otwarte programowanie i współpracę, .NET Foundation wspiera duży i złożony zestaw projektów typu open source, w tym .NET Core. Zespół ds. usług inżynieryjnych platformy .NET w firmie Microsoft współtworzy projekt i jest odpowiedzialny za znaczną część infrastruktury, która umożliwia współpracę współautorom z całego świata.
Istnienie dziesiątek różnych repozytoriów Git w usłudze GitHub, szerokiego zakresu narzędzi i kilku różnych systemów ciągłej integracji (CI) używanych na przestrzeni całego projektu, powodowało wiele zamieszania, które hamowało produktywność. Dodatkowo sama skala projektu zwiększała jego złożoność. Na przykład samo repozytorium Roslyn (kompilator języka C#) uruchamia ponad 600 tys. testów automatycznych dla jednej iteracji żądania ściągnięcia. W przypadku ponad 50 żądań ściągnięcia na tydzień, każde z wieloma iteracjami, liczba testów ciągłej integracji jest liczona w miliardach. W przypadku CoreFx (bibliotek) wartości są jeszcze wyższe. Ponieważ zespół ds. usług inżynieryjnych platformy .NET zaplanował wydanie platformy .NET Core 3.0, zdecydowano się wprowadzić duże zmiany, aby zapewnić większą spójność i umożliwić współautorom pełne wykorzystanie potencjału projektu.

"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, główny inżynier ds. oprogramowania w usługach inżynieryjnych platformy .NET
Zwiększanie produktywności za pomocą współdzielonych narzędzi i pojedynczego systemu ciągłej integracji
Aby ułatwić deweloperom przechodzenie między różnymi fragmentami stosu oprogramowania, zespół ds. usług inżynieryjnych platformy .NET pracował nad doprowadzeniem wszystkich repozytoriów do wspólnej struktury katalogów, zestawu poleceń oraz logiki kompilacji i testowania. Zespół wyeliminował kolejnych barier w produktywności, przenosząc wszystkie istniejące przepływy pracy z różnych systemów ciągłej integracji do jednego systemu w ofercie Azure Pipelines. Ponieważ system jest w pełni zarządzany, nie ma już obowiązku zarządzania infrastrukturą serwera ciągłej integracji. Zespół praktykuje teraz konfigurację w postaci kodu za pośrednictwem plików YAML, przechowywanych w usłudze GitHub, a potoki YAML są używane wszędzie. Podczas gdy niektóre repozytoria wykonywały wcześniej ciągłą integrację szeregowo – wymagając od deweloperów oczekiwania czasami dwóch lub trzech godzin między iteracjami w kodzie – wszystkie potoki ciągłej integracji są teraz równoległe, aby umożliwić szybsze iteracje.
"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, główny inżynier ds. oprogramowania w usługach inżynieryjnych platformy .NET
Ściślejsza współpraca prowadzi do opracowania lepszego produktu
Obecnie deweloperzy mogą łatwiej przenosić się z między repozytoriami, śledzić główne przyczyny usterek oraz proponować i testować poprawki. Jednocześnie nie jest do tego wymagana głębsza wiedza specjalistyczna niż ta, jaka była wymagana wcześniej. Taka usprawniona współpraca w witrynie GitHub umożliwia deweloperom szybsze wprowadzanie innowacji, ponieważ pracują oni razem nad pisaniem, testowaniem, kompilowaniem i przesyłaniem wysokiej jakości oprogramowania. A ponieważ członkowie zespołu ds. usług inżynieryjnych platformy .NET mogą dokonywać zmian infrastruktury przy pełnym stosie, są oni w stanie o wiele szybciej i wydajniej dostarczać ulepszone narzędzia, z których mogą korzystać deweloperzy we wszystkich repozytoriach.