Personalizzare i flussi di lavoro dell'interfaccia della riga di comando per sviluppatori di Azure usando hook di comandi ed eventi
L'interfaccia della riga di comando per sviluppatori di Azure supporta vari punti di estensione per personalizzare i flussi di lavoro e le distribuzioni. Il middleware hook consente di eseguire script personalizzati prima e dopo azd
i comandi e gli eventi del ciclo di vita del servizio. gli hook seguono una convenzione di denominazione usandopre e post prefissi sul nome dell'evento del servizio o del comando corrispondenteazd
.
Ad esempio, è possibile eseguire uno script personalizzato negli scenari seguenti:
- Usare l'hook di pre-archivio per personalizzare la gestione delle dipendenze.
- Usare l'hook di pre-distribuzione per verificare le dipendenze esterne o le configurazioni personalizzate prima di distribuire l'app.
- Usare l'hook di postup alla fine di un flusso di lavoro o di una pipeline per eseguire operazioni di pulizia o registrazione personalizzate.
Hook disponibili
Sono disponibili gli hook dei comandi seguenti azd
:
prerestore
epostrestore
: eseguire prima e dopo il ripristino delle dipendenze del pacchetto.preprovision
epostprovision
: eseguire prima e dopo la creazione delle risorse di Azure.predeploy
epostdeploy
: eseguire prima e dopo la distribuzione del codice dell'applicazione in Azure.preup
epostup
: eseguire prima e dopo la pipeline di distribuzione combinata.Up
è un comando abbreviato che eseguerestore
,provision
edeploy
in sequenza.predown
epostdown
: eseguire prima e dopo la rimozione delle risorse.
Sono disponibili gli hook di eventi del ciclo di vita del servizio seguenti:
prerestore
epostrestore
: eseguire prima e dopo il ripristino dei pacchetti e delle dipendenze del servizio.prepackage
epostpackage
: eseguire prima e dopo il pacchetto dell'app per la distribuzione.predeploy
epostdeploy
: eseguire prima e dopo la distribuzione del codice del servizio in Azure.
Configurazione hook
Gli hook possono essere registrati nel azure.yaml
file nella radice o all'interno di una configurazione del servizio specifica. Tutti i tipi di hook supportano le opzioni di configurazione seguenti:
shell
:sh
|pwsh
(dedotto automaticamente dall'esecuzione se non specificato).- Nota: PowerShell 7 è obbligatorio per
pwsh
.
- Nota: PowerShell 7 è obbligatorio per
run
: definire uno script inline o un percorso di un file.continueOnError
: quando set continuerà a essere eseguito anche dopo che si è verificato un errore di script durante un hook dei comandi (impostazione predefinita false).interactive
: se impostato associa lo script in esecuzione alla consolestdin
,stdout
&stderr
(valore predefinito false).windows
: specifica che le configurazioni annidate verranno applicate solo nel sistema operativo Windows. Se questa opzione di configurazione è esclusa, l'hook viene eseguito su tutte le piattaforme.posix
: specifica che le configurazioni annidate verranno applicate solo ai sistemi operativi basati su POSIX (Linux & MaxOS). Se questa opzione di configurazione è esclusa, l'hook viene eseguito su tutte le piattaforme.
Esempi di hook
Gli esempi seguenti illustrano diversi tipi di registrazioni e configurazioni hook.
Registrazione del comando radice
Gli hook possono essere configurati per l'esecuzione per comandi specifici azd
nella radice del azure.yaml
file.
La directory del progetto (in cui si trova il azure.yaml
file) è la directory di lavoro corrente predefinita (cwd
) per gli hook dei comandi.
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
Registrazione del servizio
Gli hook possono anche essere configurati per l'esecuzione solo per servizi specifici definiti nel .yaml
file.
La directory del servizio (lo stesso percorso definito nella project
proprietà della configurazione del servizio nel azure.yaml
file) è l'impostazione predefinita cwd
per gli hook del servizio.
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
Hook specifici del sistema operativo
Facoltativamente, gli hook possono essere configurati anche per l'esecuzione in Windows o Posix (Linux & MaxOS). Per impostazione predefinita, se le configurazioni di Windows o Posix vengono escluse, l'hook viene eseguito su tutte le piattaforme.
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
Usare le variabili di ambiente con hook
Gli hook possono ottenere e impostare variabili di ambiente nel .env
file usando i azd env get-values
comandi e azd set <key> <value>
. Gli hook possono anche recuperare variabili di ambiente dall'ambiente locale usando la ${YOUR_ENVIRONMENT VARIABLE}
sintassi . azd
imposta automaticamente determinate variabili di ambiente nel .env
file quando vengono eseguiti i comandi, ad esempio AZURE_ENV_NAME
e AZURE_LOCATION
. Anche i parametri di output del main.bicep
file vengono impostati nel .env
file. La pagina Gestisci variabili di ambiente include altre informazioni sui flussi di lavoro delle variabili di ambiente.
Gli hook possono ottenere e impostare variabili di ambiente inline o tramite script di riferimento, come illustrato nell'esempio seguente:
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}
Lo script a cui si fa riferimento: 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
Richiedere assistenza
Per informazioni su come inviare un bug, richiedere assistenza o proporre una nuova funzionalità per l'interfaccia della riga di comando per sviluppatori di Azure, visitare la pagina relativa alla risoluzione dei problemi e al supporto tecnico.