Freigeben über


Anpassen Ihrer Azure Developer CLI-Workflows mithilfe von Befehls- und Ereignishaken

Die Azure Developer CLI unterstützt verschiedene Erweiterungspunkte, um Ihre Workflows und Bereitstellungen anzupassen. Mit der Hooks-Middleware können Sie benutzerdefinierte Skripts vor und nach azd Befehlen und Dienstlebenszyklusereignissen ausführen. Hooks folgen einer Benennungskonvention mithilfe von pre und nach Präfixen für den übereinstimmenden azd Befehls- oder Dienstereignisnamen.

Sie können z. B. ein benutzerdefiniertes Skript in den folgenden Szenarien ausführen:

  • Verwenden Sie den Prerestore--Hook, um die Abhängigkeitsverwaltung anzupassen.
  • Verwenden Sie die vor der Bereitstellung Hooks, um zu überprüfen, ob externe Abhängigkeiten oder benutzerdefinierte Konfigurationen vorhanden sind, bevor Sie Ihre App bereitstellen.
  • Verwenden Sie die Nachbereitung Hooks am Ende eines Workflows oder einer Pipeline, um benutzerdefinierte Bereinigung oder Protokollierung durchzuführen.

Verfügbare Hooks

Die folgenden azd Befehlshaken sind verfügbar:

  • prerestore und postrestore: Ausführen vor und nach paketabhängigkeiten werden wiederhergestellt.
  • preprovision und postprovision: Führen Sie vor und nach der Erstellung von Azure-Ressourcen aus.
  • predeploy und postdeploy: Führen Sie vor und nach der Bereitstellung des Anwendungscodes in Azure aus.
  • preup und postup: Führen Sie vor und nach der kombinierten Bereitstellungspipeline aus. Up ist ein Kurzbefehl, der restore, provisionund sequenziell deploy ausführt.
  • predown und postdown: Führen Sie vor und nach dem Entfernen der Ressourcen aus.

Die folgenden Dienstlebenszyklus-Ereignishaken sind verfügbar:

  • prerestore und postrestore: Führen Sie vor und nach dem Wiederherstellen der Dienstpakete und Abhängigkeiten aus.
  • prebuild und postbuild: Führen Sie vor und nach dem Erstellen des Dienstquellcodes oder Containers aus.
  • prepackage und postpackage: Führen Sie vor und nach dem Packen der App für die Bereitstellung aus.
  • predeploy und postdeploy: Führen Sie vor und nach der Bereitstellung des Dienstcodes in Azure aus.

Hook-Konfiguration

Hooks können in Ihrer azure.yaml Datei im Stammverzeichnis oder in einer bestimmten Dienstkonfiguration registriert werden. Alle Arten von Hooks unterstützen die folgenden Konfigurationsoptionen:

  • shell: sh | pwsh
    • Hinweis: PowerShell 7 ist für pwsherforderlich.
  • run: Definieren eines Inlineskripts oder eines Pfads zu einer Datei.
  • continueOnError: Wenn die Einstellung weiterhin ausgeführt wird, auch wenn während eines Befehlshaken ein Skriptfehler aufgetreten ist (Standard false).
  • interactive: Wenn festgelegt wird, bindet das ausgeführte Skript an die Konsole stdin, stdout & stderr (Standard false).
  • windows: Gibt an, dass die geschachtelten Konfigurationen nur unter Windows OS gelten. Wenn diese Konfigurationsoption ausgeschlossen ist, wird der Hook auf allen Plattformen ausgeführt.
  • posix: Gibt an, dass die geschachtelten Konfigurationen nur für POSIX-basierte OSes (Linux & MaxOS) gelten. Wenn diese Konfigurationsoption ausgeschlossen ist, wird der Hook auf allen Plattformen ausgeführt.

Hook-Beispiele

Die folgenden Beispiele zeigen verschiedene Arten von Hook-Registrierungen und Konfigurationen.

Stammbefehlsregistrierung

Hooks können so konfiguriert werden, dass sie für bestimmte azd Befehle im Stammverzeichnis Ihrer azure.yaml Datei ausgeführt werden.

Das Projektverzeichnis (in dem sich die azure.yaml Datei befindet) ist das standard aktuelle Arbeitsverzeichnis (cwd) für Befehlshaken.

name: todo-nodejs-mongo
metadata:
  template: todo-nodejs-mongo@0.0.1-beta
hooks:
  prerestore: # Example of an inline script. (shell is required for inline scripts)
    shell: sh
    run: echo 'Hello'
  preprovision: # Example of external script (Relative path from project root)
    run: ./hooks/preprovision.sh
services:
  web:
    project: ./src/web
    dist: build
    language: js
    host: appservice
  api:
    project: ./src/api
    language: js
    host: appservice

Dienstregistrierung

Hooks können auch so konfiguriert werden, dass sie nur für bestimmte Dienste ausgeführt werden, die in Ihrer .yaml Datei definiert sind.

Das Dienstverzeichnis (derselbe Pfad wie in der eigenschaft project der Dienstkonfiguration in der datei azure.yaml) ist die Standard-cwd für Diensthaken.

