Batch-Upgrade mit dem GitHub Copilot Modernisierungsagent

Mit dem Batchupgrade können Sie konsistente Modernisierungspläne für mehrere Repositorys gleichzeitig anwenden. In diesem Artikel wird gezeigt, wie Sie mehrere Anwendungen effizient im Unternehmensmaßstab aktualisieren.

Mithilfe des Batchupgrades können Sie folgende Aktionen ausführen:

  • Führen Sie ein gleichzeitiges Upgrade mehrerer Anwendungen mithilfe desselben Upgradeziels durch.
  • Wenden Sie konsistente Muster mithilfe ähnlicher Upgrademuster für alle Anwendungen an.
  • Nutzen Sie die parallele Ausführung beim Delegieren an Cloud-Agents.

Batchupgrade bietet die folgenden Vorteile:

  • Konsistente Ausführung:

    • Standardisierter Ansatz: Wenden Sie die gleichen Modernisierungsmuster für alle Repositorys an.
    • Reduzierte Variabilität: Stellen Sie konsistente Upgradepfade für ähnliche Anwendungen sicher.
    • Wiederverwendbare Strategien: Verwenden Sie organisationsspezifische Fähigkeiten in allen Anwendungen.
  • Skalierung und Effizienz:

    • Parallele Verarbeitung: Verwenden Sie Cloud-Agents, um mehrere Repositorys gleichzeitig zu verarbeiten.
    • Automatisierte Workflows: Integration mit CI/CD-Pipelines für die geplante Modernisierung.
    • Zeitersparnis: Reduzieren Sie die Gesamtmodernisierungszeit von Wochen auf Stunden.

Voraussetzungen

  • Modernisieren Sie CLI.
  • Eine abgeschlossene Batchbewertung (empfohlen, aber nicht erforderlich).
  • Alle Repositorys verwenden dieselbe Programmiersprache (Java oder .NET).
  • Zugriff auf alle Repositorys, die Sie aktualisieren möchten.
  • GitHub Authentifizierung konfiguriert (gh auth login).

Von Bedeutung

Alle Repositorys in einem Batchupgrade müssen dieselbe Programmiersprache verwenden. Wenn ein Repository eine andere Sprache verwendet, kennzeichnet das Batchupgrade das Repository als fehlgeschlagen und überspringt es.

Konfigurieren von Repositorys

Der Modernisierungs-Agent unterstützt mehrere Möglichkeiten zum Angeben der Repositorys, die Sie aktualisieren möchten:

  • Aktueller Ordner: Aktualisieren Sie das Projekt in Ihrem aktuellen Arbeitsverzeichnis.
  • Manuelle Eingabe: Geben Sie lokale Verzeichnispfade oder Git-Remote-URLs direkt ein.
  • Repositorykonfigurationsdatei: Verwenden Sie eine JSON-Konfigurationsdatei, die alle Repositorys auflistet.

Konfigurationsdatei für das Repository

Erstellen Sie für Batchvorgänge in vielen Repositorys eine JSON-Konfigurationsdatei, um alle Repositorys auflisten zu können. Erstellen Sie es .github/modernize/repos.json beispielsweise in Ihrem Arbeitsverzeichnis, oder geben Sie einen benutzerdefinierten Pfad an.

Tipp

Bei Beispiel-Repositorys müssen Sie zunächst einen Fork erstellen und sicherstellen, dass Sie über Adminberechtigungen verfügen, um den Auftrag an Cloud-Agents zu delegieren.

Einfaches Format (Array von Repositorys):

[
  {
    "name": "PhotoAlbum-Java",
    "url": "https://github.com/Azure-Samples/PhotoAlbum-Java.git"
  },
  {
    "name": "ZavaSocialFrontEnd",
    "url": "https://github.com/Azure-Samples/ZavaSocialFrontEnd"
  }
]

Vollständiges Format (mit Verzweigungs- und lokalen Pfaden):

{
  "repos": [
    {
      "name": "PhotoAlbum-Java",
      "url": "https://github.com/Azure-Samples/PhotoAlbum-Java.git",
      "branch": "main"
    },
    {
      "name": "local-project",
      "path": "/absolute/path/to/project"
    }
  ]
}

Jeder Repositoryeintrag unterstützt die folgenden Felder:

Feld Beschreibung Erforderlich
name Ein freundlicher Name des Repository (in Berichten und Dashboards verwendet). Ja
url Git Clone URL im HTTPS- oder SSH-Format. Einer von url oder path
path Absoluter lokaler Verzeichnispfad. Einer von url oder path
branch Branch zum Auschecken nach dem Klonen. No
description Menschenlesbare Beschreibung. No

Tipp

Sie können Repositorys aus verschiedenen Organisationen einschließen und unterschiedliche Authentifizierungsmethoden verwenden, solange Sie Zugriff haben.

