{"meta":{"title":"Das Erweitern des GitHub Actions Importers mit benutzerdefinierten Transformatoren","intro":"GitHub Actions Importer bietet die Möglichkeit, die integrierte Zuordnung zu erweitern.","product":"GitHub Actions","breadcrumbs":[{"href":"/de/actions","title":"GitHub Actions"},{"href":"/de/actions/reference","title":"Verweis"},{"href":"/de/actions/reference/github-actions-importer","title":"GitHub Actions Importer (Importwerkzeug)"},{"href":"/de/actions/reference/github-actions-importer/custom-transformers","title":"Benutzerdefinierte Transformatoren"}],"documentType":"article"},"body":"# Das Erweitern des GitHub Actions Importers mit benutzerdefinierten Transformatoren\n\nGitHub Actions Importer bietet die Möglichkeit, die integrierte Zuordnung zu erweitern.\n\n## Informationen zu benutzerdefinierten Transformatoren\n\nGitHub Actions Importer bietet die Möglichkeit, das integrierte Mapping durch Erstellen benutzerdefinierter Transformer zu erweitern. Benutzerdefinierte Transformatoren können für folgende Zwecke verwendet werden:\n\n* Konvertieren Sie Elemente, die GitHub Actions Importer nicht automatisch konvertiert werden, oder ändern Sie, wie Elemente konvertiert werden. Weitere Informationen findest du unter [Erstellen benutzerdefinierter Transformatoren für Elemente](#creating-custom-transformers-for-items).\n* Konvertieren von Verweisen in Runner, um unterschiedliche Runnerbezeichnungen zu verwenden. Weitere Informationen findest du unter [Erstellen von benutzerdefinierten Transformatoren für Runner](#creating-custom-transformers-for-runners).\n* Konvertieren Sie Umgebungsvariablenwerte aus Ihren vorhandenen Pipelines in GitHub Actions Workflows. Weitere Informationen findest du unter [Erstellen benutzerdefinierter Transformatoren für Umgebungsvariablen](#creating-custom-transformers-for-environment-variables).\n\n## Verwenden von benutzerdefinierten Transformatoren mit GitHub Actions Importer\n\nEin benutzerdefinierter Transformer enthält Zuordnungslogik, die GitHub Actions Importer zum Konvertieren Ihrer Plug-ins, Aufgaben, Runner-Bezeichnungen oder Umgebungsvariablen verwenden kann, damit sie mit GitHub Actions funktionieren. Benutzerdefinierte Transformatoren werden in einer domänenspezifischen Sprache (DSL) auf Ruby-Basis geschrieben und in einer Datei mit der Dateierweiterung `.rb` definiert.\n\nAnhand der CLI-Option `--custom-transformers` kannst du angeben, welche benutzerdefinierten Transformatordateien mit den Befehlen `audit`, `dry-run` und `migrate` verwendet werden sollen.\n\nWenn beispielsweise benutzerdefinierte Transformer in einer Datei mit dem Namen `transformers.rb` definiert sind, können Sie den folgenden Befehl verwenden, um sie mit GitHub Actions Importer zu verwenden:\n\n```shell\ngh actions-importer ... --custom-transformers transformers.rb\n```\n\nAlternativ kannst du die Globmustersyntax verwenden, um mehrere benutzerdefinierte Transformatordateien anzugeben. Wenn sich z. B. mehrere benutzerdefinierte Transformatordateien in einem Verzeichnis namens `transformers` befinden, können Sie sie mit dem folgenden Befehl alle an GitHub Actions Importer übergeben:\n\n```shell\ngh actions-importer ... --custom-transformers transformers/*.rb\n```\n\n> \\[!NOTE]\n> Wenn du benutzerdefinierte Transformatoren verwendest, müssen sich die benutzerdefinierten Transformatordateien in demselben Verzeichnis (oder in einem Unterverzeichnis) befinden, von dem aus der Befehl `gh actions-importer` ausgeführt wird.\n\n## Erstellen benutzerdefinierter Transformatoren für Elemente\n\nSie können benutzerdefinierte Transformer erstellen, die GitHub Actions Importer beim Konvertieren vorhandener Build-Schritte oder Trigger in ihre Entsprechung in GitHub Actions verwendet. Dies ist besonders in folgenden Fällen nützlich:\n\n* GitHub Actions Importer konvertiert ein Element nicht automatisch.\n* Sie möchten ändern, wie ein Element von GitHub Actions Importer konvertiert wird.\n* Ihre vorhandenen Pipelines verwenden benutzerdefinierte oder proprietäre Erweiterungen, z. B. freigegebene Bibliotheken in Jenkins, und Sie müssen definieren, wie diese Schritte in GitHub Actions funktionieren.\n\nGitHub Actions Importer verwendet benutzerdefinierte Transformatoren, die mit einem DSL definiert werden, das auf Ruby basiert. So erstellen Sie benutzerdefinierte Transformer für Build-Schritte und Trigger:\n\n* Jede benutzerdefinierte Transformatordatei muss mindestens eine `transform`-Methode enthalten.\n* Jede `transform`-Methode muss ein `Hash`, ein Array aus `Hash`-Elementen oder `nil` zurückgeben. Dieser zurückgegebene Wert entspricht einer in YAML definierten Aktion. Weitere Informationen zu Aktionen findest du unter [Grundlegendes zu GitHub Actions](/de/actions/get-started/understand-github-actions).\n\n### Beispiel für einen benutzerdefinierten Transformator für einen Build-Schritt\n\nIm folgenden Beispiel wird ein Buildschritt konvertiert, der den Bezeichner „buildJavascriptApp“ verwendet, um verschiedene `npm`-Befehle auszuführen:\n\n```ruby copy\ntransform \"buildJavaScriptApp\" do |item|\n  command = [\"build\", \"package\", \"deploy\"].map do |script|\n    \"npm run #{script}\"\n  end\n\n  {\n    name: \"build javascript app\",\n    run: command.join(\"\\n\")\n  }\nend\n```\n\nDas obige Beispiel führt zu dem folgenden GitHub Actions Workflow-Schritt. Es besteht aus konvertierten Buildschritten mit einem `buildJavaScriptApp`-Bezeichner:\n\n```yaml\n- name: build javascript app\n  run: |\n    npm run build\n    npm run package\n    npm run deploy\n```\n\nDie `transform`-Methode verwendet den Bezeichner des Buildschritts aus deiner CI/CD-Quellinstanz in einem Argument. In diesem Beispiel heißt der Bezeichner `buildJavaScriptLibrary`. Du kannst auch durch Trennzeichen getrennte Werte verwenden, um mehrere Bezeichner an die `transform`-Methode zu übergeben. Beispiel: `transform \"buildJavaScriptApp\", \"buildTypeScriptApp\" { |item| ... }`.\n\n> \\[!NOTE]\n> Die Datenstruktur von `item` ist je nach CI/CD-Plattform und dem Typ des zu konvertierenden Elements unterschiedlich.\n\n## Erstellen benutzerdefinierter Transformatoren für Runner\n\nSie können die Zuordnung zwischen den Runnern in Ihrer CI/CD-Quellinstanz und den entsprechenden GitHub Actions-Runnern anpassen.\n\nGitHub Actions Importer verwendet benutzerdefinierte Transformatoren, die mit einem DSL definiert werden, das auf Ruby basiert. So erstellst du benutzerdefinierte Transformatoren für Runner:\n\n* Die benutzerdefinierte Transformatordatei muss mindestens eine `runner`-Methode enthalten.\n* Die `runner`-Methode akzeptiert zwei Parameter. Der erste Parameter ist die Läuferbezeichnung der Quell-CI/CD-Instanz, und der zweite Parameter ist die entsprechende GitHub Actions Läuferbezeichnung. Weitere Informationen zu GitHub Actions Läufern finden Sie unter [Gehostete Runnerreferenz auf GitHub](/de/actions/reference/runners/github-hosted-runners#supported-runners-and-hardware-resources).\n\n### Beispiele für benutzerdefinierte Transformatoren für Runner\n\nDas folgende Beispiel zeigt eine Methode, die eine `runner` Runner-Bezeichnung in eine GitHub Actions-Runner-Bezeichnung im daraus resultierenden Workflow umwandelt.\n\n```ruby copy\nrunner \"linux\", \"ubuntu-latest\"\n```\n\nSie können auch die Methode `runner` verwenden, um im resultierenden Workflow ein Runner-Label in mehrere GitHub Actions Runner-Labels umzuwandeln.\n\n```ruby copy\nrunner \"big-agent\", [\"self-hosted\", \"xl\", \"linux\"]\n```\n\nGitHub Actions Importer versucht, die Runner-Bezeichnung so gut wie möglich zuzuordnen. In Fällen, in denen dies nicht möglich ist, wird das `ubuntu-latest`-Runner-Label als Standard verwendet. Dieser Standardwert lässt sich mit der `runner`-Methode über ein spezielles Schlüsselwort steuern. Zum Beispiel weist der folgende benutzerdefinierte Transformer GitHub Actions Importer an, `macos-latest` anstelle von `ubuntu-latest` als Standard-Runner zu verwenden.\n\n```ruby copy\nrunner :default, \"macos-latest\"\n```\n\n## Erstellen benutzerdefinierter Transformatoren für Umgebungsvariablen\n\nSie können die Zuordnung zwischen Umgebungsvariablen in Ihren Quell-CI/CD-Pipelines an ihre Werte anpassen in GitHub Actions.\n\nGitHub Actions Importer verwendet benutzerdefinierte Transformatoren, die mit einem DSL definiert werden, das auf Ruby basiert. So erstellst du benutzerdefinierte Transformatoren für Umgebungsvariablen:\n\n* Die benutzerdefinierte Transformatordatei muss mindestens eine `env`-Methode enthalten.\n* Die `env`-Methode akzeptiert zwei Parameter. Der erste Parameter ist der Name der Umgebungsvariable in der ursprünglichen Pipeline, und der zweite Parameter ist der aktualisierte Wert für die Umgebungsvariable für GitHub Actions. Weitere Informationen zu GitHub Actions Umgebungsvariablen finden Sie unter [Speichern von Informationen in Variablen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-variables).\n\n### Beispiele für benutzerdefinierte Transformatoren für Umgebungsvariablen\n\nEs gibt mehrere Möglichkeiten zum Einrichten benutzerdefinierter Transformatoren für die Zuordnung deiner Umgebungsvariablen.\n\n* Im folgenden Beispiel wird der Wert aller vorhandenen Umgebungsvariablen namens `OCTO` beim Transformieren einer Pipeline auf `CAT` festgelegt.\n\n  ```ruby copy\n  env \"OCTO\", \"CAT\"\n  ```\n\n  Sie können auch alle Instanzen einer bestimmten Umgebungsvariable entfernen, sodass sie nicht in einen GitHub Actions Workflow transformiert werden. Im folgenden Beispiel werden alle Umgebungsvariablen mit dem Namen `MONA_LISA` entfernt.\n\n  ```ruby copy\n  env \"MONA_LISA\", nil\n  ```\n\n* Du kannst deine vorhandenen Umgebungsvariablen auch Geheimnissen zuordnen. Durch die folgende `env`-Methode wird z. B. eine Umgebungsvariable namens `MONALISA` einem Geheimnis namens `OCTOCAT` zugeordnet.\n\n  ```ruby copy\n  env \"MONALISA\", secret(\"OCTOCAT\")\n  ```\n\n  Dadurch wird ein Verweis auf ein Geheimnis namens `OCTOCAT` im transformierten Workflow eingerichtet. Damit der geheime Schlüssel funktioniert, müssen Sie den geheimen Schlüssel in Ihrem GitHub Repository erstellen. Weitere Informationen finden Sie unter [Verwenden von Geheimnissen in GitHub-Aktionen](/de/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets#creating-secrets-for-a-repository).\n\n* Du kannst auch reguläre Ausdrücke verwenden, um die Werte mehrerer Umgebungsvariablen gleichzeitig zu aktualisieren. Der folgende benutzerdefinierte Transformator entfernt beispielsweise alle Umgebungsvariablen aus dem konvertierten Workflow:\n\n  ```ruby copy\n  env /.*/, nil\n  ```\n\n  Im folgenden Beispiel wird eine Übereinstimmungsgruppe für reguläre Ausdrücke verwendet, um Umgebungsvariablenwerte in dynamisch generierte Geheimnisse zu transformieren.\n\n  ```ruby copy\n  env /^(.+)_SSH_KEY/, secret(\"%s_SSH_KEY)\n  ```\n\n  > \\[!NOTE]\n  > Die Reihenfolge, in der `env`-Methoden definiert werden, ist bei der Verwendung regulärer Ausdrücke relevant. Der erste `env`-Transformator, der mit einem Umgebungsvariablennamen übereinstimmt, hat Vorrang vor nachfolgenden `env`-Methoden. Du solltest zuerst deine spezifischsten Umgebungsvariablentransformatoren definieren.\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```"}