Visual Studio Code mit Azure Pipelines
12. September 2018 João Moreno, @joaomoreno
Eine meiner Aufgaben als Entwickler im Visual Studio Code-Team ist die Wartung und Verbesserung unserer Build- und Continuous-Integration (CI)-Infrastruktur. Angesichts der neuesten Feature-Ankündigungen von Azure Pipelines hat das Visual Studio Code-Team drastisch verändert, wie wir Microsoft-Technologien nutzen, um eine bessere Kollaborationsplattform sowohl für unsere Entwickler als auch für unsere Benutzer bereitzustellen. In diesem Blogbeitrag führe ich Sie durch einen Teil der Geschichte von Visual Studio Code, konzentriere mich auf unsere CI-Prozesse und -Tools und wie sie sich im Laufe der Zeit verändert haben.
Visual Studio Code Engineering
Wie jedes andere Open-Source-Projekt benötigen wir die richtigen Werkzeuge und Fähigkeiten, um so viele Codebeiträge wie möglich zu empfangen, zu sichten und zu bearbeiten. Dies gilt insbesondere für das Universum der Entwicklerwerkzeuge, in dem die Benutzer selbst Entwickler sind: Sie sind eine leidenschaftliche, hart arbeitende und sehr effektive Gruppe. Zum Zeitpunkt dieses Blogbeitrags haben wir 148 offene PRs sowie 3.482 geschlossene, was angesichts der bisherigen Lebensdauer des Projekts von 3 Jahren einem Durchschnitt von ~3 PRs/Tag entspricht. Es ist wichtig, dass wir gut gerüstet sind, um diese Größenordnung von Beiträgen zu bewältigen, nicht nur um die Projektentwicklung gesund zu halten, sondern auch um anderen Open-Source-Projekten ein Beispiel dafür zu geben, wie sie in diesem Umfang arbeiten können. Ein Teil davon ist die Straffung unseres Workflows, indem die PR-Erfahrung in den Editor integriert wird, aber CI ist der andere wichtige Teil der Bewältigung von Beiträgen in großem Maßstab.
Bis vor kurzem verließen wir uns bei der öffentlichen Continuous Integration auf die Standardwahl der OSS-Community: Travis CI für unsere Linux- und macOS-Builds und AppVeyor für Windows. Zusätzlich nutzten wir Coveralls, um detaillierte Testabdeckungsberichte bereitzustellen. Diese Dienste liefern qualitativ hochwertige Berichte für PRs und Codezweige in unserem öffentlichen Repository, da sie Kompilierungen automatisieren, Code-Hygiene-Prüfungen durchführen und mehrere Testabläufe ausführen, was für die Aufrechterhaltung der Qualität in einem verteilten Team mit vielen eingehenden Beiträgen unerlässlich ist. Diese Kombination von Diensten erfordert das Verständnis und die Wartung von mindestens 3 verschiedenen Systemen, jedes mit seinen eigenen speziellen Dateiformaten, Syntaxen, Eigenheiten, Einschränkungen usw.
Übernahme von Azure Pipelines
Anfang dieses Jahres wurden wir vom Azure Pipelines (damals Visual Studio Team Services)-Team kontaktiert, um etwas Neues auszuprobieren. Diese Ankündigung markiert unseren Umstieg auf eine stärker integrierte Continuous-Integration-Lösung. Unsere Builds laufen jetzt gleichzeitig auf allen Plattformen, schauen Sie sich das an

Es gab viele coole Dinge, die passieren mussten, damit wir den Umstieg schaffen. Lassen Sie es uns aufschlüsseln
- Die Unterstützung für öffentliche Projekte durch Azure Pipelines ermöglicht es uns, ein öffentlich zugängliches Visual Studio Code-Projekt zu betreiben, in dem alle unsere Continuous-Integration-Builds laufen;
- Build-Agents in Azure Pipelines unterstützen seit langem die Matrix der Plattformen Windows, macOS und Linux;
- Microsoft-gehostete Agents in Azure Pipelines, die macOS, Linux und Windows ausführen, bieten einen großartigen Software-Stack zum Erstellen von Projekten, ohne sich um die Wartung von Build-Maschinen kümmern zu müssen;
- YAML CI ermöglicht die Erstellung von YAML-Definitionen, die nah an den Projektquellen gehalten werden (für die Visual Studio Code großartige Erweiterungen bietet).
Wenn wir all dies zusammenfügen, können wir uns endlich auf eine einzige CI-Lösung konzentrieren. Der Visual Studio Code-Build auf Azure Pipelines führt unsere Kompilierung, Hygiene-Prüfungen und Test-Suiten in einem einzigen Build aus und verteilt den Build automatisch auf verschiedene Plattformen. Da wir von Microsoft gehostete Build-Agents verwenden, müssen wir uns nicht um die Wartung dieser Maschinen kümmern.
Integrationen von Drittanbietern
Azure Pipelines bietet auch eine GitHub-Integration, die uns Build-Ergebnisindikatoren auf unserer GitHub-Projektseite liefert, insbesondere bei Pull Requests.

Wir haben auch einen Chatbot entwickelt, der sich mit der REST-API von Azure Pipeline verbindet und Benachrichtigungen in unserem internen Chat sendet, wenn Builds fehlschlagen.

Weiterführend
Meine nächste Aufgabe wird es sein, Code-Coverage-Berichte zu nutzen, um einen besseren End-to-End-CI-Flow zu erhalten, als wir ihn mit der bisherigen Tool-Kombination hatten.
Der Umstieg auf Azure Pipelines hat sich für uns als großer Erfolg erwiesen. Die allgemeine Codequalität ist jetzt leichter nachvollziehbar, da die Builds nicht mehr über verschiedene Systeme verstreut sind. Wir haben auch die Anzahl und das Format unserer Build-Definitionsdateien konsolidiert. Wir sind sehr zufrieden mit der Umstellung und gespannt, was die Zukunft für Azure Pipelines bringt.
Wenn Sie mehr über öffentliche Projekte und Azure Pipelines erfahren möchten, werfen Sie einen Blick auf deren Blogbeitrag.
Möchten Sie Visual Studio Code ausprobieren? Laden Sie es jetzt herunter für Ihre bevorzugte Plattform. Und wenn Sie wie wir immer das Neueste und Beste ausführen möchten, dann holen Sie sich unsere täglich erstellte Insider-Version. Möchten Sie einfach Kontakt aufnehmen oder in Verbindung bleiben? Folgen Sie uns @code auf Twitter.
Im Namen des VS Code-Teams: Happy Coding!
João Moreno, @joaomoreno