name: todo-nodejs-mongo
metadata:
  template: todo-nodejs-mongo@0.0.1-beta
services:
  web:
    project: ./src/web
    dist: build
    language: js
    host: appservice
  api:
    project: ./src/api
    language: js
    host: appservice
    hooks:
      prerestore: # Example of an inline script. (shell is required for inline scripts)
        shell: sh
        run: echo 'Restoring API service...'
      prepackage: # Example of external script (Relative path from service path)
        run: ./hooks/prepackage.sh

Betriebssystemspezifische Hooks

Optional können Hooks auch so konfiguriert werden, dass sie entweder unter Windows oder Posix (Linux & MaxOS) ausgeführt werden. Wenn die Windows- oder Posix-Konfigurationen standardmäßig ausgeschlossen sind, wird der Hook auf allen Plattformen ausgeführt.

name: todo-nodejs-mongo
metadata:
  template: todo-nodejs-mongo@0.0.1-beta
hooks:
  prerestore: 
    posix: # Only runs on Posix environments
      shell: sh
      run: echo 'Hello'
   windows: # Only runs on Windows environments
     shell: pwsh
     run: Write-Host "Hello"
services:
  web:
    project: ./src/web
    dist: build
    language: js
    host: appservice
  api:
    project: ./src/api
    language: js
    host: appservice

Mehrere Hooks pro Ereignis

Sie können mehrere Hooks pro Ereignis in verschiedenen Bereichen konfigurieren, z. B. die Stammregistrierungsstufe oder für einen bestimmten Dienst:

name: example-project
services:
    api:
        project: src/api
        host: containerapp
        language: ts
        hooks:
            postprovision:
                - shell: sh
                  run: scripts/postprovision1.sh
                - shell: sh
                  run: scripts/postprovision2.sh
hooks:
    postprovision:
        - shell: sh
          run: scripts/postprovision1.sh
        - shell: sh
          run: scripts/postprovision2.sh

Verwenden von Umgebungsvariablen mit Hooks

Hooks können Umgebungsvariablen in der .env Datei mithilfe der Befehle azd env get-values und azd set <key> <value> abrufen und festlegen. Hooks können auch Umgebungsvariablen aus Ihrer lokalen Umgebung mithilfe der ${YOUR_ENVIRONMENT VARIABLE}-Syntax abrufen. azd legt automatisch bestimmte Umgebungsvariablen in der datei .env fest, wenn Befehle ausgeführt werden, z. B. AZURE_ENV_NAME und AZURE_LOCATION. Ausgabeparameter aus der main.bicep Datei werden auch in der .env Datei festgelegt. Die Verwalten von Umgebungsvariablen Seite enthält weitere Informationen zu Umgebungsvariablen-Workflows.

Hooks können Umgebungsvariablen inline oder über referenzierte Skripts abrufen und festlegen, wie im folgenden Beispiel gezeigt:

name: azure-search-openai-demo
metadata:
  template: azure-search-openai-demo@0.0.2-beta
services:
  backend:
    project: ./app/backend
    language: py
    host: appservice
hooks:
  postprovision:
    windows: # Run referenced script that uses environment variables (script shown below)
      shell: pwsh
      run: ./scripts/prepdocs.ps1
      interactive: true
      continueOnError: false
    posix:
      shell: sh
      run: ./scripts/prepdocs.sh
      interactive: true
      continueOnError: false
  postdeploy: # Pull environment variable inline from local device and set in .env file
      shell: sh
      run: azd env set REACT_APP_WEB_BASE_URL ${SERVICE_WEB_ENDPOINT_URL}

Die Referenz: prepdocs.sh Skript:

echo "Loading azd .env file from current environment"

# Use the `get-values` azd command to retrieve environment variables from the `.env` file
while IFS='=' read -r key value; do
    value=$(echo "$value" | sed 's/^"//' | sed 's/"$//')
    export "$key=$value"
done <<EOF
$(azd env get-values) 
EOF

echo 'Creating python virtual environment "scripts/.venv"'
python3 -m venv scripts/.venv

echo 'Installing dependencies from "requirements.txt" into virtual environment'
./scripts/.venv/bin/python -m pip install -r scripts/requirements.txt

echo 'Running "prepdocs.py"'
./scripts/.venv/bin/python ./scripts/prepdocs.py './data/*' 
    --storageaccount "$AZURE_STORAGE_ACCOUNT"
    --container "$AZURE_STORAGE_CONTAINER"
    --searchservice "$AZURE_SEARCH_SERVICE"
    --openaiservice "$AZURE_OPENAI_SERVICE"
    --openaideployment "$AZURE_OPENAI_EMB_DEPLOYMENT"
    --index "$AZURE_SEARCH_INDEX"
    --formrecognizerservice "$AZURE_FORMRECOGNIZER_SERVICE"
    --tenantid "$AZURE_TENANT_ID" -v

Anfordern von Hilfe

Informationen zum Ablegen eines Fehlers, Anfordern von Hilfe oder Vorschlagen eines neuen Features für die Azure Developer CLI finden Sie auf der Seite Problembehandlung und Support.