Der Modernisierungs-Agent erkennt automatisch die Datei , wenn Sie "Aus einer Konfigurationsdatei" im interaktiven Modus auswählen. Sie können auch einen benutzerdefinierten Pfad angeben.

Auswählen des Ausführungsmodus

Batchupgrade unterstützt zwei Ausführungsmodi und zwei Interaktionsmethoden:

Ausführungsmodi

Lokale Ausführung

  • Am besten geeignet für: Testen, kleinere Repositorys (1-5 Repositorys) oder wenn Sie die lokale Steuerung bevorzugen.
  • Funktionsweise: Verarbeitet Repositorys sequenziell auf Ihrem lokalen Computer.
  • Setup erforderlich: Keine über die grundlegenden Voraussetzungen hinaus.
  • Unterstützt: Sowohl Git-URL- als auch lokale Pfad-Repositories.

Cloud-Agent-Delegierung

  • Am besten geeignet für: Unternehmensweite Vorgänge, große Portfolios (5+ Repos) oder parallele Verarbeitung.
  • Wie es funktioniert: Sendet Aufgaben an GitHub Cloud-Agents zur parallelen Ausführung in der Cloud.
  • Setup erforderlich: MCP-Serverkonfiguration in jedem Repository (konfiguriert während des Setups).
  • Supports: Nur Repositorys mit GitHub-URLs (github.com). Lokale Pfade und Nicht-GitHub-Anbieter werden nicht unterstützt.

Von Bedeutung

Die Delegierung des Cloud-Agenten setzt voraus, dass Repositorys GitHub (github.com)-Repository-URLs haben. Repositorys, die mit lokalen Pfaden angegeben oder auf nicht GitHub Anbietern (GitLab, Azure DevOps) gehostet werden, werden während der Clouddelegierung übersprungen. Verwenden Sie die lokale Ausführung für diese Repositorys.

Tipp

Durch die parallele Verarbeitung von Repositorien kann die Delegierung an den Cloud-Agenten die gesamte Modernisierungsdauer von Stunden auf Minuten reduzieren.

Interaktionsmethoden

Interaktiver Modus (TUI)

  • Geführte Erfahrung mit Menüs und Eingabeaufforderungen.
  • Am besten geeignet für Benutzer zum ersten Mal oder wenn Sie Optionen überprüfen möchten.
  • Unterstützt sowohl die lokale als auch die Cloudausführung.

Nicht-interaktiver Modus (CLI/headless)

  • Befehlszeilenbasiert, vollständig automatisiert.
  • Am besten geeignet für CI/CD-Pipelines und Automatisierung.
  • Unterstützt sowohl die lokale als auch die Cloudausführung mit --delegate cloud Flag.

Hinweis

Sie können jeden Ausführungsmodus mit jeder Interaktionsmethode kombinieren. Beispiel:

  • modernizeupgrade auswählen (interaktiv, lokal)
  • modernize → wählen Sie "Upgrade>Delegate to Cloud Agents " (interaktiv, Cloud) aus.
  • modernize upgrade "Java 21" --source ./repos.json (nicht interaktiv, lokal)
  • modernize upgrade "Java 21" --source ./repos.json --delegate cloud (nicht interaktiv, Cloud)

Funktionsweise des Batchupgrades

Der Stapel-Upgrade-Workflow:

  1. Language detection: Erkennt automatisch die Projektsprache (Java oder .NET) aus dem ersten Repository.
  2. Planerstellung: Erstellt einen Upgradeplan basierend auf Ihrer Eingabeaufforderung oder verwendet die neuesten LTS-Versionen.
  3. Ausführung: Wendet das Upgrade auf jedes Repository an.
  4. Überprüfung: Erstellt und überprüft Änderungen für jedes Repository.

Batchupgrade ausführen

Nachdem Sie Ihre Repositorys konfiguriert und einen Ausführungsmodus ausgewählt haben, starten Sie das Batchupgrade.

