Blog

Migration von Jira zu Azure DevOps (VSTS oder TFS)

DEC 16, 2018

In einem früheren Beitrag zur Migration von Jira zu VSTS erklärte Damir Petrac, wie ihr die Herausforderung einer Migration von Jira zu Azure DevOps (ehemals VSTS) oder Team Foundation Server (TFS) angehen könnt.

Mathias Olausson

VP GitHub and Microsoft Business

Mathias arbeitet an der Schnittstelle von Entwicklerplattformen, KI-gestützter Softwareauslieferung und moderner Softwareentwicklung. Er begeistert sich dafür, die Entwicklerproduktivität zu steigern und Entwicklungsprozesse mit GitHub, Azure DevOps und Azure zu modernisieren. Als langjähriger Microsoft MVP bringt er technische Tiefe, kommerzielles Produktdenken und eine starke Stimme als Thought Leader in die Community ein.

Braucht ihr Hilfe bei der Migration bestehender Repositories zu Azure DevOps?

Das ist eine interessante Herausforderung, die – wie im Artikel beschrieben – sowohl fachliches als auch technisches Know-how erfordert. Auf fachlicher Ebene müssen wir verstehen, wie sich Planung und Entwicklung in Jira auf Azure DevOps übertragen lassen. Auf technischer Ebene müssen wir herausfinden, wie sich Felder, Status, Benutzer, Historien und vieles mehr zuordnen lassen. Wahrscheinlich werdet ihr REST APIs oder SDKs verwenden und Stunden damit verbringen, Protokolle zu verstehen, Code zu debuggen – und euren Benutzern dabei nur wenig Mehrwert bieten.

Wie können wir diesen Prozess also weniger mühsam gestalten? Hier kommt das Jira-zu-Azure-DevOps-Work-Item-Migrationstool ins Spiel! In diesem Beitrag erklären mein Co-Autor Mathias Olausson und ich detailliert, wie ihr das Tool optimal nutzt.

Jira-zu-Azure-DevOps-Migrationstool

Durch unsere langjährige Erfahrung mit der Migration, Konsolidierung und Synchronisierung von Daten aus Entwicklungsteams haben wir bei Solidify (heute Eficode) eine Reihe interner Tools entwickelt. Auch wenn das Problem nicht besonders komplex ist, braucht die Entwicklung eines Tools Zeit – und beim ersten Versuch wird es höchstwahrscheinlich noch nicht ideal sein.

Da wir der Meinung sind, dass der Wechsel zwischen Entwicklungsplattformen einfach sein sollte, haben wir unser Tool für die Migration von Work Items zwischen Jira und Azure DevOps/TFS als Open Source veröffentlicht. Natürlich hoffen wir auch, dass die Community die Tools weiterentwickelt und sie dadurch auch für andere Szenarien wertvoll und relevant werden als für jene, in denen wir sie bisher eingesetzt haben.

Der Migrationsprozess von Jira zu Azure DevOps erfolgt in zwei Phasen: Zuerst werden Daten aus Jira in Textdateien exportiert. Dies kann stapelweise erfolgen, bis die richtigen Elemente für den Import bereit sind. Anschließend werden die Datendateien in Work Items in Azure DevOps/TFS importiert.

Zu den wichtigsten Funktionen des Tools gehören: - Jira-Elemente werden anhand von JQL-Abfragen exportiert. - Benutzer können während der Migration übersetzt werden, damit die Historie korrekt erhalten bleibt. - Die Feldzuordnung ermöglicht es, Felder anhand der Konfiguration vom Quell- zum Zielkonto zuzuordnen. - Statuszuordnung zwischen Jira- und Azure-DevOps-Status. - Die Historie aus Jira bleibt erhalten. - Migration von Links und Anhängen. - Daten wie Erstellungs- oder Änderungsdatum bleiben erhalten. - Area-/Iteration-Pfade können auf einen bestimmten Wert gesetzt werden, wenn sie im Zielprojekt nicht vorhanden sind.

Migration von Jira zu Azure DevOps oder TFS

Jetzt, da wir ein Tool haben, sehen wir uns an, wie wir es verwenden können.

Hinweis: Schaut euch unbedingt die aktuelle Version des Migrationsleitfadens hier an.

Abb. 1. Migrationsprozess von Jira zu Azure DevOps

Ein praktisches Beispiel

