Condividi tramite


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 e postrestore: eseguire prima e dopo il ripristino delle dipendenze del pacchetto.
  • preprovision e postprovision: eseguire prima e dopo la creazione delle risorse di Azure.
  • predeploy e postdeploy: eseguire prima e dopo la distribuzione del codice dell'applicazione in Azure.
  • preup e postup: eseguire prima e dopo la pipeline di distribuzione combinata. Up è un comando abbreviato che esegue restore, provisione deploy in sequenza.
  • predown e postdown: eseguire prima e dopo la rimozione delle risorse.

Sono disponibili gli hook di eventi del ciclo di vita del servizio seguenti:

  • prerestore e postrestore: eseguire prima e dopo il ripristino dei pacchetti e delle dipendenze del servizio.
  • prepackage e postpackage: eseguire prima e dopo il pacchetto dell'app per la distribuzione.
  • predeploy e postdeploy: 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.
  • 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 console stdin, 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.