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 Prä- und Postpräfixen für den entsprechenden 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 den Vorbereitstellungs-Hook, um zu überprüfen, ob externe Abhängigkeiten oder benutzerdefinierte Konfigurationen vorhanden sind, bevor Sie Ihre App bereitstellen.
  • Verwenden Sie den Postup-Hook am Ende eines Workflows oder einer Pipeline, um benutzerdefinierte sauber up oder Protokollierung durchzuführen.

Verfügbare Hooks

Die folgenden azd Befehlshaken sind verfügbar:

  • prerestore und postrestore: Führen Sie vor und nach Paketabhängigkeiten wiederhergestellt.
  • preprovision und postprovision: Führen Sie vor und nach dem Erstellen 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 ausgeführt wird restore, provisionund deploy sequenziell.
  • 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.
  • 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 (wird automatisch von der Ausführung abgeleitet, wenn nicht angegeben).
    • Hinweis: PowerShell 7 ist erforderlich für pwsh.
  • run: Definieren Sie ein Inlineskript oder einen Pfad zu einer Datei.
  • continueOnError: Wenn festgelegt wird, wird die Ausführung fortgesetzt, auch nachdem 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 aktuelle Standardarbeitsverzeichnis (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 project Eigenschaft der Dienstkonfiguration in der azure.yaml Datei definiert) ist die Standardeinstellung 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

Verwenden von Umgebungsvariablen mit Hooks

Hooks können Umgebungsvariablen in der Datei mithilfe der .envazd env get-values Befehle abrufen und azd set <key> <value> festlegen. Hooks können auch Umgebungsvariablen aus Ihrer lokalen Umgebung mithilfe der ${YOUR_ENVIRONMENT VARIABLE} Syntax abrufen. azd legt bestimmte Umgebungsvariablen in der .env Datei automatisch fest, wenn Befehle ausgeführt werden, z AZURE_ENV_NAME . B. und AZURE_LOCATION. Ausgabeparameter aus der main.bicep Datei werden ebenfalls in der .env Datei festgelegt. Die Seite "Umgebungsvariablen verwalten" 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}

Der Verweis: Skript: prepdocs.sh

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

Hilfe anfordern

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 ".