Interaktiver Modus (lokal aktualisieren)

  1. Führen Sie den Modernisierungs-Agent aus:

    modernize
    
  2. Wählen Sie im Hauptmenü "Upgrade" aus.

    ○ How would you like to modernize your app?
    
        Assess
        Analyze modernization readiness across one or multiple applications
        Plan
        Generate a structured plan to guide the agent
        Execute
        Run the tasks defined in the modernization plan
    
      Or select a quick-start scenario:
    
      > Upgrade
        Upgrade runtimes and frameworks across one or multiple applications
    
  3. Wählen Sie aus, wie Ihre Zielrepositorys angegeben werden sollen. Wählen Sie "Aus einer Konfigurationsdatei " aus, um eine repos.json Datei zu verwenden.

    ○ Choose target repositories
    
       1. Current folder
         /Users/username/project
       2. Manual input
         Enter local path or remote URL
     > 3. From a config file
         /path/to/.github/modernize/repos.json
    

    Tipp

    Sie können auch manuelle Eingaben auswählen, um lokale Pfade oder Remote-Git-URLs direkt einzugeben, oder den aktuellen Ordner , um das Projekt in Ihrem aktuellen Verzeichnis zu aktualisieren.

  4. Wenn die repos.json Datei am Standardspeicherort erkannt wird, füllt der Agent sie automatisch aus. Geben Sie andernfalls den Pfad zu Ihrer Konfigurationsdatei ein, und drücken Sie die EINGABETASTE.

  5. Alle Repositorys sind standardmäßig ausgewählt. Deaktivieren Sie alle Repositorys, die Sie überspringen möchten, und drücken Sie dann die EINGABETASTE , um Ihre Auswahl zu bestätigen.

    • Verwenden Sie pfeiltasten , um zu navigieren und die LEERTASTE zu drücken, um einzelne Repositorys umzuschalten.

    Screenshot der Modernize CLI, die die Liste

  6. Wählen Sie den Ausführungsmodus aus. Wählen Sie "Lokal aktualisieren" aus.

    Screenshot der Modernize CLI, die die Option

  7. Geben Sie die Upgradezielaufforderung ein (z. B. Java 21 oder .NET 10), oder drücken Sie Enter, um die Standardversion (neueste LTS-Version) zu akzeptieren.

  8. Der Agent arbeitet automatisch:

    • Erstellt einen Upgradeplan basierend auf Ihrer Anforderung.
    • Wendet den Plan auf jedes Repository sequenziell an.
    • Erstellt und überprüft jedes Repository nach Änderungen.
    • Zeigt Fortschritt und Zusammenfassung für jedes Repository an.

    Screenshot der Modernize CLI, die den Upgradefortschritt für jedes Repository im Terminal anzeigt.

Interaktiver Modus (Delegieren an Cloud-Agents)

Voraussetzungen: Konfigurieren des MCP-Servers

Konfigurieren Sie vor dem Ausführen des Upgrades den GitHub Copilot Modernisierungs-MCP-Server in jedem Repository.

Zu Java Anwendungen fügen Sie diese Konfiguration im Cloud-Agent Abschnitt Ihrer Repositoryeinstellungen hinzu:

{
  "mcpServers": {
    "app-modernization": {
      "type": "local",
      "command": "npx",
      "tools": [
        "*"
      ],
      "args": [
        "-y",
        "@microsoft/github-copilot-app-modernization-mcp-server"
      ]
    }
  }
}

Screenshot von GitHub, in dem der Bereich mit den Einstellungen für den Repository-Cloud-Agent angezeigt wird, in dem der Abschnitt

Schritte

  1. Führen Sie den Modernisierungs-Agent aus:

    modernize
    
  2. Wählen Sie im Hauptmenü "Upgrade" aus.

    ○ How would you like to modernize your app?
    
        Assess
        Analyze modernization readiness across one or multiple applications
        Plan
        Generate a structured plan to guide the agent
        Execute
        Run the tasks defined in the modernization plan
    
      Or select a quick-start scenario:
    
      > Upgrade
        Upgrade runtimes and frameworks across one or multiple applications
    
  3. Wählen Sie aus, wie Ihre Zielrepositorys angegeben werden sollen. Wählen Sie aus einer Konfigurationsdatei aus.

    ○ Choose target repositories
    
        1. Current folder
          /Users/username/project
        2. Manual input
          Enter local path or remote URL
      > 3. From a config file
          /path/to/.github/modernize/repos.json
    
  4. Wenn die repos.json Datei am Standardspeicherort erkannt wird, füllt der Agent sie automatisch aus. Geben Sie andernfalls den Pfad zu Ihrer Konfigurationsdatei ein, und drücken Sie die EINGABETASTE.

  5. Alle Repositorys sind standardmäßig ausgewählt. Deaktivieren Sie alle Repositorys, die Sie überspringen möchten, und drücken Sie dann die EINGABETASTE , um Ihre Auswahl zu bestätigen. Verwenden Sie pfeiltasten, um zu navigieren und die LEERTASTE zu drücken, um einzelne Repositorys umzuschalten.

    Screenshot der Modernize CLI, die die Repositoryliste im Terminal anzeigt.

  6. Wählen Sie den Ausführungsmodus aus. Wählen Sie "An Cloud-Agents delegieren" aus.

    Screenshot von Modernize CLI, der die Menüoption „An Cloud-Agenten delegieren“ im Terminal anzeigt.

  7. Geben Sie die Aktualisierungszielaufforderung ein (z. B. Java 21), oder drücken Sie Enter, um die Standardeinstellung zu übernehmen.

  8. Der Agent arbeitet automatisch:

    • Erstellt Upgradepläne für jedes Repository.

    • Sendet einen Cloud-Agent-Auftrag für jedes Repository.

    • Führt Aufträge unabhängig parallel in der Cloud aus.

    • Zeigt Auftrags-IDs und PR-URLs für jedes Repository an.

      Screenshot der Modernize CLI, die den Fortschritt der Delegierung von Upgrades an Cloud-Agents im Terminal zeigt.

    • Delegiert Aufgaben für die parallele Ausführung an AgentHQ.

      Screenshot von GitHub, das den Bereich

    • Verfolgt den Fortschritt für jeden einzelnen Vorgang in Echtzeit.

      Screenshot von GitHub, in dem der Bereich

    • Zeigt die Upgradezusammenfassung für jede abgeschlossene Aufgabe an.

      Screenshot von GitHub, in dem der Bereich

