

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Hooks für die Einreichung
<a name="submission-hooks"></a>

Mithilfe von Submission Hooks können Sie während des Workflows zur Einreichung von Jobs in Deadline Cloud benutzerdefinierte Skripts ausführen. Hooks werden lokal auf der Workstation ausgeführt, die den Job einreicht, bevor der Job den Deadline Cloud-Dienst erreicht. Hooks werden nicht auf Workern oder in der AWS Cloud ausgeführt. Da Hooks auf Ihrem Computer ausgeführt werden, haben sie Zugriff auf lokale Dateien, Umgebungsvariablen und Netzwerkressourcen, die dem einreichenden Benutzer zur Verfügung stehen.

Sie können Hooks verwenden, um Jobkonfigurationen zu validieren, zusätzliche Ressourcen zu ermitteln, Übermittlungsparameter zu ändern oder externe Systeme wie Produktionsverfolgungssoftware zu integrieren. Weitere Integrationspunkte, die auf Workern oder in der Cloud ausgeführt werden, finden Sie unter. [Hooks, Ereignisse und Integrationspunkte für Jobs](integration-points.md)

Es gibt zwei Möglichkeiten, Hooks zu konfigurieren:
+ **Bundle-Hooks** — Platzieren Sie nebenbei eine `hooks.yaml` (oder`hooks.json`) Datei in Ihrem Job-Bundle-Verzeichnis`template.yaml`. Bundle-Hooks eignen sich gut für CLI-Workflows, bei denen das Bundle bereits vor der Einreichung vorhanden ist.
+ **Umgebungs-Hooks** — Verweisen Sie die `DEADLINE_HOOKS_DIR` Umgebungsvariable auf ein Verzeichnis, das Folgendes enthält`hooks.yaml`. Umgebungs-Hooks sind nützlich für Studios, die Hooks für alle Einreichungen durchsetzen möchten, ohne die Job-Bundles zu ändern.

Beide Quellen können gleichzeitig aktiv sein. Wenn beide vorhanden sind, werden zuerst Environment-Hooks und dann Bundle-Hooks ausgeführt.

