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
undpostrestore
: Führen Sie vor und nach Paketabhängigkeiten wiederhergestellt.preprovision
undpostprovision
: Führen Sie vor und nach dem Erstellen von Azure-Ressourcen aus.predeploy
undpostdeploy
: Führen Sie vor und nach der Bereitstellung des Anwendungscodes in Azure aus.preup
undpostup
: Führen Sie vor und nach der kombinierten Bereitstellungspipeline aus.Up
ist ein Kurzbefehl, der ausgeführt wirdrestore
,provision
unddeploy
sequenziell.predown
undpostdown
: Führen Sie vor und nach dem Entfernen der Ressourcen aus.
Die folgenden Dienstlebenszyklus-Ereignishaken sind verfügbar:
prerestore
undpostrestore
: Führen Sie vor und nach dem Wiederherstellen der Dienstpakete und Abhängigkeiten aus.prepackage
undpostpackage
: Führen Sie vor und nach dem Packen der App für die Bereitstellung aus.predeploy
undpostdeploy
: 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
.
- Hinweis: PowerShell 7 ist erforderlich für
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 Konsolestdin
,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 .env
azd 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 ".