Nun gehen wir anhand eines praktischen Beispiels durch, wie ihr von Jira zu Azure DevOps migriert – inklusive Screenshots, Konfiguration und Exportausgabe. Abschließend sehen wir uns an, wie das Projekt in Azure DevOps aussieht. Wir beginnen mit einem standardmäßigen Scrum-Projekt in Jira. Dabei handelt es sich um ein Demoprojekt, es könnte aber genauso gut ein echtes Scrum-Projekt aus eurem Unternehmen sein. Ein Screenshot aus Jira sieht so aus:

Abb. 2. Demo-Scrum-Projekt in Jira

Teil eins: Konfiguration einrichten

Um mit der Migration zu beginnen, geht zunächst zu GitHub und ladet die neueste Version des Tools herunter: [https://github.com/solidify/jira-azuredevops-migrator/releases] (https://github.com/solidify/jira-azuredevops-migrator/releases).

Ladet die Datei jira-azuredevops-migrator-<version>.zip herunter und entpackt sie. Dies ist eine kompilierte, sofort einsatzbereite Version.

Da wir unser Jira-Demoprojekt in eine Scrum-Vorlage in Azure DevOps migrieren möchten, verwenden wir die Beispielkonfigurationsdatei, die auf der Scrum-Vorlage in Azure DevOps basiert. Die Beispielkonfigurationsdatei befindet sich im Ordner Samples und heißt config-scrum.json. Die vollständige Dokumentation zu jedem Feld findet ihr hier.

So sieht sie standardmäßig aus:

Abb. 3. Beispielkonfiguration

Diese Standardkonfiguration legt fest, dass wir alle Elemente im Jira-Projekt mit dem Kurznamen "SCRUM" exportieren und sie in ein Azure-DevOps-Projekt mit dem Namen "Scrum-Demo-From-Jira" migrieren.

Die Abfrage, die wir verwenden, um alle Elemente auszuwählen, könnte stattdessen project = SCRUM AND issue type in (Story, Sub-task) ORDER BY Rank ASC lauten, wenn ihr beispielsweise nur User Stories und Sub-Tasks exportieren möchtet. Der Arbeitsbereich, in dem die exportierten Jira-Elemente als JSON-Dateien abgelegt werden, ist C:TempJiraExport. Der Area Path und der Iteration Path in Azure DevOps sind beide auf "Migrated” gesetzt, sodass wir die migrierten Elemente leicht unterscheiden und an einen anderen Ort verschieben können.

Die Konfiguration ordnet außerdem Standard-Jira-Elemente den entsprechenden Azure-DevOps-Work-Item-Typen auf Basis der Scrum-Vorlage von Microsoft zu. Das sieht dann so aus:

  • Feature = Feature

  • Epic = Epic

  • Story = Product Backlog Item

  • Bug = Bug

  • Task = Product Backlog Item

  • Sub-task = Task

Die Standardfelder in Jira werden ebenfalls den Standardfeldern in Azure DevOps zugeordnet.

Wie ihr in der Konfigurationsdatei sehen könnt, wurde der Work-Item-Typ „State“ in Azure DevOps dreimal definiert. Das liegt daran, dass wir je nach Work-Item-Typ – Task, Bug, Product Backlog Item, Epic oder Feature – unterschiedliche Status setzen müssen. Mehr Details zu den verschiedenen Status in den unterschiedlichen Vorlagen in Azure DevOps findet ihr hier.

Für alle exportierten Work Items vom Typ Task ordnen wir die Status wie folgt zu:

  • To Do = To Do

  • Done = Done

  • In Progress = In Progress

Für alle exportierten Work Items vom Typ Bug oder Product Backlog Item ordnen wir die Status wie folgt zu:

  • To Do = New

  • Done = Done

  • In Progress = Committed

Für alle exportierten Work Items vom Typ Epic und Feature ordnen wir die Status wie folgt zu:

  • To Do = New

  • Done = Done

  • In Progress = In Progress

Die Scrum-Vorlage unterscheidet sich je nach Work-Item-Typ. Bei den Agile- und CMMI-Vorlagen sind die Status für Work-Item-Typen eindeutiger.

Um Benutzer zu migrieren und die neuen Work Items in Azure DevOps demselben Benutzer zuzuweisen wie die ursprünglichen Tasks in Jira, müssen wir im Stammverzeichnis eine Textdatei hinzufügen, die etwa so aussieht:

Some.JiraUser@domain.com=Some.AzureDevOpsUser@domain.com

Um dieses Beispiel für euer Projekt anzupassen, müsst ihr "source-project" und "target-project" ändern. Möglicherweise möchtet ihr vor dem Export auch ändern, wo die exportierten Elemente landen ("workspace"), sowie Area Path und Iteration Path ("base-area-path" und "base-iteration-path").

Sobald die Konfigurationsdatei an eure Jira- und Azure-DevOps-Projekte angepasst und die Abfrage auf eure Anforderungen und Projektnamen abgestimmt ist, könnt ihr mit dem eigentlichen Export aus Jira beginnen.

Teil zwei: Export aus Jira

  1. Öffnet eine CLI eurer Wahl und navigiert zu dem Speicherort der entpackten ZIP-Datei. In meinem Fall öffne ich die Eingabeaufforderung und gebe Folgendes ein: cd C:Tempjira-azuredevops-migrator-2.0.2

  2. Stellt sicher, dass sich eure aktualisierten Dateien config-scrum.json und users.txt im Stammverzeichnis befinden.

  3. Sammelt die Zugangsdaten, die ihr für Jira benötigt:
    Ermittelt das Migrationskonto (Benutzername und Passwort) für den Zugriff auf Jira.
    Ruft die URL von Jira und den Namen des Quellprojekts ab.

  4. Führt das Export-Tool aus, indem ihr den folgenden Befehl eingebt:

  • Ermittelt das Migrationskonto (Benutzername und Passwort) für den Zugriff auf Jira.

  • Ruft die URL von Jira und den Namen des Quellprojekts ab.

jira-export -u jiraaccount@some.domain -p xxxxxxx --url https://my.jira.url --config config-scrum.json --force

Abb. 4. Export aus Jira

  1. Prüft die Export-Logdatei (sie wird zur Referenz und Fehlerbehebung erstellt).

  2. Fertig. Die exportierten Elemente befinden sich jetzt im in der Konfiguration angegebenen Workspace-Ordner und sehen wie folgt aus:

Abb. 5. Der exportierte Jira-Katalog

Abb. 6. Exportierte JSON-Datei

Teil drei: Import in Azure DevOps

Jetzt können wir die Elemente in Azure DevOps importieren.

  1. Sammelt die Zugangsdaten, die ihr für Azure DevOps benötigt:
    Ruft die URL und den Namen der Zielorganisation in Azure DevOps ab.
    Fordert hier einen persönlichen Zugriffstoken für die Organisation mit mindestens Lese-/Schreibberechtigungen für Work Items an.
    Ruft den Namen des Zielprojekts ab (das Import-Tool erstellt das Zielprojekt, falls es noch nicht existiert).

  2. Führt das Import-Tool aus, indem ihr den folgenden Befehl eingebt:

Sammelt die Zugangsdaten, die ihr für Azure DevOps benötigt:

  • Ruft die URL und den Namen der Zielorganisation in Azure DevOps ab.

  • Fordert hier einen persönlichen Zugriffstoken für die Organisation mit mindestens Lese-/Schreibberechtigungen für Work Items an.

  • Ruft den Namen des Zielprojekts ab (das Import-Tool erstellt das Zielprojekt, falls es noch nicht existiert).

Führt das Import-Tool aus, indem ihr den folgenden Befehl eingebt:

wi-import --token myAccessToken --url https://my.azuredevops.url --config config-scrum.json --force

Abb. 7. Import in Azure DevOps

  1. Fertig. Die importierten Elemente sind jetzt in eurem Azure DevOps-Projekt sichtbar.

Abb. 8. Importiertes Azure DevOps-Projekt

Wenn ihr Probleme mit dem Tool habt oder zusätzliche Funktionen benötigt, könnt ihr den Code einfach forken, verbessern und uns einen Pull Request senden. Natürlich könnt ihr auch ein Issue erstellen, wenn ihr nicht sicher seid, wo ihr anfangen sollt.

Ressourcen

Hier findet ihr eine Liste mit Ressourcen, die euch den Einstieg in eure ersten Migrationen von Java zu Azure DevOps erleichtern:

Zusammenfassung

Sobald ihr die Anforderungen einer Migration von Jira zu Azure DevOps versteht, kann der Prozess mit einem Migrationstool recht einfach sein.

Die Tools werden ohne Gewähr bereitgestellt. Für eine erfolgreiche Migration braucht ihr jedoch ein detailliertes Verständnis davon, wie sich Work Items zwischen verschiedenen Systemen migrieren lassen. In diesem Artikel haben wir gezeigt, wie die Migration zwischen Jira und Azure DevOps funktioniert. Wenn ihr Unterstützung bei Migrationen von Work Items benötigt, sprecht uns an – unsere Experten beraten euch gerne.

  • DevOps
  • Atlassian

Subscribe to our newsletter