Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Azure DevOps Services
Nachdem Sie die Voraussetzungen abgeschlossen haben, authentifizieren Sie sich bei Azure DevOps und starten Sie dann die anfängliche Synchronisierung für Ihr Repository. Verwenden Sie beim Starten der Migration die in den Voraussetzungen erstellte Dienstverbindungs-ID.
Voraussetzungen
| Anforderung | Details |
|---|---|
| Azure DevOps Repository-GUID | Aus dem az repos show --query id-Befehl für Ihr Azure DevOps-Repository oder aus den Repositoryeinstellungen im Azure DevOps-Portal bezogen. |
| Selbst gehosteter Linux-Agent | Der Agent wurde in Ihrem Azure DevOps-Projekt installiert und registriert und wird unter Projekteinstellungen> als (Online) angezeigt. |
| Azure DevOps Dienstverbindung mit GitHub | Erstellt in Azure DevOps mit dem PAT des GitHub Enterprise-Administrators. |
| GitHub Personal Access Token (Persönlicher Zugangsschlüssel für GitHub) | Mit den erforderlichen Scopes generiert: repo, admin:org, delete_repo. Das Token muss während der Migration gültig sein (bis zu 21 Tage). |
| berechtigungen Azure DevOps | Der Migrationsoperator muss über die Berechtigung „Enterprise Live-Migrationen: Migrationen verwalten“ verfügen. |
| Netzwerkzugriff | Firewallregeln ermöglichen es dem Agentcomputer, mit Azure DevOps (dev.azure.com) und GitHub Endpunkten zu kommunizieren. |
| (Optional) ID der Pipelineverbindung | Erstellt aus der Azure DevOps-Dienstverbindung für die Pipelineumleitung. |
| (Optional) Azure Pipelines und Azure Boards | Installiert Azure Pipelines und Azure Boards in Ihrem Ziel-GitHub Unternehmen. |
Wenn ein Element unvollständig ist, lesen Sie die Voraussetzungen , bevor Sie fortfahren.
Authentifizieren bei Azure DevOps
ELM erfordert authentifizierten Zugriff auf Azure DevOps.
Melden Sie sich bei der Azure CLI an:
az loginLegen Sie Ihre standardmäßige Azure DevOps Organisation fest:
az devops configure --defaults organization=https://dev.azure.com/myorgTipp
Wenn Ihr lokales Git-Remote auf eine andere Organisation verweist, fügen Sie allen Migrationsbefehlen
--detect falsehinzu, um zu verhindern, dass die automatische Erkennung die falsche Organisation auswählt.Überprüfen Sie Ihren Zugriff:
az devops project listRufen Sie die Repository-GUID ab:
az repos show --org https://dev.azure.com/<org> --project <project> --repository <repo-name> --query id -o tsv
Starten des Agents
Ihr selbst gehosteter Linux-Agent muss online sein und lauschen, bevor Sie eine Migration starten.
Erforderlich: Start des interaktiven Agents
Führen Sie diese Schritte aus, um den Agent interaktiv zu starten. Dieser Schritt ist für die Migration erforderlich.
Überprüfen Sie den Agentstatus im Azure DevOps Portal unter Project Einstellungen>Agentpools. Wählen Sie Ihren Pool aus, öffnen Sie die Registerkarte "Agents ", und bestätigen Sie, dass der Agent als Online angezeigt wird.
Wenn der Agent offline ist, melden Sie sich bei dem Linux-Computer an, auf dem der Agent installiert ist, und wechseln Sie zum Agentinstallationsverzeichnis.
Starten Sie den Agent interaktiv:
./run.sh
Der Agent läuft im Vordergrund. Lassen Sie diese Terminalsitzung geöffnet, während die Migration ausgeführt wird.
Optional: Einrichtung für den Produktivbetrieb – den Agenten als Dienst ausführen
Konfigurieren Sie für lange ausgeführte Migrationen den Agent so, dass er als Systemdienst ausgeführt wird, damit er neu gestartet werden kann, wenn der Computer neu gestartet wird oder die Verbindung abbricht.
So führen Sie den Agent als Dienst aus, damit er über Neustarts online bleibt:
sudo ./svc.sh install sudo ./svc.sh start
Wann jeder Modus verwendet werden soll:
- Verwenden Sie den Dienstmodus für Migrationen, die voraussichtlich länger als zwei Stunden dauern, für Migrationen außerhalb der Geschäftszeiten oder für Szenarien, in denen der Computer neu gestartet werden könnte oder die Verbindung unterbrochen werden könnte.
- Verwenden Sie den interaktiven Modus für schnelle Migrationen (weniger als 30 Minuten), besuchte Migrationen, in denen Sie den Fortschritt überwachen, oder Umgebungen, in denen Systemdienste eine zusätzliche Genehmigung erfordern.
- Der Agentmodus wirkt sich nicht auf die Synchronisierungsgeschwindigkeit aus. Unabhängig davon, ob Sie
./run.shodersudo ./svc.sh startverwenden, sind Migrationsgeschwindigkeit und Datenübertragungsrate gleich.
Weitere Informationen finden Sie unter Ausführen eines selbst gehosteten Agents in Linux.
Fehlerbehebung beim Starten des Agenten
Wenn der Agent nach der Ausführung ./run.shnicht gestartet oder offline bleibt, überprüfen Sie die folgenden Elemente:
- Berechtigungen: Stellen Sie sicher, dass das Agentverzeichnis über Ausführungsberechtigungen verfügt (
chmod +x run.sh) und der Benutzer Schreibzugriff auf das Verzeichnis hat. - Portkonflikt: Überprüfen Sie, ob der Agentlistenerport nicht von einem anderen Prozess (
netstat -an | grep <agent-port>) verwendet wird. - Netzwerk: Stellen Sie sicher, dass der Agentcomputer
dev.azure.comund die erforderlichen GitHub-Endpunkte erreichen kann. - Dienststartfehler: Wenn Sie den Dienst verwenden
sudo ./svc.sh start, überprüfen Sie die Dienstprotokolle mithilfe vonjournalctl -u vstsagent.<org>-<project>-<agent-name>.service.
Wählen Sie Ihren Migrationspfad aus.
Bevor Sie mit der Migration beginnen, wählen Sie Ihren Betriebspfad aus:
- Wechseln Sie vollständig zu GitHub, und beenden Sie die Verwendung von Azure DevOps für die Quellcodeverwaltung.
- Verwenden Sie ein Hybridmodell und verschieben Sie den Quellcode nach GitHub, während Sie Azure DevOps weiterhin für Pipelines und/oder Boards verwenden.
Entscheiden Sie für den Hybridmodus, ob ELM Azure Pipelines neu verkabelt und die Azure Boards-Verbindung erstellt, oder ob Ihr Team diese Updates separat verarbeitet.
Entscheiden Sie außerdem, ob die Synchronisierung zuerst überprüft und innerhalb von 24 Stunden gestartet werden soll, oder lassen Sie ELM die Synchronisierung automatisch starten, nachdem die Überprüfung erfolgreich war.
Starten der Synchronisierung
Beginnen Sie mit diesem Basisbefehl für jede Migration:
az devops migrations create --org https://dev.azure.com/<org>
--repository-id <repo-guid>
--target-repository https://github.com/<org>/<repo>
--github-token <github-pat>
--service-endpoint-id <service-connection-guid>
--agent-pool <agent-pool-name>
In --target-repository ist <repo> der GitHub Repositoryname. Wählen Sie einen beliebigen verfügbaren Namen aus. Es muss nicht mit dem Azure DevOps Repositorynamen übereinstimmen.
Fügen Sie optionale Parameter basierend auf Ihrem Migrationsszenario hinzu:
| Szenario | Diesen Parameter hinzufügen | Result |
|---|---|---|
| Überprüfen vor der Synchronisierung | --validate-only |
ELM führt nur die Überprüfung aus. Sie müssen die Synchronisierung innerhalb des 24-Stunden-Überprüfungsfensters starten. |
| Automatisches Starten der Synchronisierung nach der Überprüfung | Kein zusätzlicher Parameter | ELM überprüft zuerst und startet die Synchronisierung automatisch, wenn die Überprüfung erfolgreich ist. |
| Automatisches Erkennen und Neuverkabeln von Pipelines |
--enable-auto-discover-pipelines und --pipeline-service-connection-id <service-connection-id> |
ELM findet Pipelines, die auf das Quell-Repository verweisen, und verkabelt sie an GitHub. |
| Manuelles Auswählen von Pipelines, die später neu verkabelt werden sollen | --pipeline-service-connection-id <service-connection-id> |
ELM bereitet die Migration für die manuelle Neuverkabelung der Pipeline vor, sobald die Synchronisierung startet. |
| Verwenden Sie ELM nicht für die Umverdrahtung von Pipelines | Beide Parameter für die Pipeline-Umleitung weglassen | ELM migriert nur das Repository. Sie können Pipelines separat aktualisieren. |
Migrationsstatus überprüfen:
az devops migrations status --org https://dev.azure.com/<org>
--repository-id <repo-guid>
Suchen nach:
-
status- aktueller Migrationsstatus (Active,Succeeded,Completed,Failed,Suspended) -
stage- aktuelle Migrationsphase (Queued,Validation,Synchronization,CutoverReviewForCutover, ,ReadyForCutover)Migrated -
validationIssues- Liste der Vorprüfungsfehler mit Fehlercodes und Meldungen -
errorMessage- Details zum Fehler
Überprüfen vor der Synchronisierung
Verwenden Sie diesen Ablauf, wenn Sie die Migration mit --validate-only gestartet oder Validierung ausführen und später migrieren ausgewählt haben.
Starten Sie die Synchronisierung innerhalb von 24 Stunden, nachdem die Überprüfung erfolgreich war:
az devops migrations resume --org https://dev.azure.com/<org> --repository-id <repo-guid> --migrationStatus erneut überprüfen:
az devops migrations status --org https://dev.azure.com/<org> --repository-id <repo-guid>
Manuelle Pipelineumleitung (Hybridmodus)
Verwenden Sie diesen Workflow, wenn Sie pipelines manuell neu verkabeln möchten.
Note
Die az devops migrations pipelines Befehle (list, submit, , updateretryund delete) befinden sich in der Vorschau.
Suchen Sie die Pipelinedefinitions-IDs, die auf das migrierende Repository verweisen.
az devops migrations pipelines listzeigt nur die Pipelines an, die bereits für die Neuverkabelung registriert sind, sowie deren Status der Neuverkabelung. Bevor Sie Pipelines übermitteln, wird ein leeres Ergebnis zurückgegeben, sodass Sie es nicht zum Ermitteln von Kandidatenpipelines verwenden können. Um die neu zuzuordnenden Definitions-IDs zu finden, führen Sie die Pipelines auf, die aus dem Quellrepository erstellt werden:az pipelines list --org $org \ --project $project \ --repository $rid \ --repository-type tfsgit \ --query "[].{id:id, name:name}" -o tableVerwenden Sie die
idWerte aus der Ausgabe als--pipeline-idsim nächsten Schritt.Note
az pipelines list --repositorygibt nur Pipelines zurück, deren Standardtrigger-Repository das Quell-Repository ist. Eine Pipeline, die über einen Ressourcen-, Vorlagen- oder Checkoutschritt auf das Repository verweist (anstatt es als ihr primäres Repository zu verwenden), wird hier möglicherweise nicht angezeigt. Fügen Sie diese Definitions-IDs ebenfalls ein, wenn Sie wissen, dass sie vom Migrieren des Repositorys abhängen.Senden Sie ausgewählte Pipelinedefinitions-IDs für die Umleitung (maximal 200 IDs pro Anforderung):
az devops migrations pipelines submit --org $org \ --repository-id $rid \ --pipeline-ids 42 43 44 \ --service-connection-id $scid--service-connection-idist optional, wenn Sie bereits über--pipeline-service-connection-idinmigrations createoder in einem vorherigenpipelines update --service-connection-ideine Verbindung hinzugefügt haben.Wenn eine Pipeline auf andere Repositorys verweist, ordnen Sie jedes Quellrepository dem GitHub Ziel zu:
az devops migrations pipelines submit --org $org \ --repository-id $rid \ --pipeline-ids 42 43 44 \ --service-connection-id $scid \ --repository-mapping aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa=<GH_ORG>/shared-templates \ --repository-mapping bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb=<GH_ORG>/another-repoFormat:
--repository-mapping <sourceRepoId>=<targetOwner>/<targetRepo>(wiederholbar).Überwachen und Anpassen des Pipeline-Satzes:
az devops migrations pipelines list --org $org --repository-id $rid -o tableNachdem Sie Pipelines eingereicht haben, listet dieser Befehl alle angemeldeten Pipelines und ihren Status der Neuverkabelung auf:
Column Bedeutung DefinitionIdDefinitions-ID der Pipeline NamePipelinename (fällt auf den YAML-Dateinamen zurück, wenn der Name noch nicht verfügbar ist) ClassificationWie die Pipeline auf das Repository verweist StatusAktueller Umverdrahtungsstatus der Pipeline ErrorMessageFehlerdetails, wenn sich die Pipeline in einem fehlerhaften Zustand befindet az devops migrations pipelines update --org $org \ --repository-id $rid \ --add-ids 50 51 \ --remove-ids 42 \ --retry-ids 43 \ --service-connection-id $scid-
--add-ids: Fügen Sie weitere Pipelines hinzu. -
--remove-ids: Pipelines aus der Neuverkabelung entfernen. -
--retry-ids: Versuchen Sie Pipelines im ZustandFailederneut. - Mindestens einer von
--add-ids,--remove-ids,--retry-ids,--service-connection-idoder--repository-mappingist erforderlich.
Tastenkombination nur für Wiederholung:
az devops migrations pipelines retry --org $org --repository-id $rid --pipeline-ids 43-
Beim Cutover überprüfen und genehmigen, wenn die Phase
ReviewForCutoverist:az devops migrations cutover review --org $org --repository-id $rid -o tableÜberprüfen Sie wichtige Felder:
Feld Bedeutung FailedCount/BlockedCount/PendingCount/TotalUnprocessedCountAnzahl der nicht verarbeiteten Elemente (fehlgeschlagen, blockiert, ausstehend und summe) RequiresPipelineVerification(requiresPipelineVerificationAcknowledgment)Wenn true, muss die Genehmigung--pipelines-verifiedenthaltenState/Type/PullRequestUrl(vonfailedItems[])Details zu Fehlern pro Element Cutover genehmigen:
az devops migrations cutover approve --org $org \ --repository-id $rid \ --pipelines-verifiedWenn Sie auch nicht verarbeitete Elemente akzeptieren:
az devops migrations cutover approve --org $org \ --repository-id $rid \ --accept-failures 3 \ --pipelines-verifiedSie müssen mindestens eines von
--accept-failuresoder--pipelines-verifiedangeben.
Während der ersten Synchronisierung:
- Azure DevOps bleibt vollständig beschreibbar. Teams arbeiten weiterhin normal.
- GitHub ist noch nicht das führende System.
- Das Ziel-GitHub Repository wird automatisch auf privat festgelegt.
Important
Nachdem Sie eine vollständige Migration gestartet haben, müssen Sie die Umstellung innerhalb von 21 Tagen abschließen. Die Uhr beginnt, wenn die anfängliche Synchronisierung beginnt.