**Anmerkung**  
In-application (DCC) -Einreicher wie Maya, Nuke oder Blender führen Environment-Hooks nur für die Phasen vor der Einreichung und nach der Einreichung durch. Die Phase vor der grafischen Benutzeroberfläche gilt nicht für DCC-Einreicher. Weitere Informationen finden Sie unter [Pre-GUI Hooks](#submission-hooks-pre-gui).

## Hook-Typen
<a name="submission-hooks-types"></a>

Deadline Cloud unterstützt drei Hook-Typen, die unterschiedlichen Punkten im Einreichungs-Workflow entsprechen.

### Pre-GUI Hooks
<a name="submission-hooks-pre-gui"></a>

Pre-GUI Hooks werden ausgeführt, bevor der Eingabedialog geöffnet wird. Sie können Hooks vor der GUI für die folgenden Aufgaben verwenden:

**Wichtig**  
Pre-GUI Hooks können nur mit dem eigenständigen GUI-Submitter () ausgeführt werden. `deadline bundle gui-submit` Sie können nicht in anwendungsinternen (DCC) -Absendern wie Maya, Nuke oder Blender ausgeführt werden, da diese Anwendungen ihren Einreichungsdialog direkt erstellen und die Phase vor der GUI nicht aufrufen. Pre-GUI Hooks gelten auch nicht für CLI Submission (`deadline bundle submit`), die keine GUI-Phase hat. Pre-submission und Hooks nach der Einreichung funktionieren für alle Einreichungsmethoden.
+ Pre-populate Jobname, Beschreibung und Priorität
+ Legen Sie die Standardwerte für Parameter auf der Grundlage der aktuellen Szene oder des aktuellen Pipeline-Kontextes fest
+ Fragen Sie ein Projektmanagementsystem nach Aufgabenmetadaten ab

Pre-GUI Hooks blockieren das Öffnen des Dialogs, wenn sie fehlschlagen (Exit-Code ungleich Null oder Timeout).

Geben Sie JSON auf die Standardversion aus, um den ursprünglichen Status des Dialogs zu ändern. Das folgende Beispiel zeigt das Ausgabeformat:

```
import json

output = {
    "name": "My Render - v042",
    "description": "Submitted via pipeline",
    "parameters": {
        "SceneFile": "/resolved/path/to/scene.ma",
        "OutputPath": "/shots/sh010/renders/",
        "deadline:priority": 75,
        "deadline:maxFailedTasksCount": 5,
        "deadline:maxRetriesPerTask": 3,
        "deadline:maxWorkerCount": 10,
        "deadline:targetTaskRunStatus": "READY"
    }
}
print(json.dumps(output))
```

In der folgenden Tabelle werden die Ausgabefelder für Pre-GUI-Hooks beschrieben.


| Feld | Typ | Description | 
| --- | --- | --- | 
| `name` | Zeichenfolge | Pre-fills das Feld für den Jobnamen. | 
| `description` | Zeichenfolge | Pre-fills das Feld mit der Stellenbeschreibung. | 
| `parameters` | Objekt | Pre-fills Parameterwerte nach Namen. Jobvorlagenparameter verwenden ihren Namen direkt. Für gemeinsam genutzte Jobeigenschaften wird das `deadline:` Präfix verwendet. | 

In der folgenden Tabelle werden die Eigenschaften für gemeinsam genutzte Jobs beschrieben, die Sie mit dem `deadline:` Präfix im `parameters` Objekt festlegen können.


| Key (Schlüssel) | Typ | Description | 
| --- | --- | --- | 
| `deadline:priority` | Ganzzahl | Priorität (0—100). | 
| `deadline:maxFailedTasksCount` | Ganzzahl | Maximale Anzahl fehlgeschlagener Aufgaben, bevor der Job fehlschlägt. | 
| `deadline:maxRetriesPerTask` | Ganzzahl | Maximale Anzahl von Wiederholungen pro fehlgeschlagener Aufgabe. | 
| `deadline:maxWorkerCount` | Ganzzahl | Maximale Anzahl gleichzeitiger Mitarbeiter. | 
| `deadline:targetTaskRunStatus` | Zeichenfolge | Anfänglicher Aufgabenstatus: `READY` oder`SUSPENDED`. | 

**Anmerkung**  
CLI-supplied `--parameter`Werte haben Vorrang vor vom Hook `parameters` bereitgestellten Werten.

### Pre-submission Haken
<a name="submission-hooks-pre-submission"></a>

Pre-submission Hooks werden ausgeführt, bevor Job-Anhänge gehasht und hochgeladen werden. Sie können Hooks vor der Einreichung für die folgenden Aufgaben verwenden:
+ Überprüfen Sie die Jobkonfiguration
+ Entdecken Sie zusätzliche Eingabedateien und fügen Sie sie hinzu
+ Ändern Sie Jobparameter wie die Priorität
+ Setzen Sie Studio-Richtlinien durch

Pre-submission Hooks blockieren die Übermittlung, wenn sie fehlschlagen (Exit-Code ungleich Null oder Timeout).

Geben Sie JSON auf stdout aus, um die Einreichung zu ändern. Die Hook-Ausgabe ersetzt Asset-Referenzen auf der Ebene der verschachtelten Schlüssel. Wenn Ihre Hook-Ausgabe `inputFilenames` erfolgt, ersetzt die Hook-Ausgabe die gesamte `inputFilenames` Liste. Deadline Cloud behält Schlüssel bei, die Sie nicht in Ihre Ausgabe aufnehmen.

Das folgende Beispiel fügt entdeckte Texturdateien zur Einreichung hinzu:

```
import json
import os
import sys

metadata = json.load(sys.stdin)
bundle_dir = metadata["jobBundleDir"]

textures = []
for root, _, files in os.walk(bundle_dir):
    for f in files:
        if f.endswith(('.exr', '.png', '.jpg', '.tx')):
            textures.append(os.path.join(root, f))

if textures:
    print(json.dumps({
        "attachments": {
            "assetReferences": {
                "inputFilenames": textures
            }
        }
    }))
```

Pre-submission Hooks können auch Parameterwerte von Jobvorlagen ändern, indem sie eine `parameters` Map auf stdout ausgeben:

```
print(json.dumps({"parameters": {"SceneFile": "/resolved/scene.ma", "Quality": "high"}}))
```

Parameterschlüssel sind Parameternamen für Jobvorlagen. Werte aus einem Hook werden auf die Parameterwerte des Pakets angewendet, aber CLI-supplied `--parameter` Werte haben immer noch Vorrang vor den vom Hook bereitgestellten Werten.

**Wichtig**  
`PATH`Die auf stdout ausgegebenen Parameter müssen absolut sein. Ein Hook wird nicht vom Arbeitsverzeichnis der sendenden Shell aus ausgeführt, sodass ein relativer `PATH` Wert auf stdout mehrdeutig ist und mit einem Fehler zurückgewiesen wird. Gibt einen absoluten Pfad aus (z. B. join with`DEADLINE_JOB_BUNDLE_DIR`) oder schreibt den Wert stattdessen nach`parameter_values.yaml`/`parameter_values.json`auf der Festplatte, wo ein relativer Pfad anhand des Job-Bundle-Verzeichnisses aufgelöst `PATH` wird.

### Post-submission Hooks
<a name="submission-hooks-post-submission"></a>

Post-submission Hooks werden ausgeführt, nachdem der `CreateJob` API-Aufruf erfolgreich zurückgekehrt ist. Der Job wurde zu diesem Zeitpunkt von Deadline Cloud akzeptiert. Sie können Hooks nach der Einreichung für die folgenden Aufgaben verwenden:
+ Benachrichtigungen senden (Slack, E-Mail)
+ Tracking-Systeme aktualisieren
+ Details zur Einreichung protokollieren

Post-submission Hook-Fehler werden als Warnungen protokolliert, wirken sich jedoch nicht auf den übermittelten Job aus.

## Konfigurieren Sie Submission-Hooks
<a name="submission-hooks-configuration"></a>

Definieren Sie Hooks in einer `hooks.yaml` `hooks.json` OR-Datei. Platzieren Sie die Datei in Ihrem Job-Bundle-Verzeichnis neben `template.yaml` oder in dem von angegebenen Verzeichnis`DEADLINE_HOOKS_DIR`. Wenn beide Formate im selben Verzeichnis vorhanden sind, meldet der Einreicher einen Fehler.

Das `version` Feld ist erforderlich und muss es sein. `"1.0"`

Das folgende Beispiel zeigt eine `hooks.yaml` Konfiguration:

```
version: "1.0"
preGUI:
  - command: python3
    args: [scripts/prefill_from_shotgrid.py]
    timeout: 10

preSubmission:
  - command: python3
    args: [scripts/validate_assets.py]
    timeout: 60
    env:
      VALIDATION_LEVEL: strict

  - command: python3
    args: [scripts/discover_textures.py]

postSubmission:
  - command: python3
    args: [scripts/notify_slack.py]
    timeout: 15
    env:
      SLACK_WEBHOOK: https://hooks.slack.com/...
```

### Felder für die Hook-Definition
<a name="submission-hooks-definition-fields"></a>

Jeder Hook-Eintrag akzeptiert die folgenden Felder.


| Feld | Erforderlich | Standard | Description | 
| --- | --- | --- | --- | 
| `command` | Ja | – | Ausführbare Datei oder Interpreter (zum Beispiel `python3` oder`bash`). | 
| `args` | Nein | `[]` | Command-line Argumente. | 
| `timeout` | Nein | `60` | Maximale Ausführungszeit in Sekunden. | 
| `env` | Nein | `{}` | Zusätzliche Umgebungsvariablen. Hooks erben die gesamte Umgebung des Absenders. Die `DEADLINE_*` Variablen und alle Hook-spezifischen `env` Werte werden überlagert. | 

### Pfadauflösung
<a name="submission-hooks-path-resolution"></a>

Hook-Skripte werden gemäß den folgenden Regeln aufgelöst:
+ **Absolute Pfade** — Wird unverändert verwendet.
+ **Relative Pfade** — Relativ zum Job-Bundle-Verzeichnis aufgelöst.
+ **Befehlsnamen** — Im System-PATH gesucht.

## Hook-Eingabe
<a name="submission-hooks-input"></a>

Hooks empfangen Job-Metadaten über JSON auf Standard und über praktische Umgebungsvariablen.

### Umgebungsvariablen
<a name="submission-hooks-env-vars"></a>

Die folgenden Umgebungsvariablen sind für alle Hooks verfügbar.


| Variable | Description | 
| --- | --- | 
| `DEADLINE_JOB_NAME` | Name des Job. | 
| `DEADLINE_PRIORITY` | Berufspriorität. | 
| `DEADLINE_FARM_ID` | Farm-ID. | 
| `DEADLINE_QUEUE_ID` | Warteschlangen-ID. | 
| `DEADLINE_JOB_BUNDLE_DIR` | Pfad zum Job-Bundle-Verzeichnis. | 
| `DEADLINE_STORAGE_PROFILE_ID` | Speicherprofil-ID (falls festgelegt). | 
| `DEADLINE_JOB_ID` | Job-ID (nur Hooks nach der Einreichung). | 

### JSON auf stdin
<a name="submission-hooks-json-stdin"></a>

Vollständige Metadaten werden als JSON auf stdin bereitgestellt. Das folgende Beispiel zeigt die Struktur:

```
{
  "jobName": "My Render Job",
  "priority": 50,
  "farmId": "farm-abc123",
  "queueId": "queue-def456",
  "jobBundleDir": "/path/to/bundle",
  "parameters": {"SceneFile": "/path/to/scene.ma"},
  "submitterName": "Maya",
  "assetReferences": {
    "inputFilenames": ["/path/to/texture.exr"],
    "inputDirectories": [],
    "outputDirectories": ["/path/to/output"],
    "referencedPaths": []
  },
  "submissionPayload": {}
}
```

## Sicherheit
<a name="submission-hooks-security"></a>

Hooks sind standardmäßig deaktiviert. Jede Hook-Quelle hat ihre eigene Einstellung, die Sie aktivieren müssen.

### Bundle-Hooks aktivieren
<a name="submission-hooks-enable-bundle"></a>

Um Hooks zuzulassen, die `hooks.yaml` in Job-Bundles definiert sind, aktivieren Sie die Bundle-Hook-Einstellung.

**Um Bundle-Hooks zu aktivieren**
+ Führen Sie den folgenden Befehl aus:

  ```
  deadline config set settings.allow_bundle_hooks true
  ```

### Umgebungs-Hooks aktivieren
<a name="submission-hooks-enable-environment"></a>

Um Hooks von einem von angegebenen Verzeichnis aus zuzulassen`DEADLINE_HOOKS_DIR`, aktivieren Sie die Umgebungs-Hooks-Einstellung und legen Sie den Verzeichnispfad fest.

**Um Umgebungs-Hooks zu aktivieren**

1. Aktivieren Sie die Einstellung:

   ```
   deadline config set settings.allow_environment_hooks true
   ```

1. Legen Sie die Umgebungsvariable fest, normalerweise in einem Anwendungsstarter-Skript:

   ```
   export DEADLINE_HOOKS_DIR=/studio/pipeline/hooks/blender
   ```

### Bestätigungsaufforderung
<a name="submission-hooks-confirmation"></a>

Wenn Sie Hooks aktivieren, werden Sie vom Absender zur Bestätigung aufgefordert, bevor die Hooks ausgeführt werden. Pre-GUI Hooks zeigen die Eingabeaufforderung an, bevor der Dialog geöffnet wird. Pre-submission und Hooks nach der Einreichung zeigen die Aufforderung an, wenn Sie „Senden“ wählen.

In der Eingabeaufforderung wird angezeigt, welche Befehle ausgeführt werden, sodass Sie Folgendes überprüfen können, bevor Sie fortfahren:

```
This job bundle contains submission hooks that will execute on your machine:

  Pre-GUI hooks:
    [1] python3 prefill_from_shotgrid.py

  Pre-submission hooks:
    [1] python3 validate_assets.py

  Post-submission hooks:
    [1] python3 notify.py

  Bundle: /path/to/bundle

Do you want to run these hooks? [Y/n]
```

Führen Sie den folgenden Befehl aus, um Bestätigungsaufforderungen für CI/automation Workflows zu überspringen:

```
deadline config set settings.auto_accept true
```

### Zusammenfassung der Konfigurationseinstellungen
<a name="submission-hooks-config-summary"></a>


| Einstellung | Standard | Description | 
| --- | --- | --- | 
| `settings.allow_bundle_hooks` | `false` | Gibt an, ob Hooks aus der `hooks.yaml` Job-Bundle-Datei zulässig sind. | 
| `settings.allow_environment_hooks` | `false` | Gibt an, ob Hooks aus dem `DEADLINE_HOOKS_DIR` Verzeichnis zugelassen werden sollen. | 
| `settings.auto_accept` | `false` | Gibt an, ob Bestätigungsaufforderungen übersprungen werden sollen. In CI/automation Umgebungen mit Vorsicht verwenden. | 

## Bereitstellung von Studio
<a name="submission-hooks-studio-deployment"></a>

Die technischen Leiter von Pipeline können Hooks so konfigurieren, dass sie automatisch für alle Künstler ausgeführt werden, indem sie Umgebungs-Hooks auf allen Arbeitsstationen bereitstellen. Verwenden Sie dieses Verfahren, wenn Ihr Studio über einen gemeinsamen Netzwerkspeicherort für Hook-Skripte verfügt und Sie Administratorzugriff haben, um Künstler-Workstations zu konfigurieren.

**Um Umgebungs-Hooks für ein Studio bereitzustellen**

1. Konfigurieren Sie Workstations so, dass sie Umgebungs-Hooks zulassen:

   ```
   deadline config set settings.allow_environment_hooks true
   ```

1. `DEADLINE_HOOKS_DIR`Im Launcher-Skript jeder Anwendung ist Folgendes festgelegt:

   ```
   # blender_launcher.sh
   export DEADLINE_HOOKS_DIR=/studio/pipeline/hooks/blender
   exec blender "$@"
   ```

1. Erstellen Sie die Hooks an der angegebenen Stelle:

   ```
   /studio/pipeline/hooks/blender/
   ├── hooks.yaml
   └── validate_scene.py
   ```

## Fehlerbehandlung
<a name="submission-hooks-error-handling"></a>

Wenn ein Pre-Submission- oder Pre-GUI-Hook fehlschlägt, enthält die Fehlerausgabe die folgenden Informationen:
+ Welcher Hook ist fehlgeschlagen
+ Beendigungscode
+ stdout- und stderr-Ausgabe
+ Timeout-Dauer (wenn der Hook das Timeout überschritten hat)

Der Einsender blockiert die Einreichung, bis Sie das Problem behoben haben. Post-submission Hook-Fehler werden als Warnungen protokolliert, wirken sich jedoch nicht auf den eingereichten Job aus.

## Bewährte Methoden
<a name="submission-hooks-best-practices"></a>
+ **Halten Sie Hooks schnell.** Stellen Sie angemessene Timeouts ein und vermeiden Sie lang andauernde Operationen in Hooks.
+ **Loggen Sie sich auf stderr ein.** Reservieren Sie stdout für die JSON-Ausgabe in Hooks vor der GUI und vor der Einreichung.
+ **Behandeln Sie Fehler mit Würde.** Stellen Sie klare Fehlermeldungen auf stderr bereit, damit Benutzer erkennen können, was schief gelaufen ist.
+ **Testen Sie zuerst mit der CLI.** Die CLI-Einreichung ist einfacher zu debuggen als die GUI-Übermittlung.
+ **Verwenden Sie absolute Pfade in der Ausgabe.** Verwenden Sie beim Hinzufügen von Dateien zu Asset-Referenzen immer absolute Pfade.
+ **Verwenden Sie Environment-Hooks für studioweite Richtlinien.** Environment-Hooks sind sicherer als Bundle-Hooks, da sie vom Studio und nicht vom Bundle-Autor gesteuert werden.
+ **Überprüfen Sie die Bundle-Hooks, bevor Sie sie aktivieren.** Prüfen Sie `hooks.yaml` die Pakete aus nicht vertrauenswürdigen Quellen, bevor Sie die Ausführung von Bundle-Hooks zulassen.

## Methoden zur Einreichung
<a name="submission-hooks-cli-gui"></a>

Hooks funktionieren mit den folgenden Einreichungsmethoden:
+ `deadline bundle submit`(CLI) — Pre-submission und Hooks nach der Einreichung werden ausgeführt. Die CLI hat keine GUI-Phase, sodass Pre-GUI-Hooks nicht gelten.
+ `deadline bundle gui-submit`(Standalone-GUI) — Alle Phasen werden ausgeführt, auch Hooks vor der GUI.
+ In-application (DCC) Einreicher — Pre-submission und Hooks nach der Einreichung werden ausgeführt. DCC-Einreicher rufen die Pre-GUI-Phase nicht auf.

Die eigenständige GUI kopiert `hooks.yaml` in das Job History Bundle und löst die Skriptpfade zurück in Ihr ursprüngliches Bundle-Verzeichnis auf.

## Weitere Ressourcen
<a name="submission-hooks-related"></a>

Weitere Informationen zu Integrationspunkten und verwandten Themen finden Sie im Folgenden:
+ [Hooks, Ereignisse und Integrationspunkte für Jobs](integration-points.md)
+ [So reichen Sie einen Job bei Deadline Cloud ein](submit-jobs-how.md)
+ [Jobs erstellen, um sie an Deadline Cloud einzureichen](building-jobs.md)
+ [Deadline-Cloud-Repository](https://github.com/aws-deadline/deadline-cloud) auf der Website GitHub 