Informationen zum Migrieren von Azure DevOps mit dem GitHub Actions Importer
In den folgenden Anweisungen erfährst du, wie du deine Umgebung so konfigurierst, dass der GitHub Actions Importer zum Migrieren von Azure DevOps-Pipelines zu GitHub Actions verwendet wird.
Voraussetzungen
-
Ein Azure DevOps-Konto oder eine Organisation mit Projekten und Pipelines, die du in GitHub Actions-Workflows konvertieren möchtest
-
Zugriffsberechtigungen zum Erstellen eines Azure DevOps-personal access tokens für dein Konto oder deine Organisation
-
Eine Umgebung, in der du Linux-basierte Container ausführen und die erforderlichen Tools installieren kannst:
- Docker ist installiert und wird ausgeführt.
- Die GitHub-CLI ist installiert.
Hinweis: Der GitHub Actions Importer-Container und die CLI müssen nicht auf demselben Server wie deine CI-Plattform installiert werden.
Einschränkungen
Bei der Migration von Azure DevOps zu GitHub Actions mit dem GitHub Actions Importer gelten einige Einschränkungen:
- 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.
- 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 Anzeigenamen einer Task für eine GUID zu ermitteln, kannst du die folgende URL verwenden:
https://dev.azure.com/:organization/_apis/distributedtask/tasks/:guid
.
Manuelle Aufgaben
Bestimmte Azure DevOps-Konstrukte müssen manuell von Azure DevOps zu GitHub Actions-Konfigurationen migriert werden. Dazu gehören:
- Organisations-, Repository- und Umgebungsgeheimnisse
- Dienstverbindungen wie OIDC Connect, GitHub Apps und personal access tokens
- Unbekannte Tasks
- Selbstgehostete Agents
- Umgebungen
- Genehmigungen vor der Bereitstellung
Weitere Informationen zur manuellen Migration findest du unter Von Azure-Pipelines zu GitHub-Aktionen migrieren.
Nicht unterstützte Tasks
Der GitHub Actions Importer unterstützt die Migration der folgenden Tasks nicht:
- Gates vor der Bereitstellung
- Gates nach der Bereitstellung
- Genehmigungen nach der Bereitstellung
- Einige Ressourcentrigger
Installieren der GitHub Actions Importer-CLI-Erweiterung
-
So installierst du die GitHub Actions Importer-CLI-Erweiterung:
Bash gh extension install github/gh-actions-importer
gh extension install github/gh-actions-importer
-
Überprüfe, ob die Erweiterung installiert ist:
$ gh actions-importer -h Options: -?, -h, --help Show help and usage information Commands: update Update to the latest version of GitHub Actions Importer. version Display the version of GitHub Actions Importer. configure Start an interactive prompt to configure credentials used to authenticate with your CI server(s). audit Plan your CI/CD migration by analyzing your current CI/CD footprint. forecast Forecast GitHub Actions usage from historical pipeline utilization. dry-run Convert a pipeline to a GitHub Actions workflow and output its yaml file. migrate Convert a pipeline to a GitHub Actions workflow and open a pull request with the changes.
Konfigurieren von Anmeldeinformationen
Mit dem CLI-Befehl configure
werden die erforderlichen Anmeldeinformationen und Optionen für den GitHub Actions Importer beim Arbeiten mit Azure DevOps und GitHub festgelegt.
-
Erstelle ein GitHub-personal access token (classic). Weitere Informationen findest du unter Verwalten deiner persönlichen Zugriffstoken.
Ihr Token muss als Bereich
workflow
verwenden.Kopiere das Token nach dem Erstellen zur späteren Verwendung an einen sicheren Speicherort.
-
Erstelle ein Azure DevOps-personal access token. Weitere Informationen findest du in der Azure DevOps-Dokumentation unter Verwenden von personal access tokens. Das Token muss die folgenden Bereiche umfassen:
- Agentspool:
Read
- Build:
Read
- Code:
Read
- Release:
Read
- Dienstverbindungen:
Read
- Taskgruppen:
Read
- Variablengruppen:
Read
Kopiere das Token nach dem Erstellen zur späteren Verwendung an einen sicheren Speicherort.
- Agentspool:
-
Führe am Terminal in der GitHub Actions Importer CLI den Befehl
configure
aus:gh actions-importer configure
Sie werden vom Befehl
configure
zur Eingabe folgender Informationen aufgefordert:- Wähle unter der Frage nach dem CI-Anbieter mithilfe der Pfeiltasten
Azure DevOps
aus, drücke die LEERTASTE, um die Option zu markieren, und drücke dann die EINGABETASTE. - 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 EINGABETASTE.
- Unter „Basis-URL der GitHub-Instanz“ drücken Sie die EINGABETASTE, um den Standardwert (
https://github.com
) zu übernehmen. - Gib für „Personal access token für Azure DevOps“ den Wert des Azure DevOps-personal access token ein, das du zuvor erstellt hast, und drücke die EINGABETASTE.
- Drücke bei „Basis-URL der Azure DevOps-Instanz“ die EINGABETASTE, um den Standardwert (
https://dev.azure.com
) zu akzeptieren. - Gib als „Name der Azure DevOps-Organisation“ den Namen für deine Azure DevOps-Organisation ein, und drücke die EINGABETASTE.
- Gib als „Name des Azure DevOps-Projekts“ den Namen für dein Azure DevOps-Projekt ein, und drücke die EINGABETASTE.
Ein Beispiel für den Befehl
configure
:$ gh actions-importer configure ✔ Which CI providers are you configuring?: Azure DevOps Enter the following values (leave empty to omit): ✔ Personal access token for GitHub: *************** ✔ Base url of the GitHub instance: https://github.com ✔ Personal access token for Azure DevOps: *************** ✔ Base url of the Azure DevOps instance: https://dev.azure.com ✔ Azure DevOps organization name: :organization ✔ Azure DevOps project name: :project Environment variables successfully updated.
- Wähle unter der Frage nach dem CI-Anbieter mithilfe der Pfeiltasten
-
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:gh actions-importer update
Die Ausgabe dieses Befehls sollte in etwa wie folgt aussehen:
Updating ghcr.io/actions-importer/cli:latest... ghcr.io/actions-importer/cli:latest up-to-date
Überprüfen von Azure DevOps
Mit dem Befehl audit
rufst du allgemeine Informationen zu allen Projekten in einer Azure DevOps-Organisation ab.
Mit dem Befehl audit
werden die folgenden Aktionen ausgeführt:
- Abrufen aller in einer Azure DevOps-Organisation definierten Projekte
- Konvertieren aller Pipelines in den entsprechenden GitHub Actions-Workflow
- Generieren eines Zusammenfassungsberichts darüber, wie vollständig und komplex eine Migration mit GitHub Actions Importer wäre
Ausführen des Überprüfungsbefehls
Führe den folgenden Befehl am Terminal aus, um eine Azure DevOps-Organisation zu überprüfen:
gh actions-importer audit azure-devops --output-dir tmp/audit
Untersuchen der Überprüfungsergebnisse
Die Dateien im angegebenen Ausgabeverzeichnis enthalten die Ergebnisse der Überprüfung. Eine Zusammenfassung der Überprüfungsergebnisse findest du in der Datei audit_summary.md
.
Die Überprüfungszusammenfassung enthält die folgenden Abschnitte.
Pipelines
Der Abschnitt „Pipelines“ enthält eine allgemeine Statistik zur Konvertierungsrate durch den GitHub Actions Importer.
Im Folgenden sind einige wichtige Begriffe aufgeführt, die im Abschnitt „Pipelines“ enthalten sein können:
- Bei erfolgreichen Pipelines wurden 100 % der Pipelinekonstrukte und Einzelelemente automatisch in ihre GitHub Actions-Entsprechung konvertiert.
- Bei teilweise erfolgreichen Pipelines wurden zwar alle Pipelinekonstrukte, aber nicht alle Einzelelemente automatisch in ihre GitHub Actions-Entsprechung konvertiert.
- Nicht unterstützte Pipelines sind Definitionstypen, die vom GitHub Actions Importer nicht unterstützt werden.
- Bei fehlerhaften Pipelines ist beim Konvertieren ein schwerwiegender Fehler aufgetreten. Dies kann aus drei Gründen auftreten:
- Die Pipeline war ursprünglich falsch konfiguriert und nicht gültig.
- Der GitHub Actions Importer hat beim Konvertieren ein interner Fehler festgestellt.
- 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.
Buildschritte
Der 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.
Im Folgenden sind einige wichtige Begriffe aufgeführt, die im Abschnitt „Buildschritte“ enthalten sein können:
- Ein bekannter Buildschritt ist ein Schritt, der automatisch in eine entsprechende Aktion konvertiert wurde.
- Ein unbekannter Buildschritt ist ein Schritt, der nicht automatisch in eine entsprechende Aktion konvertiert wurde.
- Ein nicht unterstützter Buildschritt ist ein Schritt, für den eine der folgenden Aussagen zutrifft:
- Er wird grundsätzlich von GitHub Actions nicht unterstützt.
- Seine Konfiguration ist mit GitHub Actions nicht kompatibel.
- Eine Aktion ist eine Liste der Aktionen, die in den konvertierten Workflows verwendet wurden. Dies kann für Folgendes wichtig sein:
- Zum Sammeln der Liste der Aktionen, die mit deiner Instanz synchronisiert werden sollen, sofern du GitHub Enterprise Server verwendest
- 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.
Manuelle Aufgaben
Der 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.
Im Folgenden sind einige wichtige Begriffe aufgeführt, die im Abschnitt „Manuelle Aufgaben“ enthalten sein können:
- 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 findest du unter Verwenden von Geheimnissen in GitHub-Aktionen.
- 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.
Dateien
Der letzte Abschnitt des Überprüfungsberichts enthält ein Manifest aller Dateien, die während der Überprüfung auf den Datenträger geschrieben wurden.
Für jede Pipelinedatei werden verschiedene Dateien überprüft, z. B.:
- Die ursprüngliche Pipeline, wie in GitHub definiert
- Alle Netzwerkantworten, die zum Konvertieren der Pipeline verwendet werden
- Die konvertierte Workflowdatei
- Stapelablaufverfolgungen, die zur Problembehandlung bei einer fehlerhaften Pipelinekonvertierung verwendet werden können
Darü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.
Vorhersagen der potenziellen GitHub Actions-Nutzung
Mit dem Befehl forecast
kannst du die potenzielle GitHub Actions-Nutzung vorhersagen, indem du Metriken aus abgeschlossenen Pipelineausführungen in Azure DevOps berechnest.
Ausführen des Vorhersagebefehls
Fü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.
gh actions-importer forecast azure-devops --output-dir tmp/forecast_reports
Überprüfen des Prognoseberichts
Die Datei forecast_report.md
im angegebenen Ausgabeverzeichnis enthält die Ergebnisse der Vorhersage.
Im Folgenden sind einige wichtige Begriffe aufgeführt, die im Vorhersagebericht enthalten sein können:
-
Die Auftragsanzahl ist die Gesamtanzahl der abgeschlossenen Aufträge.
-
Die Pipelineanzahl ist die Anzahl der verwendeten eindeutigen Pipelines.
-
Die Ausführungszeit ist die Zeit, die ein Runner für einen Auftrag aufgewendet hat. Mithilfe dieser Metrik können die Kosten für von GitHub gehosteten Runnern geplant werden.
Diese Metrik korreliert damit, wie viel Sie als Ausgaben in GitHub Actions einplanen sollten. Dies hängt von der Hardware ab, die für diese Ausführungszeit verwendet wurde. Du kannst den Preisrechner für GitHub Actions verwenden, um die Kosten zu schätzen.
-
Metriken zur Warteschlangenzeit beschreiben die Zeit, die ein Auftrag darauf wartet, dass ein Runner für die Ausführung verfügbar ist.
-
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.
Darüber hinaus werden diese Metriken für jede Runnerwarteschlange 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.
Ausführen eines Probeimports
Mit dem Befehl dry-run
kannst du eine Azure DevOps-Pipeline in einen entsprechenden GitHub Actions-Workflow konvertieren. Bei einem Probelauf werden nur die Ausgabedateien in einem angegebenen Verzeichnis erstellt, aber kein Pull Request zum Migrieren der Pipeline erstellt.
Wenn 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 findest du unter Erweitern von GitHub Actions Importer mit benutzerdefinierten Transformatoren.
Ausführen des Probelaufbefehls für eine Buildpipeline
Fü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.
gh actions-importer dry-run azure-devops pipeline --pipeline-id :pipeline_id --output-dir tmp/dry-run
Du kannst die Protokolle des Probelaufs und die konvertierten Workflowdateien im angegebenen Ausgabeverzeichnis überprüfen.
Ausführen des Probelaufbefehls für eine Releasepipeline
Fü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.
gh actions-importer dry-run azure-devops release --pipeline-id :pipeline_id --output-dir tmp/dry-run
Du kannst die Protokolle des Probelaufs und die konvertierten Workflowdateien im angegebenen Ausgabeverzeichnis überprüfen.
Ausführen einer Produktionsmigration
Mit dem Befehl migrate
kannst du eine Azure DevOps-Pipeline in einen entsprechenden GitHub Actions-Workflow konvertieren und einen Pull Request erstellen.
Ausführen des Migrationsbefehls für eine Buildpipeline
Um eine Azure DevOps-Buildpipeline zu GitHub Actions zu migrieren, führst du den folgenden Befehl am Terminal aus, und ersetzt dabei den Wert von target-url
durch die URL deines GitHub-Repositorys und pipeline_id
durch die ID der Pipeline, die du konvertieren möchtest.
gh actions-importer migrate azure-devops pipeline --pipeline-id :pipeline_id --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate
Die Ausgabe des Befehls enthält die URL zum Pull Request, der den konvertierten Workflow deinem Repository hinzufügt. Beispiel für eine erfolgreiche Ausgabe:
$ 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
[2022-08-20 22:08:20] Logs: 'tmp/migrate/log/actions-importer-20220916-014033.log'
[2022-08-20 22:08:20] Pull request: 'https://github.com/octo-org/octo-repo/pull/1'
Ausführen des Migrationsbefehls für eine Releasepipeline
Um eine Azure DevOps-Releasepipeline zu GitHub Actions zu migrieren, führst du den folgenden Befehl am Terminal aus, und ersetzt dabei den Wert von target-url
durch die URL deines GitHub-Repositorys und pipeline_id
durch die ID der Pipeline, die du migrieren möchtest.
gh actions-importer migrate azure-devops release --pipeline-id :pipeline_id --target-url https://github.com/octo-org/octo-repo --output-dir tmp/migrate
Die Ausgabe des Befehls enthält die URL zum Pull Request, der den konvertierten Workflow deinem Repository hinzufügt. Beispiel für eine erfolgreiche Ausgabe:
$ 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
[2022-08-20 22:08:20] Logs: 'tmp/migrate/log/actions-importer-20220916-014033.log'
[2022-08-20 22:08:20] Pull request: 'https://github.com/octo-org/octo-repo/pull/1'
Überprüfen des Pull Requests
Die 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.
Wichtige Elemente des Pull Requests:
- 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.
- Die konvertierte Workflowdatei Wähle im Pull Request die Registerkarte Geänderte Dateien aus, um die Workflowdatei anzuzeigen, die deinem GitHub Enterprise Cloud-Repository hinzugefügt wird.
Nachdem du den Pull Request überprüft hast, kannst du ihn zusammenführen, um den Workflow deinem GitHub Enterprise Cloud-Repository hinzuzufügen.
Verweis
Dieser Abschnitt enthält Verweisinformationen zu Umgebungsvariablen, optionalen Argumenten und der unterstützten Syntax, wenn der GitHub Actions Importer für die Migration aus Azure DevOps verwendet wird.
Umgebungsvariablen für die Konfiguration
GitHub 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.
Der GitHub Actions Importer verwendet die folgenden Umgebungsvariablen, um eine Verbindung mit deiner Azure DevOps-Instanz herzustellen:
GITHUB_ACCESS_TOKEN
: Das personal access token (classic) zum Erstellen von Pull Requests mit einem konvertierten Workflow (erfordert den Bereichworkflow
)GITHUB_INSTANCE_URL
: Die URL zur Zielinstanz von GitHub (z. B.https://github.com
)AZURE_DEVOPS_ACCESS_TOKEN
: Das personal access token zur Authentifizierung bei deiner Azure DevOps-Instanz. Dieses Token erfordert die folgenden Bereiche:- Build:
Read
- Agentpools:
Read
- Code:
Read
- Release:
Read
- Dienstverbindungen:
Read
- Taskgruppen:
Read
- Variablengruppen:
Read
- Build:
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.AZURE_DEVOPS_ORGANIZATION
: Der Organisationsname deiner Azure DevOps-InstanzAZURE_DEVOPS_INSTANCE_URL
: Die URL der Azure DevOps-Instanz, z. B.https://dev.azure.com
Diese Umgebungsvariablen können in einer .env.local
-Datei angegeben werden, die zur Ausführungszeit vom GitHub Actions Importer geladen wird.
Optionale Argumente
Es gibt einige optionale Argumente, die du mit den Unterbefehlen von GitHub Actions Importer verwenden kannst, um deine Migration anzupassen.
--source-file-path
Du kannst das --source-file-path
-Argument mit den Unterbefehlen forecast
, dry-run
oder migrate
verwenden.
Standardmäß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.
Beispiel:
gh actions-importer dry-run azure-devops pipeline --output-dir ./output/ --source-file-path ./path/to/azure_devops/pipeline.yml
--config-file-path
Du kannst das --config-file-path
-Argument mit den Unterbefehlen audit
, dry-run
und migrate
verwenden.
Standardmäß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.
Das --config-file-path
-Argument kann auch verwendet werden, um anzugeben, zu welchem Repository ein konvertierter wiederverwendbarer Workflow oder eine zusammengesetzte Aktion migriert werden soll.
Beispiel für „audit“
In diesem Beispiel verwendet der GitHub Actions Importer die angegebene YAML-Konfigurationsdatei als Quelldatei für eine Überprüfung.
gh actions-importer audit azure-devops pipeline --output-dir ./output/ --config-file-path ./path/to/azure_devops/config.yml
Um eine Azure DevOps-Instanz mithilfe einer Konfigurationsdatei zu überprüfen, muss die Konfigurationsdatei das folgende Format aufweisen, und jeder repository_slug
-Wert muss eindeutig sein:
source_files:
- repository_slug: azdo-project/1
path: file.yml
- repository_slug: azdo-project/2
paths: path.yml
Du kannst den repository_slug
-Wert für eine Pipeline generieren, indem du den Azure DevOps-Organisationsnamen, den Projektnamen und die Pipeline-ID kombinierst. Beispiel: my-organization-name/my-project-name/42
.
Beispiel für einen Probelauf
In diesem Beispiel verwendet der GitHub Actions Importer die angegebene YAML-Konfigurationsdatei als Quelldatei für einen Probelauf.
Die 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.
gh actions-importer dry-run azure-devops pipeline --output-dir ./output/ --config-file-path ./path/to/azure_devops/config.yml
Angeben des Repositorys mit konvertierten wiederverwendbaren Workflows und zusammengesetzten Aktionen
GitHub 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.
Zunächst solltest du eine Überwachung ohne das --config-file-path
-Argument ausführen:
gh actions-importer audit azure-devops --output-dir ./output/
Die 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:
reusable_workflows:
- name: my-reusable-workflow.yml
target_url: https://github.com/octo-org/octo-repo
ref: main
composite_actions:
- name: my-composite-action.yml
target_url: https://github.com/octo-org/octo-repo
ref: main
Du kannst mit dieser Datei angeben, welchem Repository ein wiederverwendbarer Workflow oder eine zusammengesetzte Aktion 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:
gh actions-importer migrate azure-devops pipeline --config-file-path config.yml --target-url https://github.com/my-org/my-repo
Unterstützte Syntax für Azure DevOps-Pipelines
Die folgende Tabelle zeigt den Typ der Eigenschaften, die der GitHub Actions Importer derzeit konvertieren kann.
Azure Pipelines | GitHub Actions | Status |
---|---|---|
condition |
| Unterstützt |
Container |
| Unterstützt |
continuousIntegration |
| Unterstützt |
Auftrag |
| Unterstützt |
pullRequest |
| Unterstützt |
Stufe |
| Unterstützt |
steps |
| Unterstützt |
strategy |
| Unterstützt |
timeoutInMinutes |
| Unterstützt |
variables |
| Unterstützt |
Manuelle Bereitstellung |
| Teilweise unterstützt |
pool |
| Teilweise unterstützt |
services |
| Teilweise unterstützt |
strategy |
| Teilweise unterstützt |
Trigger |
| Teilweise unterstützt |
pullRequest |
| Nicht unterstützt |
schedules |
| Nicht unterstützt |
Trigger |
| Nicht unterstützt |
Weitere Informationen zu unterstützten Azure DevOps-Tasks findest du im github/gh-actions-importer
-Repository.
Zuordnung von Umgebungsvariablen
Der 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.
Azure Pipelines | GitHub Actions |
---|---|
$(Agent.BuildDirectory) | ${{ runner.workspace }} |
$(Agent.HomeDirectory) | ${{ env.HOME }} |
$(Agent.JobName) | ${{ github.job }} |
$(Agent.OS) | ${{ runner.os }} |
$(Agent.ReleaseDirectory) | ${{ github.workspace}} |
$(Agent.RootDirectory) | ${{ github.workspace }} |
$(Agent.ToolsDirectory) | ${{ runner.tool_cache }} |
$(Agent.WorkFolder) | ${{ github.workspace }} |
$(Build.ArtifactStagingDirectory) | ${{ runner.temp }} |
$(Build.BinariesDirectory) | ${{ github.workspace }} |
$(Build.BuildId) | ${{ github.run_id }} |
$(Build.BuildNumber) | ${{ github.run_number }} |
$(Build.DefinitionId) | ${{ github.workflow }} |
$(Build.DefinitionName) | ${{ github.workflow }} |
$(Build.PullRequest.TargetBranch) | ${{ github.base_ref }} |
$(Build.PullRequest.TargetBranch.Name) | ${{ github.base_ref }} |
$(Build.QueuedBy) | ${{ github.actor }} |
$(Build.Reason) | ${{ github.event_name }} |
$(Build.Repository.LocalPath) | ${{ github.workspace }} |
$(Build.Repository.Name) | ${{ github.repository }} |
$(Build.Repository.Provider) | GitHub |
$(Build.Repository.Uri) | ${{ github.server.url }}/${{ github.repository }} |
$(Build.RequestedFor) | ${{ github.actor }} |
$(Build.SourceBranch) | ${{ github.ref }} |
$(Build.SourceBranchName) | ${{ github.ref }} |
$(Build.SourceVersion) | ${{ github.sha }} |
$(Build.SourcesDirectory) | ${{ github.workspace }} |
$(Build.StagingDirectory) | ${{ runner.temp }} |
$(Pipeline.Workspace) | ${{ runner.workspace }} |
$(Release.DefinitionEnvironmentId) | ${{ github.job }} |
$(Release.DefinitionId) | ${{ github.workflow }} |
$(Release.DefinitionName) | ${{ github.workflow }} |
$(Release.Deployment.RequestedFor) | ${{ github.actor }} |
$(Release.DeploymentID) | ${{ github.run_id }} |
$(Release.EnvironmentId) | ${{ github.job }} |
$(Release.EnvironmentName) | ${{ github.job }} |
$(Release.Reason) | ${{ github.event_name }} |
$(Release.RequestedFor) | ${{ github.actor }} |
$(System.ArtifactsDirectory) | ${{ github.workspace }} |
$(System.DefaultWorkingDirectory) | ${{ github.workspace }} |
$(System.HostType) | build |
$(System.JobId) | ${{ github.job }} |
$(System.JobName) | ${{ github.job }} |
$(System.PullRequest.PullRequestId) | ${{ github.event.number }} |
$(System.PullRequest.PullRequestNumber) | ${{ github.event.number }} |
$(System.PullRequest.SourceBranch) | ${{ github.ref }} |
$(System.PullRequest.SourceRepositoryUri) | ${{ github.server.url }}/${{ github.repository }} |
$(System.PullRequest.TargetBranch) | ${{ github.event.base.ref }} |
$(System.PullRequest.TargetBranchName) | ${{ github.event.base.ref }} |
$(System.StageAttempt) | ${{ github.run_number }} |
$(System.TeamFoundationCollectionUri) | ${{ github.server.url }}/${{ github.repository }} |
$(System.WorkFolder) | ${{ github.workspace }} |
Vorlagen
Du kannst Azure DevOps-Vorlagen mit dem GitHub Actions Importer transformieren.
Einschränkungen
Der GitHub Actions Importer kann Azure DevOps-Vorlagen transformieren. Dabei gelten jedoch einige Einschränkungen.
- Azure DevOps-Vorlagen, die unter den Schlüsseln
stages
,deployments
undjobs
verwendet werden, werden in GitHub Actions in wiederverwendbare Workflows konvertiert. Weitere Informationen findest du unter Wiederverwenden von Workflows. - Azure DevOps-Vorlagen, die unter dem Schlüssel
steps
verwendet werden, werden in zusammengesetzte Aktionen konvertiert. Weitere Informationen findest du unter Erstellen einer zusammengesetzten Aktion. - 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. Geschachtelte wiederverwendbare Workflows müssen manuell korrigiert werden.
- Wenn eine Vorlage auf eine externe Azure DevOps-Organisation oder ein GitHub-Repository verweist, musst du die Option
--credentials-file
verwenden, um Anmeldeinformationen für den Zugriff auf diese Vorlage anzugeben. Weitere Informationen findest du unter Zusätzliche Argumente und Einstellungen. - Du kannst dynamisch mithilfe von
each
-Ausdrücken YAML-Code generieren. Dabei gelten die folgenden Einschränkungen:- Geschachtelte
each
-Blöcke werden nicht unterstützt und führen dazu, dass der übergeordneteeach
-Block nicht unterstützt wird. each
-Bedingungen und die enthaltenenif
-Bedingungen werden zur Transformationszeit ausgewertet, da GitHub Actions diesen Typ der Einfügung nicht unterstützt.elseif
-Blöcke werden nicht unterstützt. Wenn diese Funktionalität erforderlich ist, musst du sie manuell korrigieren.- Geschachtelte
if
-Blöcke werden unterstützt,if/elseif/else
-Blöcke, die unter einerif
-Bedingung geschachtelt sind, hingegen nicht. if
-Blöcke, die vordefinierte Azure DevOps-Variablen verwenden, werden nicht unterstützt.
- Geschachtelte
Unterstützte Vorlagen
Der GitHub Actions Importer unterstützt die in der folgenden Tabelle aufgeführten Vorlagen.
Azure Pipelines | GitHub Actions | Status |
---|---|---|
Erweitern aus einer Vorlage | Reusable workflow | Unterstützt |
Auftragsvorlagen | Reusable workflow | Unterstützt |
Stage-Vorlagen | Reusable workflow | Unterstützt |
Schrittvorlagen | Composite action | Unterstützt |
Taskgruppen im klassischen Editor | Varies | Unterstützt |
Vorlagen in anderen Azure DevOps-Organisationen, -Projekten oder -Repositorys | Varies | Unterstützt |
Vorlagen in einem GitHub-Repository | Varies | Unterstützt |
Variablenvorlagen | env | Unterstützt |
Bedingte Einfügung | if -Bedingungen für Aufträge/Schritte | Teilweise unterstützt |
Iterative Einfügung | Nicht verfügbar | Teilweise unterstützt |
Vorlagen mit Parametern | Varies | Teilweise unterstützt |
Pfadnamen der Vorlagendatei
Der 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.
Beispiel für den Pfadnamen einer Variablendatei
# File: azure-pipelines.yml
variables:
- template: 'templates/vars.yml'
steps:
- template: "./templates/$"
# File: templates/vars.yml
variables:
one: 'simple_step.yml'
Beispiel für den Pfadnamen einer Parameterdatei
parameters:
- name: template
type: string
default: simple_step.yml
steps:
- template: "./templates/${{ parameters.template }}"
Beispiel für den Pfadnamen einer iterativen Datei
parameters:
- name: steps
type: object
default:
- build_step
- release_step
steps:
- ${{ each step in parameters.steps }}:
- template: "$-variables.yml"
Vorlagenparameter
Der GitHub Actions Importer unterstützt die in der folgenden Tabelle aufgeführten Parameter.
Azure Pipelines | GitHub Actions | Status |
---|---|---|
Zeichenfolge | inputs.string | Unterstützt |
Anzahl | inputs.number | Unterstützt |
boolean | inputs.boolean | Unterstützt |
Objekt (object) | inputs.string mit fromJSON -Ausdruck | Teilweise unterstützt |
Schritt | step | Teilweise unterstützt |
stepList | step | Teilweise unterstützt |
Auftrag | job | Teilweise unterstützt |
jobList | job | Teilweise unterstützt |
deployment | job | Teilweise unterstützt |
deploymentList | job | Teilweise unterstützt |
Stufe | job | Teilweise unterstützt |
stageList | job | Teilweise unterstützt |
Note
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.
Rechtliche Hinweise
Teile wurden von https://github.com/github/gh-actions-importer/ unter der MIT-Lizenz übernommen:
MIT License
Copyright (c) 2022 GitHub
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.