# Erstellen einer zusammengesetzten Aktion

In diesem Tutorial erfährst du, wie du eine zusammengesetzte Aktion erstellst.

> \[!NOTE]
> Auf GitHub Enterprise Server gehostete Runner werden aktuell nicht auf GitHub unterstützt.

## Einführung

In dieser Anleitung erfährst du mehr über die grundlegenden Komponenten, die benötigt werden, um eine paketierte zusammengesetzte Aktion zu erstellen und zu verwenden. Diese Anleitung fokussiert jene Komponenten, welche zum Paketieren der Aktion benötigt werden. Daher hat der Aktions-Code nur minimale Funktionalität. Die Aktion druckt "Hallo Welt" und dann "Goodbye", oder wenn Sie einen benutzerdefinierten Namen angeben, wird "Hello \[who-to-greet]" und dann "Goodbye" gedruckt. Zudem ordnet die Aktion der Ausgabevariablen `random-number` eine Zufallszahl zu und führt ein Skript namens `goodbye.sh` aus.

Nach dem Abschluss dieses Projekts weißt du, wie du eine eigene zusammengesetzte Aktion erstellen und in einem Workflow testen kannst.

> \[!WARNING]
> Beim Erstellen von Workflows und Aktionen sollten Sie immer berücksichtigen, ob Ihr Code möglicherweise Code aus nicht vertrauenswürdigen Eingaben potenzieller Angreifer ausführt. Bestimmte Kontexte sollten als nicht vertrauenswürdige Eingaben behandelt werden, da ein Angreifer seine eigenen schädlichen Inhalte einfügen könnte. Weitere Informationen finden Sie unter [Referenz zur sicheren Verwendung](/de/enterprise-server@3.22/actions/reference/security/secure-use#good-practices-for-mitigating-script-injection-attacks).

### Zusammengesetzte Aktionen und wiederverwendbare Workflows

Zusammengesetzte Aktionen ermöglichen Ihnen das Erfassen einer Reihe von Workflowauftragsschritten in einer einzigen Aktion, die Sie dann als einzelnen Auftragsschritt in mehreren Workflows ausführen können. Wiederverwendbare Workflows stellen eine weitere Möglichkeit zum Vermeiden von Duplizierungen dar. Sie ermöglichen Ihnen das Ausführen eines vollständigen Workflow aus anderen Workflows. Weitere Informationen finden Sie unter [Wiederverwenden von Workflowkonfigurationen](/de/enterprise-server@3.22/actions/concepts/workflows-and-actions/reusing-workflow-configurations).

## Voraussetzungen

> \[!NOTE]
> In diesem Beispiel wird erläutert, wie du in einem separaten Repository eine zusammengesetzte Aktion erstellst. Es ist jedoch möglich, eine zusammengesetzte Aktion im selben Repository zu erstellen. Weitere Informationen finden Sie unter [Erstellen einer zusammengesetzten Aktion](/de/enterprise-server@3.22/actions/tutorials/create-actions/create-a-composite-action#creating-a-composite-action-within-the-same-repository).

Bevor Sie beginnen, erstellen Sie ein Repository auf GitHub.

1. Erstellen Sie ein neues öffentliches Repository auf GitHub. Du kannst einen beliebigen Repositorynamen auswählen oder das folgende `hello-world-composite-action`-Beispiel verwenden. Nachdem Ihr Projekt zu GitHub gepusht wurde, können Sie diese Dateien hinzufügen. Weitere Informationen finden Sie unter [Ein neues Repository erstellen](/de/enterprise-server@3.22/repositories/creating-and-managing-repositories/creating-a-new-repository).

2. Klone dein Repository auf deinen Computer. Weitere Informationen finden Sie unter [Ein Repository klonen](/de/enterprise-server@3.22/repositories/creating-and-managing-repositories/cloning-a-repository).

3. Gehe in deinem Terminal zum Verzeichnisse deines neuen Repositorys.

   ```shell copy
   cd hello-world-composite-action
   ```

4. Erstellen Sie im Repository `hello-world-composite-action` eine neue Datei mit dem Namen `goodbye.sh` mit Beispielcode:

   ```shell copy
   echo "echo Goodbye" > goodbye.sh
   ```

5. Lege `goodbye.sh` über das Terminal als ausführbare Datei fest.

   <div class="ghd-tool linux">

   ```shell copy
   chmod +x goodbye.sh
   ```

   </div>

   <div class="ghd-tool mac">

   ```shell copy
   chmod +x goodbye.sh
   ```

   </div>

   <div class="ghd-tool windows">

   ```shell copy
   git add --chmod=+x -- goodbye.sh
   ```

   </div>

6. Checken Sie die Datei `goodbye.sh` im Terminal ein.

   <div class="ghd-tool linux">

   ```shell copy
   git add goodbye.sh
   git commit -m "Add goodbye script"
   git push
   ```

   </div>

   <div class="ghd-tool mac">

   ```shell copy
   git add goodbye.sh
   git commit -m "Add goodbye script"
   git push
   ```

   </div>

   <div class="ghd-tool windows">

   ```shell copy
   git commit -m "Add goodbye script"
   git push
   ```

   </div>

## Eine Datei für die Metadaten der Aktion erstellen

1. Erstelle im Repository `hello-world-composite-action` eine neue Datei namens `action.yml`, und füge den folgenden Beispielcode hinzu. Weitere Informationen zu dieser Syntax findest du unter [Referenz zur Metadatensyntax](/de/enterprise-server@3.22/actions/reference/workflows-and-actions/metadata-syntax#runs-for-composite-actions).

   ```yaml copy
   name: 'Hello World'
   description: 'Greet someone'
   inputs:
     who-to-greet:  # id of input
       description: 'Who to greet'
       required: true
       default: 'World'
   outputs:
     random-number:
       description: "Random number"
       value: ${{ steps.random-number-generator.outputs.random-number }}
   runs:
     using: "composite"
     steps:
       - name: Set Greeting
         run: echo "Hello $INPUT_WHO_TO_GREET."
         shell: bash
         env:
           INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }}

       - name: Random Number Generator
         id: random-number-generator
         run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
         shell: bash

       - name: Set GitHub Path
         run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH
         shell: bash
         env:
           GITHUB_ACTION_PATH: ${{ github.action_path }}

       - name: Run goodbye.sh
         run: goodbye.sh
         shell: bash

   ```

   Diese Datei definiert die `who-to-greet`-Eingabe, ordnet die zufällig generierte Zahl der Ausgabevariablen `random-number` zu, fügt den Pfad der Aktion zum Systempfad des Runners hinzu (um das Skript `goodbye.sh` während der Ausführung ausfindig zu machen) und führt das Skript `goodbye.sh` aus.

   Weitere Informationen zur Verwaltung von Ausgaben findest du unter [Referenz zur Metadatensyntax](/de/enterprise-server@3.22/actions/reference/workflows-and-actions/metadata-syntax#outputs-for-composite-actions).

   Weitere Informationen zur Verwendung von `github.action_path` findest du unter [Kontextreferenz](/de/enterprise-server@3.22/actions/reference/workflows-and-actions/contexts#github-context).

2. Checken Sie die Datei `action.yml` im Terminal ein.

   ```shell copy
   git add action.yml
   git commit -m "Add action"
   git push
   ```

3. Füge über das Terminal ein Tag hinzu. In diesem Beispiel wird ein Tag namens `v1` verwendet. Weitere Informationen finden Sie unter [Verwalten benutzerdefinierter Aktionen](/de/enterprise-server@3.22/actions/how-tos/create-and-publish-actions/manage-custom-actions#using-release-management-for-actions).

   ```shell copy
   git tag -a -m "Description of this release" v1
   git push --follow-tags
   ```

## Deine Aktion in einem Workflow testen

Der folgende Workflowcode verwendet die abgeschlossene „Hallo Welt“-Aktion, die du unter [Erstellen einer zusammengesetzten Aktion](/de/enterprise-server@3.22/actions/tutorials/create-actions/create-a-composite-action#creating-an-action-metadata-file) erstellt hast.

Kopiere den Workflowcode in eine `.github/workflows/main.yml`-Datei in einem anderen Repository, ersetze `OWNER` und `SHA` durch den Besitzer des Repositorys und den SHA-Wert des Commits, den du nutzen willst. Du kannst auch die Eingabe für `who-to-greet` durch deinen Namen ersetzen.

```yaml copy
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v6
      - id: foo
        uses: OWNER/hello-world-composite-action@SHA
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number "$RANDOM_NUMBER"
        shell: bash
        env:
          RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
```

Klicke in deinem Repository auf die Registerkarte **Aktionen**, und wähle die neueste Workflowausführung aus. Die Ausgabe sollte Folgendes enthalten: „Hello Mona the Octocat“, das Ergebnis des Skripts „Goodbye“ und eine zufällige Zahl.

## Erstellen einer zusammengesetzten Aktion im selben Repository

1. Erstelle einen neuen Unterordner namens `hello-world-composite-action`. Dieser kann in jedem Unterordner im Repository erstellt werden. Es wird jedoch empfohlen, dieses im Unterordner `.github/actions` zu platzieren, um die Organisation zu vereinfachen.

2. Führe im Ordner `hello-world-composite-action` dieselben Schritte aus, um das Skript `goodbye.sh` zu erstellen.

   ```shell copy
   echo "echo Goodbye" > goodbye.sh
   ```

   <div class="ghd-tool linux">

   ```shell copy
   chmod +x goodbye.sh
   ```

   </div>

   <div class="ghd-tool mac">

   ```shell copy
   chmod +x goodbye.sh
   ```

   </div>

   <div class="ghd-tool windows">

   ```shell copy
   git add --chmod=+x -- goodbye.sh
   ```

   </div>

   <div class="ghd-tool linux">

   ```shell copy
   git add goodbye.sh
   git commit -m "Add goodbye script"
   git push
   ```

   </div>

   <div class="ghd-tool mac">

   ```shell copy
   git add goodbye.sh
   git commit -m "Add goodbye script"
   git push
   ```

   </div>

   <div class="ghd-tool windows">

   ```shell copy
   git commit -m "Add goodbye script"
   git push
   ```

   </div>

3. In dem Ordner `hello-world-composite-action` erstelle die Datei `action.yml` basierend auf den Schritten in [Erstellen einer zusammengesetzten Aktion](/de/enterprise-server@3.22/actions/tutorials/create-actions/create-a-composite-action#creating-an-action-metadata-file).

4. Wenn du die Aktion verwendest, benutze den relativen Pfad zum Ordner, in dem sich die Datei `action.yml` der zusammengesetzten Aktion im `uses`-Schlüssel befindet. Im folgenden Beispiel wird davon ausgegangen, dass sie sich im Ordner `.github/actions/hello-world-composite-action` befindet.

```yaml copy
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v6
      - id: foo
        uses: ./.github/actions/hello-world-composite-action
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number "$RANDOM_NUMBER"
        shell: bash
        env:
          RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}
```