Nicht interaktiver Modus (CLI)

Verwenden Sie für die Automatisierungs- und CI/CD-Integration den modernize upgrade Befehl:

Führen Sie ein lokales Upgrade mit einer Repositorykonfigurationsdatei durch:

modernize upgrade "Java 21" --source .github/modernize/repos.json

Aktualisieren Sie mehrere Repositorys, indem Sie Quellen direkt angeben:

modernize upgrade "Java 21" --source https://github.com/org/repo1 --source https://github.com/org/repo2

Upgrade mit Cloud-Agents:

modernize upgrade "Java 21" --source .github/modernize/repos.json --delegate cloud

Hinweis

Informationen zur Batchkopflose Ausführung und weitere CLI-Optionen finden Sie im Abschnitt "Konfiguration mehrerer Repositorys " in der CLI-Befehlsreferenz.

Überprüfen der Ergebnisse

Nach Abschluss des Batchupgrades:

  1. Überprüfen Sie den aggregierten Bericht , der im Terminal angezeigt wird.

  2. Überprüfen sie einzelne Repositoryänderungen:

    cd <repository-name>
    git status
    git diff
    
  3. Erstellen von Pullanforderungen für erfolgreiche Upgrades:

    cd <repository-name>
    gh pr create --title "Upgrade to Java 21" --body "Automated upgrade by modernization agent"
    

Problembehandlung bei Batchupgrades

Häufige Probleme

Fehler beim Repositoryzugriff:

  • Überprüfen Sie GitHub Authentifizierung mithilfe von gh auth status.
  • Stellen Sie sicher, dass Sie Zugriff auf alle Repositorys haben in repos.json.

Fehler bei der Sprachübereinstimmung:

  • Stellen Sie sicher, dass alle Repositorys in repos.json dieselbe Sprache verwenden (Java oder .NET).
  • Erstellen Sie separate Batchvorgänge für verschiedene Sprachen.

Klonfehler:

  • Überprüfen Sie, ob die Repository-URLs in repos.json korrekt und zugänglich sind.
  • Stellen Sie sicher, dass Sie über die richtigen Zugriffsberechtigungen für alle Repositorys verfügen.
  • Überprüfen Sie die Netzwerkkonnektivität und VPN-Einstellungen.

Buildfehler nach dem Upgrade:

  • Überprüfen Sie Buildfehlermeldungen im aggregierten Bericht.
  • Überprüfen Sie, ob Sie andere Abhängigkeiten aktualisieren müssen.
  • Überprüfen Sie die Kompatibilität von Drittanbieterbibliotheken mit der neuen Version.

Einzelne Repositoryfehler:

  • Der Batchvorgang wird auch dann fortgesetzt, wenn einzelne Repositorys fehlschlagen.
  • Überprüfen Sie den aggregierten Bericht, um fehlerhafte Repositorys zu identifizieren.
  • Überprüfen Sie Fehlerprotokolle auf bestimmte Fehlermeldungen.
  • Wiederholen Sie fehlgeschlagene Repositorys einzeln.

Cloud-Agent-Fehler:

  • Überprüfen Sie GitHub Actions Berechtigungen und Kontingentbeschränkungen.
  • Stellen Sie für .NET Framework sicher, dass Windows Runner-Konfiguration ordnungsgemäß festgelegt ist.

Nächste Schritte

Nach Abschluss des Batchupgrades können Sie:

Weiter verbessern:

Weitere Informationen:

Feedback geben

Wir schätzen Ihre Eingabe! Wenn Sie Feedback zum Batchupgrade oder zum Modernisierungs-Agent haben, erstellen Sie ein Problem im Github-copilot-appmod-Repository oder verwenden Sie das GitHub Copilot Modernisierungsfeedbackformular.