Wenn Mitarbeiter im Home-Office sitzen, müssen diese auch weiterhin effizient arbeiten können. Doch in manchen Unternehmen zeigen sich erhebliche Probleme und Schwächen im Bereich der Infrastruktur auf, wenn gesamte Entwicklungsteams und -abteilungen remote auf die Entwicklungsumgebung zugreifen sollen.
Einerseits ist die Bandbreite beschränkt und andererseits haben die VPN-Server nicht die entsprechenden Kapazitäten für so viele Nutzer. Bei Infrastrukturschwächen können wir wenig ausrichten und häufig ist Geduld gefragt… PAL – Probleme anderer Leute [1].
Aber es gibt einen “Workaround”, den es sich lohnt anzuschauen: Denn Abhilfe kann die Nutzung eines Cloud Services schaffen, um einem Entwicklungsteam oder ganzen Abteilungen kurz- und langfristig eine sichere und ausgewachsene Entwicklungsplattform wie Azure DevOps Services bereitzustellen.
Doch was ist Azure DevOps? Ab wann werden Kosten fällig? Und wie migriere ich meine Projekte?
Azure DevOps Services in a nutshell
Am 10. September 2018 hat Microsoft Visual Studio Team Services (VSTS; aka TFS in der Cloud) in Azure DevOps Services umbenannt, und wenige Monate später auch die neuste Version des Team Foundation Server (TFS) unter dem Namen Azure DevOps Server 2019 veröffentlicht [2]. Außer dem Branding wurde vor allem das Look’n’Feel auf Azure angepasst.
Im Großen und Ganzen bietet Azure DevOps Services in einer Cloud Plattform all das was ein Entwicklerherz begehrt:
- Aufgabenverwaltung mit Unterstützung von Scrum und Kanban
- Codeverwaltung in Git und TFVC Repositories, inkl. Unterstützung aller gängigen IDEs
- Code Reviews und Pull Requests
- Build- und Releasepipelines
- Testmanagement: Manuell und automatisiert
Aber auch für alle an der Entwicklung Beteiligten (Projektleiter, Product Owner, Administratoren, Stakeholder, …) gibt es nützliche Funktionen:
- Dashboards und Abfragen zum Überblick über ein oder mehrere Projekte
- Benachrichtigungen bei Statusänderungen und Ereignissen
- Nachverfolgbarkeit von der Aufgabe zu Codeänderung bis hin zum Build und Release
- Zentrale Administration und Anbindung an Azure Active Directory
- Anbindung und Nutzung der eigenen Infrastruktur (insb. Agents)
- Leichtgewichtige Einbindung externer Entwickler
- Vollständige Audit-Fähigkeit
- Verfügbarkeit von 99,9% und Datenschutzeinhaltung (insb. DSGVO) [3]
Abbildung 1: Azure DevOps Services Features
Hinweise:
- Azure DevOps Services sind aktuell nur auf Englisch verfügbar
- XAML Builds werden nicht unterstützt
Was ist in Azure DevOps (kostenlos) enthalten?
Generell kann jeder kostenfrei eine Organisation (gleichzusetzen mit einer Collection in TFS) erstellen und nutzen. Für kleinere Entwicklungsteams ist dies schon vollkommen ausreichend, um arbeitsfähig zu sein. Folgendes können Sie kostenfrei nutzen [5]:
- Mit den 5 Basic Lizenzen können Entwickler Aufgaben bearbeiten, Repositories erstellen, auf Code zugreifen und Build und Release Pipelines anlegen und ausführen.
- Weitere Nutzer können kostenlos als Stakeholder zugreifen und haben einen begrenzten Funktionsumfang in Azure DevOps Services, bspw. erstellen und bearbeiten von Aufgaben [4].
- Eine Microsoft-hosted Pipeline mit 1800 Minuten (30h) für Builds und Releases.
Hinweis: Nur ein Job kann parallel auf der Microsoft-hosted Pipeline ausgeführt werden - Eine Self-hosted Pipeline mit unbegrenzter Laufzeit. Hier können die eigenen Agents weiterverwendet werden.
Hinweis: Nur ein Job kann parallel auf der Self-hosted Pipeline ausgeführt werden - 2 GB Speicherplatz für Azure Artifacts, aber es können natürlich auch eigene Paketmanager eingebunden werden.
- Unbegrenzter Speicherplatz in den Repositories (Git und TFVC).
- Kostenfreie Extensions für Azure DevOps auf dem Visual Studio Marketplace
Weitere Vorteile
Wenn Sie bereits Visual Studio Subscriptions besitzen bzw. eine Open Source Projekt haben, können Sie sich über folgende weitere Vorteile freuen:
- Eigene oder externe Mitarbeiter mit zugewiesenen Visual Studio Subscriptions (eine Übersicht über alle Subscriptions und Vorteile finden Sie unter [6]):
- Mit einer Visual Studio Professional Subscription erhält der Mitarbeiter eine Basic Lizenz; mit einer Visual Studio Enterprise Subscription eine Basic + Test Plans Lizenz.
- Pro Visual Studio Subscription erhalten Sie eine weitere Self-hosted Pipeline und damit können Sie Builds und Releases auf Self-hosted Pipelines parallel ausführen.
- Open Source Projekte erhalten zudem 10 freie unbegrenzte Pipelines (= 10 parallele Builds und Releases ohne Zeitbeschränkung) [7].
Wo entstehen Kosten?
- Weitere Lizenzen
- Basic Lizenzen für ~5 € Mitarbeiter/Monat
- Basic + Test Plans Lizenzen für Nutzung des Test Hubs für ~44 € Mitarbeiter/Monat
- Weitere Pipelines (für parallele Builds und Releases)
- Microsoft-hosted für ~34 € Pipeline/Monat
Hinweis: Die erste bezahlte Microsoft-hosted Pipeline entfernt die Beschränkung auf 1800 Minuten, erst ab der zweiten Pipeline sind parallele Jobs möglich - Self-hosted für ~12,50 € Pipeline/Monat
- Microsoft-hosted für ~34 € Pipeline/Monat
- Azure Artifacts über 2 GB Speicherplatz ab €1,69 per GB/Monat (Preise sinken mit höheren Volumen)
- Nicht-kostenfreie Extensions für Azure DevOps auf dem Visual Studio Marketplace (Kosten je nach Extension)
(siehe auch Azure DevOps Pricing)
Abbildung 2: Azure DevOps Services Pricing (Quelle: https://azure.microsoft.com/en-us/pricing/details/devops/azure-devops-services/)
Wie migriere ich mein Projekt nach Azure DevOps Services?
Generell sollten Sie sich die Frage stellen, was Sie in Azure DevOps benötigen und wie schnell Sie sich und Ihr Team arbeitsfähig machen wollen. Gerne nutzen unsere Kunden diesen Moment, um alte Zöpfe abzuschneiden.
Unter Option 1 werden verschiedene Wege beschrieben, wie Sie Ihr Projekt schnell in die Cloud migrieren können; Option 2 zeigt Ihnen dahingegen den Migrationsweg einer kompletten Collection mit allen Daten auf.
Option 1: Quick and easy (and maybe a bit lossy)
Vorteile
- Schnelle und leichtgewichtige Migration
- Teams können nacheinander migriert werden
- Altlasten werden nicht migriert; Chancen für neue Wege
- Auch möglich von älteren TFS Versionen oder aus anderen Systemen
Nachteile
- Es wird nicht alles migriert
- Nacharbeit erforderlich. Teams, Einstellungen und Berechtigungen werden nicht migriert
- u.a. Dashboards, Berechtigungen, Agent Pools (erstellen und Agents einbinden), Pipelines
Vorbedingungen
- Anlegen einer Azure DevOps Organisation
- (optional) AAD einbinden
Hinweis: Zur Sicherheit und Zugriffskontrolle empfehlen wir ausdrücklich die Nutzung des AADs
Aufgaben (Work Items)
Falls Sie bereits Aufgaben in TFS, Azure DevOps 2019 oder einem anderen System angelegt haben, können Sie folgendermaßen Vorgehen:
- Excel Bulk Bearbeitung zum Ex- und Import von Work Items
- Leichtgewichtig und sehr schnell
- Ermöglicht den Import aus anderen Systemen
- History, Bilder in Beschreibungen, Attachments und ggf. Formatierungen gehen verloren
- Aufgaben können nur mit dem Status “New” importiert werden
- Kenntnisse von Azure DevOps Queries und dem (hierarchischen) Aufbau der Work Items erforderlich
- Azure DevOps Migration Tools zur Migration von Work Items aus TFS / Azure DevOps
- Erlaubt originalgetreue Migration (inkl. Work Item History und Attachments)
- Erlaubt Migration von Test Plans, Suites und Cases und Work Item Queries
- Legt Verknüpfungen zw. Work Items und Git Commits an (ebenfalls möglich bei einer Migration von TFVC zu Git)
- Einarbeitung in Tooling notwendig, insb. für das Mapping zw. den Quell- und Zielsystem zu erstellen
- Azure DevOps Services CLI und Azure DevOps Services REST API zum Anlegen von Work Items
- Automatisiertes Anlegen von Work Items
- Beliebige Migrationsquelle, sofern maschinell auslesbar (u.a. Tabellen, TFS / Azure DevOps oder anderen Aufgabenverwaltungstools)
- Benötigt Programmierkenntnisse, um die Migrationsquelle auszulesen und CLI / REST API anzusprechen
Repositories
Wenn Sie Ihr Repository bereits in der Cloud gehostet haben (bspw. GitHub oder Subversion), können Sie auf dieses direkt über die Azure DevOps Pipelines zugreifen und eine Migration ist nicht notwendig [8].
- Wenn Sie bereits auf Git arbeiten können Sie Ihr Repository mit wenigen Schritten importieren.
- Dahingegen gestaltet sich die Migration von TFVC Repositories zumeist anspruchsvoller bzw. müssen Nachteile in Kauf genommen werden:
- Legen Sie ein neues Git Repository an (falls noch nicht vorhanden). Danach kopieren Sie Ihr komplettes TFVC Repository oder einzelne Projekte in das neue Repository.
Achtung: Sie verlieren die gesamte History. Branches müssen per Hand neu erstellt werden. - Migrieren Sie Ihr TFVC Repository nach Git über den TFS / Azure DevOps Web Access oder über Kommandozeile.
Achtung: Aufgrund der Unterschiede zw. TFVC und Git wird eine Migration der History generell nicht geraten. Weiterhin werden ggf. Entwicklerschulungen für Git notwendig. - Eine TFVC Migration inkl. History ist nur über teils kostenpflichtiger Tools möglich (z.B. Timely Migration oder TFS Integration Platform). Neben den anfallenden Kosten entsteht ein hoher Einarbeitungsaufwand in das Tooling, um die Konfiguration und die Mappings für die Migration zu erstellen und testen.
- Legen Sie ein neues Git Repository an (falls noch nicht vorhanden). Danach kopieren Sie Ihr komplettes TFVC Repository oder einzelne Projekte in das neue Repository.
Build und Releases
Agent Pools und Agents
Vor der Migration der Pipelines sollten die Agent Pools und Agents wieder eingebunden werden (hybride DevOps Infrastruktur), bzw. über die Verwendung von Agents in der Cloud nachgedacht werden.
Häufig kann die vorhandene Build und Release Infrastruktur ohne zusätzliche Kosten und großen Konfigurationsaufwand in die Cloud eingebunden werden. Probleme können einerseits bei einem abgeschotteten Firmennetzwerk auftreten, wenn der Zugriff der Agents auf die Azure DevOps Cloud unterbunden ist. Andererseits kann eine bereits ausgelastete Firmeninfrastruktur durch die Kommunikation zwischen Azure DevOps Services mit On-Premise Agents weiter belastet werden, so dass die erhofften Migrationsvorteile nicht realisiert werden.
Durch die Nutzung von Agents in der Cloud können Geschwindigkeitsvorteile erzielt werden. Dies erfordert aber Aufwände für die Anpassung der Build und Release Pipelines, insbesondere wenn nun von außen auf die Firmeninfrastruktur zugegriffen werden muss (bspw. Ablage von Artefakten in On-Premise Package Manager). Durch die Nutzung weiterer Microsoft-hosted Pipelines können monatliche Kosten entstehen.
Build und Release Pipelines
Im ersten Schritt sollten Sie die benötigten Extensions installieren, damit die Build und Release Steps verfügbar sind.
- XAML Pipelines müssen per Hand zu JSON oder YAML migriert werden (XAML wird nicht von Azure DevOps Services unterstützt)
- JSON Pipelines können Sie über den Web Access ex- und importieren
- YAML Pipelines werden mit dem Git Repository importiert und lassen sich nach dem Repository Import im Pipelines Hub wieder einbinden:
New -> Azure Repos Git -> [select Git Repo] -> Existing Azure Pipelines YAML file
Hinweis: Bei der Verwendung von Task Groups müssen diese ebenfalls ex- und importiert werden. Hierbei erhält die Task Group eine neue ID und Pipelines, die auf die Task Groups zugreifen, müssen angepasst werden.
Option 2: High Fidelity
Zur Übernahme aller Daten und Einstellungen aus einer TFS / Azure DevOps 2019 Collection empfiehlt Microsoft die Data Migration Tools.

Abbildung 3: Migrationsschritte von TFS / Azure DevOps Server nach Azure DevOps Services (Quelle: https://www.microsoft.com/en-us/download/details.aspx?id=54274)
Vorteile
- High Fidelity: Ressourcen inkl. History, Einstellungen und Berechtigungen werden übernommen
Nachteile
- Vorbereitung der Migration und die Migration selbst (AD/AAD Sync, Validierung, Azure Container, …) kann sehr zeitaufwendig sein
- Die verschiedenen Schritte setzen teils tiefgreifendes Wissen in Azure, TFS / Azure DevOps und (Azure) Active Directory voraus
- Upgrade auf eine der letzten beiden Azure DevOps Server Versionen notwendig (aktuell werden die Versionen 2019.1 und 2019.1.1 unterstützt)
Die Schritte der Migration in Kürze aufgelistet
- Vorbereitung
- Azure Active Directory Sync einrichten
- Upgrade Azure DevOps Server
- Collections validieren
- Validierung ausführen, überprüfen, Fehler beheben und wiederholen (bis fehlerfrei)
- Projekte importieren (aka Migration)
- Import Dateien generieren und identity map überprüfen
- Azure Container oder SQL Azure VM erstellen
- Backup erstellen und hochladen
- Backup in Azure DevOps Services einspielen
- Migration finalisieren (insb. Agent Pools und Agents einrichten)
Den Migrationsleitfaden und die Tools zur Validierung von Microsoft können Sie hier herunterladen.
Fazit
Azure DevOps deckt den benötigten Funktionsumfang kleiner Entwicklungsteams bereits ohne zusätzliche Kosten ab. Wenn zudem bereits Visual Studio Subscriptions vorhanden sind, die eigene Infrastruktur (Agents für Build und Release und der eigene Package Manager) eingebunden werden kann und ggf. auch schon ein Azure Active Directory vorhanden ist, können Azure DevOps Services sowohl kurz-, als auch langfristig zur Bewältigung von Infrastrukturschwächen eingesetzt werden. Wie hier aufgezeigt wurde, sind die ersten Schritte in die Cloud nicht schwer.
Gerne unterstützen wir Sie bei Fragen zu einzelnen Migrationsschritten oder einer kompletten Migration.
Quellen
[1] https://www.heise.de/newsticker/meldung/Ueberall-geht-das-Internet-reibungslos-bloss-bei-Ihnen-nicht-4687152.html, abgerufen am 24.03.2020
[2] https://docs.microsoft.com/en-us/azure/devops/server/tfs-is-now-azure-devops-server, abgerufen am 24.03.2020
[3] https://docs.microsoft.com/en-us/azure/devops/organizations/security/data-protection, abgerufen am 24.03.2020
[4] https://docs.microsoft.com/en-us/azure/devops/organizations/security/get-started-stakeholder?view=azure-devops&tabs=scrum-process#features-and-functions-available-to-stakeholders, abgerufen am 24.03.2020
[5] https://azure.microsoft.com/en-us/pricing/details/devops/azure-devops-services, abgerufen am 24.03.2020
[6] https://docs.microsoft.com/en-us/visualstudio/subscriptions/vs-azure-devops, abgerufen am 24.03.2020
[7] https://azure.microsoft.com/en-us/blog/announcing-azure-pipelines-with-unlimited-ci-cd-minutes-for-open-source, abgerufen am 24.03.2020
[8] https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/?view=azure-devops, abgerufen am 24.03.2020