# Ausführen von Skripts vor oder nach einem Auftrag

Skripts können direkt vor oder nach einem Auftrag automatisch auf einem selbstgehosteten Runner ausgeführt werden.

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

## Informationen zu vor- und nachgelagerten Job-Skripten

Du kannst Skripts automatisch auf einem selbstgehosteten Runner ausführen, entweder vor einer Auftragsausführung oder nach Abschluss der Ausführung eines Auftrags. Diese Skripts können verwendet werden, um die Anforderungen des Auftrags zu unterstützen, wie das Erstellen oder Entfernen einer Runner-Umgebung oder das Bereinigen von Verzeichnissen. Du kannst diese Skripts auch verwenden, um Telemetriedaten dazu nachzuverfolgen, wie deine Runner verwendet werden.

Die benutzerdefinierten Skripts werden automatisch ausgelöst, wenn eine bestimmte Umgebungsvariable für den Runner festgelegt wird. Die Umgebungsvariable muss den absoluten Pfad zum Skript enthalten. Weitere Informationen findest du unter [Auslösen der Skripts](#triggering-the-scripts) weiter unten.

Die folgenden Skriptsprachen werden unterstützt:

* **Bash**: Verwendet `bash` und kann auf `sh` zurückgreifen. Wird ausgeführt, indem `-e {pathtofile}` ausgeführt wird.
* **PowerShell**: Verwendet `pwsh` und kann auf `powershell` zurückgreifen. Wird ausgeführt, indem `-command \". '{pathtofile}'\"` ausgeführt wird.

## Schreiben der Skripts

Deine benutzerdefinierten Skripts können die folgenden Features verwenden:

* **Variablen**: Über Skripts kann auf die Standardvariablen zugegriffen werden. Die vollständige Webhook-Ereignisnutzlast findest du in `GITHUB_EVENT_PATH`. Weitere Informationen finden Sie unter [Referenz für Variablen](/de/enterprise-server@3.22/actions/reference/workflows-and-actions/variables#default-environment-variables).
* **Workflow-Befehle:** Skripte können Workflow-Befehle verwenden. Weitere Informationen finden Sie unter [Workflow commands for GitHub Actions (Workflowbefehle für GitHub Actions)](/de/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-commands). Skripts können auch Umgebungsdateien verwenden. Weitere Informationen findest du unter [Umgebungsdateien](/de/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-commands#environment-files).

Deine Skriptdateien müssen eine Dateierweiterung für die entsprechende Sprache verwenden, z. B. `.sh` oder `.ps1`, um erfolgreich ausgeführt zu werden.

> \[!NOTE]
> Vermeide das Verwenden deiner Skripts zum Ausgeben vertraulicher Informationen in die Konsole, da jede Person mit Lesezugriff auf das Repository möglicherweise die Ausgabe in den Benutzeroberflächenprotokollen anzeigen kann.

### Umgang mit Exit-Codes

Bei Vorskriptaufgaben gibt der Exitcode `0` an, dass das Skript erfolgreich abgeschlossen wurde, und die Aufgabe wird anschließend ausgeführt. Wenn ein anderer Exitcode vorhanden ist, wird der Auftrag nicht ausgeführt und als fehlerhaft markiert. Um die Ergebnisse deiner Skripts vor Aufträgen anzuzeigen, überprüfe die Protokolle auf `Set up runner`-Einträge. Weitere Informationen zum Überprüfen der Protokolle findest du unter [Verwenden von Workflowausführungsprotokollen](/de/enterprise-server@3.22/actions/how-tos/monitor-workflows/use-workflow-run-logs#viewing-logs-to-diagnose-failures).

Die [`continue-on-error`](/de/enterprise-server@3.22/actions/reference/workflows-and-actions/workflow-syntax#jobsjob_idcontinue-on-error)-Einstellung wird für die Verwendung durch diese Skripts nicht unterstützt.

## Das Triggern der Skripte

Die benutzerdefinierten Skripts müssen sich auf dem Runner befinden, sollten aber nicht im Anwendungsverzeichnis `actions-runner` gespeichert werden. Die Skripts werden im Sicherheitskontext des Dienstkontos ausgeführt, das den Runnerdienst ausführt.

> \[!NOTE]
> Die ausgelösten Skripts werden synchron verarbeitet, was die Ausführung des Auftrags verhindert, während sie laufen.

Die Skripts werden automatisch ausgeführt, wenn der Runner über die folgenden Umgebungsvariablen verfügt, die einen absoluten Pfad zum Skript enthalten:

* `ACTIONS_RUNNER_HOOK_JOB_STARTED`: Das in dieser Umgebungsvariablen definierte Skript wird ausgelöst, wenn einem Runner ein Auftrag zugewiesen wurde, aber bevor die Ausführung des Auftrags gestartet wird.
* `ACTIONS_RUNNER_HOOK_JOB_COMPLETED`: Das in dieser Umgebungsvariable definierte Skript wird am Ende des Auftrags ausgelöst, nachdem alle im Workflow definierten Schritte ausgeführt wurden.

Um diese Umgebungsvariablen festzulegen, können Sie sie entweder dem Betriebssystem oder einer Datei mit dem Namen `.env` im selbstgehosteten Runner-Anwendungsverzeichnis hinzufügen (d. h. dem Verzeichnis, in das Sie die Runner-Software heruntergeladen und entpackt haben). Beachte, dass nach jeder Änderung an der `.env`-Datei ein Neustart des Runners erforderlich ist.
Beispielsweise führt der folgende `.env`-Eintrag dazu, dass der Runner automatisch ein Skript ausführt, das als `/opt/runner/cleanup_script.sh` auf dem Runner-Computer gespeichert wird, bevor jeder Job ausgeführt wird:

```bash
ACTIONS_RUNNER_HOOK_JOB_STARTED=/opt/runner/cleanup_script.sh
```

> \[!NOTE]
> Das in `ACTIONS_RUNNER_HOOK_JOB_COMPLETED` definierte Skript wird am Ende des Auftrags ausgeführt, bevor er abgeschlossen wird. Dadurch wird es ungeeignet für Anwendungsfälle, die einen Runner unterbrechen können, z. B. durch Löschen des Runner-Computers im Rahmen einer Implementierung zur automatischen Skalierung.

## Problembehandlung

### Berechtigung verweigert

Wenn Sie beim Versuch, ein Skript auszuführen, die Fehlermeldung „Berechtigung verweigert“ erhalten, stellen Sie sicher, dass das Skript ausführbar ist. Beispielsweise können Sie in einem Terminal unter Linux oder MacOS den folgenden Befehl verwenden, um eine Datei ausführbar zu machen.

```bash
chmod +x PATH/TO/FILE
```

Weitere Informationen zum Verwenden von Workflows zum Ausführen von Skripts findest du unter [Hinzufügen von Skripts zu deinem Workflow](/de/enterprise-server@3.22/actions/how-tos/write-workflows/choose-what-workflows-do/add-scripts).

### Keine Timeouteinstellung

Es ist derzeit keine Timeouteinstellung für Skripts verfügbar, die von `ACTIONS_RUNNER_HOOK_JOB_STARTED` oder `ACTIONS_RUNNER_HOOK_JOB_COMPLETED` ausgeführt werden. Sie könnten daher in Erwägung ziehen, Ihrem Skript eine Timeout-Verarbeitung hinzuzufügen.

### Überprüfen des Workflow-Ausführungsprotokolls

Um zu bestätigen, dass deine Skripts ausgeführt werden, kannst du die Protokolle für diesen Auftrag überprüfen. Die Skripts werden in separaten Schritten für `Set up runner` oder `Complete runner` aufgeführt, je nachdem, welche Umgebungsvariable das Skript auslöst. Weitere Informationen zum Überprüfen der Protokolle findest du unter [Verwenden von Workflowausführungsprotokollen](/de/enterprise-server@3.22/actions/how-tos/monitor-workflows/use-workflow-run-logs#viewing-logs-to-diagnose-failures).