{"meta":{"title":"Migrieren von Azure DevOps mit GitHub Actions Importer","intro":"Erfahren Sie, wie Sie GitHub Actions Importer verwenden, um die Migration Ihrer Azure DevOps Pipelines zu GitHub Actions zu automatisieren.","product":"GitHub Actions","breadcrumbs":[{"href":"/de/actions","title":"GitHub Actions"},{"href":"/de/actions/tutorials","title":"Anleitungen"},{"href":"/de/actions/tutorials/migrate-to-github-actions","title":"Migrieren zu GitHub Actions"},{"href":"/de/actions/tutorials/migrate-to-github-actions/automated-migrations","title":"Automatisierte Migrationen"},{"href":"/de/actions/tutorials/migrate-to-github-actions/automated-migrations/azure-devops-migration","title":"Azure DevOps Migration"}],"documentType":"article"},"body":"# Migrieren von Azure DevOps mit GitHub Actions Importer\n\nErfahren Sie, wie Sie GitHub Actions Importer verwenden, um die Migration Ihrer Azure DevOps Pipelines zu GitHub Actions zu automatisieren.\n\n## Informationen zum Migrieren von Azure DevOps mit GitHub Actions Importer\n\nDie folgenden Anweisungen führen Sie durch die Konfiguration Ihrer Umgebung für die Verwendung des GitHub Actions Importer, um Azure DevOps-Pipelines zu GitHub Actions zu migrieren.\n\n### Voraussetzungen\n\n* Ein Azure DevOps-Konto oder eine Organisation mit Projekten und Pipelines, die du in GitHub Actions-Workflows konvertieren möchtest\n* Zugriffsberechtigungen zum Erstellen eines Azure DevOps-personal access tokens für dein Konto oder deine Organisation\n* Eine Umgebung, in der du Linux-basierte Container ausführen und die erforderlichen Tools installieren kannst:\n  * Docker ist [installiert](https://docs.docker.com/get-docker/) und wird ausgeführt.\n\n  * Die [GitHub-CLI](https://cli.github.com) ist installiert.\n  > \\[!NOTE]\n  > Der GitHub Actions Importer-Container und die CLI müssen nicht auf demselben Server wie deine CI-Plattform installiert werden.\n\n### Einschränkungen\n\nEs gibt einige Einschränkungen beim Migrieren von Azure DevOps zu GitHub Actions mit GitHub Actions Importer:\n\n* Der GitHub Actions Importer erfordert Version 5.0 der Azure DevOps-API, die in Azure DevOps Services und Azure DevOps Server 2019 verfügbar ist. Ältere Versionen von Azure DevOps Server sind nicht kompatibel.\n* Tasks, die implizit einer Azure DevOps-Pipeline hinzugefügt werden, z. B. das Auschecken von Quellcode, können einer GitHub Actions Importer-Überwachung als GUID-Name hinzugefügt werden. Um den benutzerfreundlichen Namen einer Aufgabe für eine GUID zu erfahren, kannst du die folgende URL verwenden: `https://dev.azure.com/:organization/_apis/distributedtask/tasks/:guid`.\n\n#### Manuelle Aufgaben\n\nBestimmte Azure DevOps-Strukturen müssen manuell von Azure DevOps in GitHub Actions-Konfigurationen migriert werden. Dazu gehören:\n\n* Organisations-, Repository- und Umgebungsgeheimnisse\n* Dienstverbindungen wie OIDC Connect, GitHub Apps und personal access tokens\n* Unbekannte Tasks\n* Selbstgehostete Agenten\n* Umgebungen\n* Genehmigungen vor der Bereitstellung\n\nWeitere Informationen zur manuellen Migration findest du unter [Migrieren von Azure Pipelines zu GitHub Actions](/de/actions/migrating-to-github-actions/manually-migrating-to-github-actions/migrating-from-azure-pipelines-to-github-actions).\n\n#### Nicht unterstützte Tasks\n\nDer GitHub Actions Importer unterstützt die Migration der folgenden Tasks nicht:\n\n* Gates vor der Bereitstellung\n* Gates nach der Bereitstellung\n* Genehmigungen nach der Bereitstellung\n* Einige Ressourcentrigger\n\n## Installieren der GitHub Actions Importer-CLI-Erweiterung\n\n1. So installierst du die GitHub Actions Importer-CLI-Erweiterung:\n\n   ```bash copy\n   gh extension install github/gh-actions-importer\n   ```\n\n2. Überprüfe, ob die Erweiterung installiert ist:\n\n   ```bash\n   $ gh actions-importer -h\n   Options:\n     -?, -h, --help  Show help and usage information\n\n   Commands:\n     update     Update to the latest version of GitHub Actions Importer.\n     version    Display the version of GitHub Actions Importer.\n     configure  Start an interactive prompt to configure credentials used to authenticate with your CI server(s).\n     audit      Plan your CI/CD migration by analyzing your current CI/CD footprint.\n     forecast   Forecast GitHub Actions usage from historical pipeline utilization.\n     dry-run    Convert a pipeline to a GitHub Actions workflow and output its yaml file.\n     migrate    Convert a pipeline to a GitHub Actions workflow and open a pull request with the changes.\n   ```\n\n## Konfigurieren von Anmeldeinformationen\n\nDer CLI-Befehl `configure` wird verwendet, um erforderliche Anmeldeinformationen und Optionen für GitHub Actions Importer festzulegen, wenn man mit Azure DevOps und GitHub arbeitet.\n\n1. Erstelle ein GitHub-personal access token (classic). Weitere Informationen finden Sie unter [Verwalten deiner persönlichen Zugriffstoken](/de/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#creating-a-personal-access-token-classic).\n\n   Ihr Token muss den `workflow` Bereich haben.\n\n   Kopiere das Token nach dem Erstellen zur späteren Verwendung an einen sicheren Speicherort.\n\n2. Erstelle ein Azure DevOps-personal access token. Weitere Informationen finden Sie unter [Verwenden von personal access tokens](https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops\\&tabs=Windows#create-a-pat) in der Azure DevOps-Dokumentation. Das Token muss die folgenden Bereiche umfassen:\n\n   * Agenten-Pool: `Read`\n   * Build: `Read`\n   * Code: `Read`\n   * Release: `Read`\n   * Dienstverbindungen: `Read`\n   * Taskgruppen: `Read`\n   * Variablengruppen: `Read`\n\n   Kopiere das Token nach dem Erstellen zur späteren Verwendung an einen sicheren Speicherort.\n\n3. Führe am Terminal in der GitHub Actions Importer CLI den Befehl `configure` aus:\n\n   ```shell\n   gh actions-importer configure\n   ```\n\n   Sie werden vom Befehl `configure` zur Eingabe folgender Informationen aufgefordert:\n\n   * Für \"Welche CI-Anbieter konfigurieren?\", verwenden Sie die Pfeiltasten, um `Azure DevOps` auszuwählen, drücken Sie <kbd>Space</kbd>, um es auszuwählen, und drücken Sie dann <kbd>Enter</kbd>.\n   * Geben Sie für „Personal access token für GitHub“ den Wert des personal access token (classic) ein, das Sie zuvor erstellt haben, und drücken Sie die <kbd>EINGABETASTE</kbd>.\n   * Geben Sie für \"Basis-URL der GitHub-Instanz\"  drücken Sie <kbd>Enter</kbd>, um den Standardwert (`https://github.com`) zu übernehmen.\n   * Geben Sie für \"Personal access token for Azure DevOps\" den Wert des Azure DevOps personal access token ein, den Sie zuvor erstellt haben, und drücken Sie <kbd>Enter</kbd>.\n   * Drücken Sie für \"Basis-URL der Azure DevOps Instanz\" <kbd>Enter</kbd>, um den Standardwert zu übernehmen (`https://dev.azure.com`).\n   * Geben Sie für \"Azure DevOps Organisationsname\" den Namen für Ihre Azure DevOps Organisation ein, und drücken Sie <kbd>Enter</kbd>.\n   * Geben Sie für \"Azure DevOps Projektname\" den Namen für Ihr Azure DevOps Projekt ein, und drücken Sie <kbd>Enter</kbd>.\n\n   Ein Beispiel für den Befehl `configure`:\n\n   ```shell\n   $ gh actions-importer configure\n   ✔ Which CI providers are you configuring?: Azure DevOps\n   Enter the following values (leave empty to omit):\n   ✔ Personal access token for GitHub: ***************\n   ✔ Base url of the GitHub instance: https://github.com\n   ✔ Personal access token for Azure DevOps: ***************\n   ✔ Base url of the Azure DevOps instance: https://dev.azure.com\n   ✔ Azure DevOps organization name: :organization\n   ✔ Azure DevOps project name: :project\n   Environment variables successfully updated.\n   ```\n\n4. Führe am Terminal in der GitHub Actions Importer-CLI den Befehl `update` aus, um eine Verbindung mit der GitHub Packages Container registry herzustellen, und überprüfe, ob das Containerimage auf die neueste Version aktualisiert wurde:\n\n   ```shell\n   gh actions-importer update\n   ```\n\n   Die Ausgabe dieses Befehls sollte in etwa wie folgt aussehen:\n\n   ```shell\n   Updating ghcr.io/actions-importer/cli:latest...\n   ghcr.io/actions-importer/cli:latest up-to-date\n   ```\n\n## Durchführen einer Überwachung von Azure DevOps\n\nSie können den Befehl `audit` verwenden, um eine allgemeine Ansicht aller Projekte in einer Azure DevOps Organisation zu erhalten.\n\nMit dem Befehl `audit` werden die folgenden Aktionen ausgeführt:\n\n1. Ruft alle in einer Azure DevOps Organisation definierten Projekte ab.\n2. Konvertiert jede Pipeline in den entsprechenden GitHub Actions-Workflow.\n3. Erzeugt einen Bericht, der zusammenfasst, wie vollständig und komplex eine Migration mit GitHub Actions Importer möglich ist.\n\n### Ausführen des Überprüfungsbefehls\n\nUm eine Überwachung einer Azure DevOps Organisation durchzuführen, führen Sie den folgenden Befehl in Ihrem Terminal aus:\n\n```shell\ngh actions-importer audit azure-devops --output-dir tmp/audit\n```\n\n### Untersuchen der Überprüfungsergebnisse\n\nDie Dateien im angegebenen Ausgabeverzeichnis enthalten die Ergebnisse der Überprüfung. Eine Zusammenfassung der Überprüfungsergebnisse findest du in der Datei `audit_summary.md`.\n\nDie Überprüfungszusammenfassung enthält die folgenden Abschnitte.\n\n#### Pipelines\n\nDer Abschnitt „Pipelines“ enthält eine allgemeine Statistik zur Konvertierungsrate durch den GitHub Actions Importer.\n\nIm Folgenden sind einige wichtige Begriffe aufgeführt, die im Abschnitt „Pipelines“ enthalten sein können:\n\n* Bei **erfolgreichen** Pipelines wurden 100 % der Pipelinekonstrukte und Einzelelemente automatisch in ihre GitHub Actions-Entsprechung konvertiert.\n* Bei **teilweise erfolgreichen** Pipelines wurden zwar alle Pipelinekonstrukte, aber nicht alle Einzelelemente automatisch in ihre GitHub Actions-Entsprechung konvertiert.\n* **Nicht unterstützte** Pipelines sind Definitionstypen, die vom GitHub Actions Importer nicht unterstützt werden.\n* Bei **fehlerhaften** Pipelines ist beim Konvertieren ein schwerwiegender Fehler aufgetreten. Dies kann aus drei Gründen auftreten:\n  * Die Pipeline war ursprünglich falsch konfiguriert und nicht gültig.\n  * Der GitHub Actions Importer hat beim Konvertieren ein interner Fehler festgestellt.\n  * Es gab eine nicht erfolgreiche Netzwerkantwort, die dazu führte, dass auf die Pipeline nicht zugegriffen werden konnte. Dies ist häufig auf ungültige Anmeldeinformationen zurückzuführen.\n\n#### Buildschritte\n\nDer Abschnitt „Buildschritte“ enthält eine Übersicht über die einzelnen Buildschritte, die in allen Pipelines verwendet werden, und darüber, wie viele davon vom GitHub Actions Importer automatisch konvertiert wurden.\n\nIm Folgenden sind einige wichtige Begriffe aufgeführt, die im Abschnitt „Buildschritte“ enthalten sein können:\n\n* Ein **bekannter** Buildschritt ist ein Schritt, der automatisch in eine entsprechende Aktion konvertiert wurde.\n* Ein **unbekannter** Buildschritt ist ein Schritt, der nicht automatisch in eine entsprechende Aktion konvertiert wurde.\n* Ein **nicht unterstützter** Buildschritt ist ein Schritt, für den eine der folgenden Aussagen zutrifft:\n  * Er wird grundsätzlich von GitHub Actions nicht unterstützt.\n  * Seine Konfiguration ist mit GitHub Actions nicht kompatibel.\n* Eine **Aktion** ist eine Liste der Aktionen, die in den konvertierten Workflows verwendet wurden. Dies kann für Folgendes wichtig sein:\n  * Zum Sammeln der Liste der Aktionen, die mit deiner Instanz synchronisiert werden sollen, sofern du GitHub Enterprise Server verwendest\n  * Zum Definieren einer Positivliste der verwendeten Aktionen auf Organisationsebene. Diese Aktionenliste enthält sämtliche Aktionen, die von den Sicherheits- oder Complianceteams möglicherweise überprüft werden müssen.\n\n#### Manuelle Aufgaben\n\nDer Abschnitt „Manuelle Aufgaben“ enthält eine Übersicht über Aufgaben, die der GitHub Actions Importer nicht automatisch ausführen kann und die du manuell ausführen musst.\n\nIm Folgenden sind einige wichtige Begriffe aufgeführt, die im Abschnitt „Manuelle Aufgaben“ enthalten sein können:\n\n* Ein **Geheimnis** gilt auf Repository- oder Organisationsebene und wird in den konvertierten Pipelines verwendet. Diese Geheimnisse müssen manuell in GitHub Actions erstellt werden, damit diese Pipelines ordnungsgemäß funktionieren. Weitere Informationen finden Sie unter [Verwenden von Geheimnissen in GitHub-Aktionen](/de/actions/security-guides/using-secrets-in-github-actions).\n* **Selbstgehosteter Runner** ist eine Bezeichnung für Runner, auf die in einer konvertierten Pipeline verwiesen wird, und die nicht von GitHub gehostet werden. Du musst diese Runner manuell definieren, damit diese Pipelines ordnungsgemäß funktionieren.\n\n#### Dateien\n\nDer letzte Abschnitt des Überprüfungsberichts enthält ein Manifest aller Dateien, die während der Überprüfung auf den Datenträger geschrieben wurden.\n\nFür jede Pipelinedatei werden verschiedene Dateien überprüft, z. B.:\n\n* Die ursprüngliche Pipeline, wie in GitHub definiert\n* Alle Netzwerkantworten, die zum Konvertieren der Pipeline verwendet werden\n* Die konvertierte Workflowdatei\n* Stapelablaufverfolgungen, die zur Problembehandlung bei einer fehlerhaften Pipelinekonvertierung verwendet werden können\n\nDarüber hinaus enthält die Datei `workflow_usage.csv` eine durch Trennzeichen getrennte Liste aller Aktionen, Geheimnisse und Runner, die von jeder erfolgreich konvertierten Pipeline verwendet werden. Dies kann nützlich sein, um zu bestimmen, welche Workflows Aktionen, Geheimnisse oder Runner verwenden, und um Sicherheitsüberprüfungen durchzuführen.\n\n## Potenzielle GitHub Actions-Nutzung vorhersagen\n\nMit dem Befehl `forecast` kannst du die potenzielle GitHub Actions-Nutzung vorhersagen, indem du Metriken aus abgeschlossenen Pipelineausführungen in Azure DevOps berechnest.\n\n### Ausführen des Vorhersagebefehls\n\nFühre den folgenden Befehl am Terminal aus, um die potenzielle GitHub Actions-Nutzung vorherzusagen. Standardmäßig umfasst der Vorhersagebericht von GitHub Actions Importer die letzten sieben Tage.\n\n```shell\ngh actions-importer forecast azure-devops --output-dir tmp/forecast_reports\n```\n\n### Überprüfen des Prognoseberichts\n\nDie Datei `forecast_report.md` im angegebenen Ausgabeverzeichnis enthält die Ergebnisse der Vorhersage.\n\nIm Folgenden sind einige wichtige Begriffe aufgeführt, die im Vorhersagebericht enthalten sein können:\n\n* Die **Auftragsanzahl** ist die Gesamtanzahl der abgeschlossenen Aufträge.\n* Die **Pipelineanzahl** ist die Anzahl der verwendeten eindeutigen Pipelines.\n* Die **Ausführungszeit** ist die Zeit, die ein Runner für einen Auftrag aufgewendet hat. Mithilfe dieser Metrik können die Kosten für Runner, die von GitHub gehostet werden, geplant werden.\n\n  Diese Metrik korreliert damit, wie viel Sie als Ausgaben in GitHub Actions einplanen sollten. Dies wird je nach der für diese Minuten verwendeten Hardware variieren. Du kannst den [Preisrechner für GitHub Actions](https://github.com/pricing/calculator) verwenden, um die Kosten zu schätzen.\n* Metriken zur **Warteschlangenzeit** beschreiben die Zeit, die ein Auftrag in der Warteschlange verbringt, bis ein Runner zur Ausführung verfügbar ist.\n* Metriken zu **gleichzeitigen Aufträgen** beschreiben die Anzahl der Aufträge, die zu einem bestimmten Zeitpunkt ausgeführt werden. Mithilfe dieser Metrik kann die Anzahl von Runnern definiert werden, die du konfigurieren solltest.\n\nDarüber hinaus werden diese Metriken für jede Warteschlange von Läufern in Azure DevOps definiert. Dies ist besonders nützlich, wenn es eine Mischung aus gehosteten oder selbstgehosteten Runnern oder Computern mit hoher oder niedriger Leistung gibt, da du spezifische Metriken für verschiedene Runnertypen anzeigen kannst.\n\n## Ausführen eines Probeimports\n\nSie können den Befehl `dry-run` verwenden, um eine Azure DevOps-Pipeline in einen entsprechenden GitHub Actions-Ablauf zu konvertieren. Bei einem Probelauf werden die Ausgabedateien in einem angegebenen Verzeichnis erstellt, aber es wird kein Pull-Request für die Migration der Pipeline gestellt.\n\nWenn der GitHub Actions Importer etwas nicht automatisch konvertieren konnte (z. B. unbekannte Buildschritte oder eine teilweise erfolgreiche Pipeline), solltest du benutzerdefinierte Transformatoren erstellen, um den Konvertierungsprozess präziser anzupassen. Weitere Informationen finden Sie unter [Das Erweitern des GitHub Actions Importers mit benutzerdefinierten Transformatoren](/de/actions/migrating-to-github-actions/automated-migrations/extending-github-actions-importer-with-custom-transformers).\n\n### Ausführen des Probelaufbefehls für eine Buildpipeline\n\nFühre für eine Probelaufmigration deiner Azure DevOps-Buildpipeline zu GitHub Actions den folgenden Befehl am Terminal aus, und ersetze dabei `pipeline_id` durch die ID der Pipeline, die du konvertieren möchtest.\n\n```shell\ngh actions-importer dry-run azure-devops pipeline --pipeline-id :pipeline_id --output-dir tmp/dry-run\n```\n\nSie können die Protokolle des Probelaufs und die konvertierten Workflowdateien im angegebenen Ausgabeverzeichnis überprüfen.\n\n### Ausführen des Probelaufbefehls für eine Releasepipeline\n\nFühre für eine Probelaufmigration deiner Azure DevOps-Releasepipeline zu GitHub Actions den folgenden Befehl am Terminal aus, und ersetze dabei `pipeline_id` durch die ID der Pipeline, die du konvertieren möchtest.\n\n```shell\ngh actions-importer dry-run azure-devops release --pipeline-id :pipeline_id --output-dir tmp/dry-run\n```\n\nSie können die Protokolle des Probelaufs und die konvertierten Workflowdateien im angegebenen Ausgabeverzeichnis überprüfen.\n\n## Ausführen einer Produktionsmigration\n\nSie können den Befehl `migrate` verwenden, um eine Azure DevOps Pipeline zu konvertieren und eine Pullanforderung mit dem entsprechenden GitHub Actions Workflow zu öffnen.\n\n### Ausführen des Migrationsbefehls für eine Buildpipeline\n\nUm eine Azure DevOps Build-Pipeline zu GitHub Actions zu migrieren, führen Sie den folgenden Befehl in Ihrem Terminal aus, indem Sie den Wert `target-url` durch die URL Ihres GitHub Repositorys und `pipeline_id` durch die ID der zu konvertierenden Pipeline ersetzen.\n\n```shell\ngh actions-importer migrate azure-devops pipeline --pipeline-id :pipeline_id --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate\n```\n\nDie Ausgabe des Befehls enthält die URL zum Pull Request, der den konvertierten Workflow deinem Repository hinzufügt. Beispiel für eine erfolgreiche Ausgabe:\n\n```shell\n$ gh actions-importer migrate azure-devops pipeline --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate --azure-devops-project my-azure-devops-project\n[2022-08-20 22:08:20] Logs: 'tmp/migrate/log/actions-importer-20220916-014033.log'\n[2022-08-20 22:08:20] Pull request: 'https://github.com/octo-org/octo-repo/pull/1'\n```\n\n### Ausführen des Migrationsbefehls für eine Releasepipeline\n\nUm eine Azure DevOps Releasepipeline zu GitHub Actions zu migrieren, führen Sie den folgenden Befehl in Ihrem Terminal aus, ersetzen Sie den wert `target-url` durch die URL für Ihr GitHub Repository und `pipeline_id` durch die ID der Pipeline, die Sie konvertieren.\n\n```shell\ngh actions-importer migrate azure-devops release --pipeline-id :pipeline_id --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate\n```\n\nDie Ausgabe des Befehls enthält die URL zum Pull Request, der den konvertierten Workflow deinem Repository hinzufügt. Beispiel für eine erfolgreiche Ausgabe:\n\n```shell\n$ gh actions-importer migrate azure-devops release --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate --azure-devops-project my-azure-devops-project\n[2022-08-20 22:08:20] Logs: 'tmp/migrate/log/actions-importer-20220916-014033.log'\n[2022-08-20 22:08:20] Pull request: 'https://github.com/octo-org/octo-repo/pull/1'\n```\n\n### Überprüfen des Pull Requests\n\nDie Ausgabe einer erfolgreichen Ausführung des Befehls `migrate` enthält einen Link zum neuen Pull Request, mit dem der konvertierte Workflow deinem Repository hinzugefügt wird.\n\nWichtige Elemente des Pull Requests:\n\n* In der Beschreibung des Pull Requests findest du den Abschnitt **Manuelle Schritte**, in dem Schritte aufgeführt sind, die du manuell ausführen musst, um die Migration deiner Pipelines zu GitHub Actions abschließen zu können. In diesem Abschnitt könnte z. B. stehen, dass du Geheimnisse erstellen musst, die im Workflows verwendet werden.\n* Die konvertierte Workflowdatei Wähle im Pull Request die Registerkarte **Files changed** aus, um die Workflowdatei anzuzeigen, die deinem GitHub-Repository hinzugefügt wird.\n\nNachdem du den Pull Request überprüft hast, kannst du ihn zusammenführen, um den Workflow deinem GitHub-Repository hinzuzufügen.\n\n## Verweis\n\nDieser Abschnitt enthält Referenzinformationen zu Umgebungsvariablen, optionalen Argumenten und unterstützter Syntax, wenn GitHub Actions Importer zum Migrieren aus Azure DevOps verwendet werden.\n\n### Umgebungsvariablen für die Konfiguration\n\nGitHub Actions Importer verwendet Umgebungsvariablen für die Konfiguration der Authentifizierung. Diese Variablen werden beim Ausführen des Konfigurationsvorgangs mithilfe des Befehls `configure` festgelegt. Weitere Informationen findest du im Abschnitt [Konfigurieren von Anmeldeinformationen](#configuring-credentials).\n\nGitHub Actions Importer verwendet die folgenden Umgebungsvariablen, um eine Verbindung mit Ihrer Azure DevOps-Instanz herzustellen.\n\n* ```\n            `GITHUB_ACCESS_TOKEN`: Das personal access token (classic) zum Erstellen von Pull Requests mit einem konvertierten Workflow (erfordert den Bereich `workflow`)\n  ```\n* `GITHUB_INSTANCE_URL`: Die URL zur Zielinstanz von GitHub (z. B. `https://github.com`)\n* ```\n            `AZURE_DEVOPS_ACCESS_TOKEN`: Das personal access token zur Authentifizierung bei deiner Azure DevOps-Instanz. Dieses Token erfordert die folgenden Bereiche:\n  ```\n  * Build: `Read`\n  * Agentpools: `Read`\n  * Code: `Read`\n  * Release: `Read`\n  * Dienstverbindungen: `Read`\n  * Taskgruppen: `Read`\n  * Variablengruppen: `Read`\n* `AZURE_DEVOPS_PROJECT`: Der Projektname oder die GUID, der bzw. die bei der Migration einer Pipeline verwendet werden soll. Wenn du eine Überprüfung aller Projekte durchführen möchtest, ist diese Variable optional.\n* `AZURE_DEVOPS_ORGANIZATION`: Der Organisationsname Ihrer Azure DevOps Instanz.\n* `AZURE_DEVOPS_INSTANCE_URL`: Die URL zur Azure DevOps Instanz, z. B. `https://dev.azure.com`.\n\nDiese Umgebungsvariablen können in einer `.env.local`-Datei angegeben werden, die vom GitHub Actions Importer geladen wird, wenn es ausgeführt wird.\n\n### Optionale Argumente\n\nEs gibt einige optionale Argumente, die du mit den Unterbefehlen von GitHub Actions Importer verwenden kannst, um deine Migration anzupassen.\n\n#### `--source-file-path`\n\nDu kannst das `--source-file-path`-Argument mit den Unterbefehlen `forecast`, `dry-run` oder `migrate` verwenden.\n\nStandardmäßig ruft der GitHub Actions Importer Pipelineinhalte aus der Quellcodeverwaltung ab. Das `--source-file-path`-Argument weist den GitHub Actions Importer an, stattdessen den angegebenen Quelldateipfad zu verwenden.\n\nBeispiel:\n\n```shell\ngh actions-importer dry-run azure-devops pipeline --output-dir ./output/ --source-file-path ./path/to/azure_devops/pipeline.yml\n```\n\n#### `--config-file-path`\n\nDu kannst das `--config-file-path`-Argument mit den Unterbefehlen `audit`, `dry-run` und `migrate` verwenden.\n\nStandardmäßig ruft der GitHub Actions Importer Pipelineinhalte aus der Quellcodeverwaltung ab. Das `--config-file-path`-Argument weist den GitHub Actions Importer an, stattdessen die angegebenen Quelldateien zu verwenden.\n\nDas `--config-file-path`-Argument kann auch verwendet werden, um anzugeben, zu welchem Repository ein konvertierter wiederverwendbarer Workflow oder eine zusammengesetzte Aktion migriert werden soll.\n\n##### Beispiel für Prüfung\n\nIn diesem Beispiel verwendet der GitHub Actions Importer die angegebene YAML-Konfigurationsdatei als Quelldatei für eine Überprüfung.\n\n```shell\ngh actions-importer audit azure-devops pipeline --output-dir ./output/ --config-file-path ./path/to/azure_devops/config.yml\n```\n\nUm eine Azure DevOps Instanz mithilfe einer Konfigurationsdatei zu überwachen, muss die Konfigurationsdatei im folgenden Format vorliegen, und jede `repository_slug` muss eindeutig sein:\n\n```yaml\nsource_files:\n  - repository_slug: azdo-project/1\n    path: file.yml\n  - repository_slug: azdo-project/2\n    paths: path.yml\n```\n\nSie können die `repository_slug` für eine Pipeline generieren, indem Sie den namen der Azure DevOps Organisation, den Projektnamen und die Pipeline-ID kombinieren. Beispiel: `my-organization-name/my-project-name/42`.\n\n##### Beispiel für einen Probelauf\n\nIn diesem Beispiel verwendet der GitHub Actions Importer die angegebene YAML-Konfigurationsdatei als Quelldatei für einen Probelauf.\n\nDie Auswahl der Pipeline erfolgt durch einen Abgleich des `repository_slug`-Werts in der Konfigurationsdatei mit dem Wert der Optionen `--azure-devops-organization` und `--azure-devops-project`. Der `path` wird dann verwendet, um die angegebene Quelldatei zu pullen.\n\n```shell\ngh actions-importer dry-run azure-devops pipeline --output-dir ./output/ --config-file-path ./path/to/azure_devops/config.yml\n```\n\n##### Angeben des Repositorys mit konvertierten wiederverwendbaren Workflows und zusammengesetzten Aktionen\n\nGitHub Actions Importer verwendet die YAML-Datei, die für das `--config-file-path`-Argument bereitgestellt wird, um das Repository zu bestimmen, zu dem konvertierte wiederverwendbare Workflows und zusammengesetzten Aktionen migriert werden.\n\nZunächst solltest du eine Überwachung ohne das `--config-file-path`-Argument ausführen:\n\n```shell\ngh actions-importer audit azure-devops --output-dir ./output/\n```\n\nDie Ausgabe dieses Befehls enthält eine Datei namens `config.yml`, die eine Liste aller wiederverwendbaren Workflows und zusammengesetzten Aktionen enthält, die von GitHub Actions Importer konvertiert wurden. Die `config.yml`-Datei kann beispielsweise den folgenden Inhalt aufweisen:\n\n```yaml\nreusable_workflows:\n  - name: my-reusable-workflow.yml\n    target_url: https://github.com/octo-org/octo-repo\n    ref: main\n\ncomposite_actions:\n  - name: my-composite-action.yml\n    target_url: https://github.com/octo-org/octo-repo\n    ref: main\n```\n\nDu kannst mit dieser Datei festlegen, welchem Repository und welcher Referenz ein wiederverwendbarer Workflow oder ein zusammengesetzter Vorgang hinzugefügt werden soll. Dann kannst du mit dem `--config-file-path`-Argument die Datei `config.yml` für GitHub Actions Importer bereitstellen. Beispielsweise kannst du diese Datei verwenden, wenn du einen `migrate`-Befehl ausführst, um einen Pull Request für jedes eindeutige Repository zu öffnen, das in der Konfigurationsdatei definiert ist:\n\n```shell\ngh actions-importer migrate azure-devops pipeline --config-file-path config.yml --target-url https://github.com/my-org/my-repo\n```\n\n### Unterstützte Syntax für Azure DevOps Pipelines\n\nDie folgende Tabelle zeigt den Typ der Eigenschaften, die der GitHub Actions Importer derzeit konvertieren kann.\n\n| Azure Pipelines             | GitHub Actions                                                                                                                             | Status                |\n| :-------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------- | :-------------------- |\n| Bedingung                   | <ul><li>`jobs.<job_id>.if`</li><li>`jobs.<job_id>.steps[*].if`</li></ul>                                                                   | Unterstützt           |\n| Container                   | <ul><li>`jobs.<job_id>.container`</li><li>`jobs.<job_id>.name`</li></ul>                                                                   | Unterstützt           |\n| kontinuierliche Integration | <ul><li>`on.<push>.<branches>`</li><li>`on.<push>.<tags>`</li><li>`on.<push>.paths`</li></ul>                                              | Unterstützt           |\n| Auftrag                     | <ul><li>`jobs.<job_id>`</li></ul>                                                                                                          | Unterstützt           |\n| Pull-Anfrage                | <ul><li>`on.<pull_request>.<branches>`</li><li>`on.<pull_request>.paths`</li></ul>                                                         | Unterstützt           |\n| Phase                       | <ul><li>`jobs`</li></ul>                                                                                                                   | Unterstützt           |\n| Schritte                    | <ul><li>`jobs.<job_id>.steps`</li></ul>                                                                                                    | Unterstützt           |\n| Strategie                   | <ul><li>`jobs.<job_id>.strategy.fail-fast`</li><li>`jobs.<job_id>.strategy.max-parallel`</li><li>`jobs.<job_id>.strategy.matrix`</li></ul> | Unterstützt           |\n| timeoutInMinutes            | <ul><li>`jobs.<job_id>.timeout-minutes`</li></ul>                                                                                          | Unterstützt           |\n| Variablen                   | <ul><li>`env`</li><li>`jobs.<job_id>.env`</li><li>`jobs.<job_id>.steps.env`</li></ul>                                                      | Unterstützt           |\n| Manuelle Bereitstellung     | <ul><li>`jobs.<job_id>.environment`</li></ul>                                                                                              | Teilweise unterstützt |\n| pool                        | <ul><li>`runners`</li><li>`self hosted runners`</li></ul>                                                                                  | Teilweise unterstützt |\n| Dienstleistungen            | <ul><li>`jobs.<job_id>.services`</li></ul>                                                                                                 | Teilweise unterstützt |\n| Strategie                   | <ul><li>`jobs.<job_id>.strategy`</li></ul>                                                                                                 | Teilweise unterstützt |\n| Auslöser                    | <ul><li>`on`</li></ul>                                                                                                                     | Teilweise unterstützt |\n| Pull-Anfrage                | <ul><li>`on.<pull_request>.<tags>`</li></ul>                                                                                               | Nicht unterstützt     |\n| Zeitpläne                   | <ul><li>`on.schedule`</li><li>`on.workflow_run`</li></ul>                                                                                  | Nicht unterstützt     |\n| Auslöser                    | <ul><li>`on.<event_name>.types`</li></ul>                                                                                                  | Nicht unterstützt     |\n\nWeitere Informationen zu unterstützten Azure DevOps Aufgaben finden Sie unter [`github/gh-actions-importer` Repository](https://github.com/github/gh-actions-importer/blob/main/docs/azure_devops/index.md).\n\n### Zuordnung von Umgebungsvariablen\n\nDer GitHub Actions Importer verwendet die Zuordnungen in der folgenden Tabelle, um die Standardumgebungsvariablen von Azure DevOps in die passendsten Entsprechung in GitHub Actions zu konvertieren.\n\n| Azure Pipelines                             | GitHub Actions                                      |\n| :------------------------------------------ | :-------------------------------------------------- |\n| `$(Agent.BuildDirectory)`                   | `${{ runner.workspace }}`                           |\n| `$(Agent.HomeDirectory)`                    | `${{ env.HOME }}`                                   |\n| `$(Agent.JobName)`                          | `${{ github.job }}`                                 |\n| `$(Agent.OS)`                               | `${{ runner.os }}`                                  |\n| `$(Agent.ReleaseDirectory)`                 | `${{ github.workspace}}`                            |\n| `$(Agent.RootDirectory)`                    | `${{ github.workspace }}`                           |\n| `$(Agent.ToolsDirectory)`                   | `${{ runner.tool_cache }}`                          |\n| `$(Agent.WorkFolder)`                       | `${{ github.workspace }}`                           |\n| `$(Build.ArtifactStagingDirectory)`         | `${{ runner.temp }}`                                |\n| `$(Build.BinariesDirectory)`                | `${{ github.workspace }}`                           |\n| `$(Build.BuildId)`                          | `${{ github.run_id }}`                              |\n| `$(Build.BuildNumber)`                      | `${{ github.run_number }}`                          |\n| `$(Build.DefinitionId)`                     | `${{ github.workflow }}`                            |\n| `$(Build.DefinitionName)`                   | `${{ github.workflow }}`                            |\n| `$(Build.PullRequest.TargetBranch)`         | `${{ github.base_ref }}`                            |\n| `$(Build.PullRequest.TargetBranch.Name)`    | `${{ github.base_ref }}`                            |\n| `$(Build.QueuedBy)`                         | `${{ github.actor }}`                               |\n| `$(Build.Reason)`                           | `${{ github.event_name }}`                          |\n| `$(Build.Repository.LocalPath)`             | `${{ github.workspace }}`                           |\n| `$(Build.Repository.Name)`                  | `${{ github.repository }}`                          |\n| `$(Build.Repository.Provider)`              | `GitHub`                                            |\n| `$(Build.Repository.Uri)`                   | `${{ github.server.url }}/${{ github.repository }}` |\n| `$(Build.RequestedFor)`                     | `${{ github.actor }}`                               |\n| `$(Build.SourceBranch)`                     | `${{ github.ref }}`                                 |\n| `$(Build.SourceBranchName)`                 | `${{ github.ref }}`                                 |\n| `$(Build.SourceVersion)`                    | `${{ github.sha }}`                                 |\n| `$(Build.SourcesDirectory)`                 | `${{ github.workspace }}`                           |\n| `$(Build.StagingDirectory)`                 | `${{ runner.temp }}`                                |\n| `$(Pipeline.Workspace)`                     | `${{ runner.workspace }}`                           |\n| `$(Release.DefinitionEnvironmentId)`        | `${{ github.job }}`                                 |\n| `$(Release.DefinitionId)`                   | `${{ github.workflow }}`                            |\n| `$(Release.DefinitionName)`                 | `${{ github.workflow }}`                            |\n| `$(Release.Deployment.RequestedFor)`        | `${{ github.actor }}`                               |\n| `$(Release.DeploymentID)`                   | `${{ github.run_id }}`                              |\n| `$(Release.EnvironmentId)`                  | `${{ github.job }}`                                 |\n| `$(Release.EnvironmentName)`                | `${{ github.job }}`                                 |\n| `$(Release.Reason)`                         | `${{ github.event_name }}`                          |\n| `$(Release.RequestedFor)`                   | `${{ github.actor }}`                               |\n| `$(System.ArtifactsDirectory)`              | `${{ github.workspace }}`                           |\n| `$(System.DefaultWorkingDirectory)`         | `${{ github.workspace }}`                           |\n| `$(System.HostType)`                        | `build`                                             |\n| `$(System.JobId)`                           | `${{ github.job }}`                                 |\n| `$(System.JobName)`                         | `${{ github.job }}`                                 |\n| `$(System.PullRequest.PullRequestId)`       | `${{ github.event.number }}`                        |\n| `$(System.PullRequest.PullRequestNumber)`   | `${{ github.event.number }}`                        |\n| `$(System.PullRequest.SourceBranch)`        | `${{ github.ref }}`                                 |\n| `$(System.PullRequest.SourceRepositoryUri)` | `${{ github.server.url }}/${{ github.repository }}` |\n| `$(System.PullRequest.TargetBranch)`        | `${{ github.event.base.ref }}`                      |\n| `$(System.PullRequest.TargetBranchName)`    | `${{ github.event.base.ref }}`                      |\n| `$(System.StageAttempt)`                    | `${{ github.run_number }}`                          |\n| `$(System.TeamFoundationCollectionUri)`     | `${{ github.server.url }}/${{ github.repository }}` |\n| `$(System.WorkFolder)`                      | `${{ github.workspace }}`                           |\n\n### Vorlagen\n\nDu kannst Azure DevOps-Vorlagen mit dem GitHub Actions Importer transformieren.\n\n#### Einschränkungen\n\nGitHub Actions Importer kann Azure DevOps Vorlagen mit einigen Einschränkungen umwandeln.\n\n* Azure DevOps Vorlagen, die unter den `stages`, `deployments` und `jobs` Schlüsseln verwendet werden, werden in wiederverwendbare Workflows in GitHub Actions konvertiert. Weitere Informationen finden Sie unter [Wiederverwenden von Workflows](/de/actions/using-workflows/reusing-workflows).\n* Azure DevOps Vorlagen, die unter dem Schlüssel `steps` verwendet werden, werden in zusammengesetzte Aktionen konvertiert. Weitere Informationen finden Sie unter [Erstellen einer zusammengesetzten Aktion](/de/actions/creating-actions/creating-a-composite-action).\n* Wenn du derzeit über Auftragsvorlagen verfügen, die auf andere Auftragsvorlagen verweisen, konvertiert der GitHub Actions Importer die Vorlagen in wiederverwendbare Workflows. Da wiederverwendbare Workflows nicht auf andere wiederverwendbare Workflows verweisen können, ist diese Syntax in GitHub Actions ungültig. Sie müssen geschachtelte wiederverwendbare Workflows manuell korrigieren.\n* Wenn eine Vorlage auf eine externe Azure DevOps Organisation oder GitHub Repository verweist, müssen Sie die Option `--credentials-file` verwenden, um Anmeldeinformationen für den Zugriff auf diese Vorlage bereitzustellen. Weitere Informationen finden Sie unter [Zusätzliche Argumente und Einstellungen](/de/actions/migrating-to-github-actions/automated-migrations/supplemental-arguments-and-settings#using-a-credentials-file-for-authentication).\n* Du kannst dynamisch mithilfe von `each`-Ausdrücken YAML-Code generieren. Dabei gelten die folgenden Einschränkungen:\n  * Geschachtelte `each`-Blöcke werden nicht unterstützt und führen dazu, dass der übergeordnete `each`-Block nicht unterstützt wird.\n  * `each`- und enthaltene `if`-Bedingungen werden zur Transformationszeit ausgewertet, da GitHub Actions diesen Stil der Einfügung nicht unterstützt.\n  * `elseif`-Blöcke werden nicht unterstützt. Wenn diese Funktionalität erforderlich ist, musst du sie manuell korrigieren.\n  * Geschachtelte `if`-Blöcke werden unterstützt, `if/elseif/else`-Blöcke, die unter einer `if`-Bedingung geschachtelt sind, hingegen nicht.\n  * `if`-Blöcke, die vordefinierte Azure DevOps Variablen verwenden, werden nicht unterstützt.\n\n#### Unterstützte Vorlagen\n\nDer GitHub Actions Importer unterstützt die Vorlagen, die in der folgenden Tabelle aufgeführt sind.\n\n| Azure Pipelines                                                                    | GitHub Actions      |      Status |\n| :--------------------------------------------------------------------------------- | :------------------ | ----------: |\n| Erweitern aus einer Vorlage                                                        | `Reusable workflow` | Unterstützt |\n| Auftragsvorlagen                                                                   | `Reusable workflow` | Unterstützt |\n| Stage-Vorlagen                                                                     | `Reusable workflow` | Unterstützt |\n| Schrittvorlagen                                                                    | `Composite action`  | Unterstützt |\n| Taskgruppen im klassischen Editor                                                  | Variiert            | Unterstützt |\n| Vorlagen in einer anderen Azure DevOps Organisation, einem Projekt oder repository | Variiert            | Unterstützt |\n| Vorlagen in einem GitHub-Repository                                                | Variiert            | Unterstützt |\n| Vorlagen für Variablen                                                             | `env`               | Unterstützt |\n| Bedingte Einfügung                                                                 |                     |             |\n\n```\n          `if` Bedingungen für Jobs/Schritte          | Teilweise unterstützt |\n```\n\n\\| Iterative Einfügung           | Nicht anwendbar                        | Teilweise unterstützt |\n\\| Vorlagen mit Parametern     | Variiert                                | Teilweise unterstützt |\n\n#### Pfadnamen der Vorlagendatei\n\nDer GitHub Actions Importer kann Vorlagen mit relativen oder dynamischen Dateipfaden mit Variablen, Parametern und iterativen Ausdrücken im Dateinamen extrahieren. Es muss jedoch ein Standardwert festgelegt werden.\n\n##### Beispiel für einen variablen Dateipfadnamen\n\n```yaml\n# File: azure-pipelines.yml\nvariables:\n- template: 'templates/vars.yml'\n\nsteps:\n- template: \"./templates/$\"\n```\n\n```yaml\n# File: templates/vars.yml\nvariables:\n  one: 'simple_step.yml'\n```\n\n##### Beispiel für den Pfadnamen einer Parameterdatei\n\n```yaml\nparameters:\n- name: template\n  type: string\n  default: simple_step.yml\n\nsteps:\n- template: \"./templates/${{ parameters.template }}\"\n```\n\n##### Beispiel für den Pfadnamen einer iterativen Datei\n\n```yaml\nparameters:\n- name: steps\n  type: object\n  default:\n  - build_step\n  - release_step\nsteps:\n- ${{ each step in parameters.steps }}:\n    - template: \"$-variables.yml\"\n```\n\n#### Vorlagenparameter\n\nDer GitHub Actions Importer unterstützt Parameter, die in der folgenden Tabelle aufgeführt sind.\n\n| Azure Pipelines      | GitHub Actions                          | Status                |\n| :------------------- | :-------------------------------------- | :-------------------- |\n| Zeichenfolge         | `inputs.string`                         | Unterstützt           |\n| Anzahl               | `inputs.number`                         | Unterstützt           |\n| boolean              | `inputs.boolean`                        | Unterstützt           |\n| Objekt               | `inputs.string` mit `fromJSON`-Ausdruck | Teilweise unterstützt |\n| Schritt              | `step`                                  | Teilweise unterstützt |\n| SchrittListe         | `step`                                  | Teilweise unterstützt |\n| Auftrag              | `job`                                   | Teilweise unterstützt |\n| Jobliste             | `job`                                   | Teilweise unterstützt |\n| Bereitstellung       | `job`                                   | Teilweise unterstützt |\n| Bereitstellungsliste | `job`                                   | Teilweise unterstützt |\n| Phase                | `job`                                   | Teilweise unterstützt |\n| PhasenListe          | `job`                                   | Teilweise unterstützt |\n\n> \\[!NOTE]\n> Eine Vorlage, die unter dem `step`-Schlüssel mit diesem Parametertyp verwendet wird, wird nur dann als zusammengesetzte Aktion serialisiert, wenn die Schritte am Anfang oder Ende der Vorlagenschritte ausgeführt werden. Eine Vorlage, die unter den Schlüsseln `stage`, `deployment` und `job` mit diesem Parametertyp verwendet wird, wird nicht in einen wiederverwendbaren Workflow transformiert, sondern stattdessen als eigenständiger Workflow serialisiert.\n\n## Rechtliche Hinweise\n\nTeile wurden von <https://github.com/github/gh-actions-importer/> unter der MIT-Lizenz übernommen:\n\n```text\nMIT License\n\nCopyright (c) 2022 GitHub\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n```"}