Share via


Anpassa dina Azure Developer CLI-arbetsflöden med hjälp av kommando- och händelsekrokar

Azure Developer CLI stöder olika tilläggspunkter för att anpassa dina arbetsflöden och distributioner. Med hooks-mellanprogrammet kan du köra anpassade skript före och efter azd kommandon och livscykelhändelser för tjänsten. hooks följer en namngivningskonvention med pre- och postprefix på matchande azd kommando- eller tjänsthändelsenamn.

Du kanske till exempel vill köra ett anpassat skript i följande scenarier:

  • Använd förlagringskroken för att anpassa beroendehantering.
  • Använd fördistributionskroken för att kontrollera att externa beroenden eller anpassade konfigurationer finns på plats innan du distribuerar appen.
  • Använd efterkopplingskroken i slutet av ett arbetsflöde eller en pipeline för att utföra anpassad rensning eller loggning.

Tillgängliga krokar

Följande azd kommandokrokar är tillgängliga:

  • prerestore och postrestore: Kör före och efter paketberoenden återställs.
  • preprovision och postprovision: Kör före och efter att Azure-resurser har skapats.
  • predeploy och postdeploy: Kör före och efter att programkoden har distribuerats till Azure.
  • preup och postup: Kör före och efter den kombinerade distributionspipelinen. Up är ett kortkommando som kör restore, provisionoch deploy sekventiellt.
  • predown och postdown: Kör före och efter att resurserna har tagits bort.

Följande händelsekrokar för tjänstlivscykel är tillgängliga:

  • prerestore och postrestore: Kör före och efter att tjänstpaketen och beroendena har återställts.
  • prepackage och postpackage: Kör före och efter att appen har paketerats för distribution.
  • predeploy och postdeploy: Kör före och efter att tjänstkoden har distribuerats till Azure.

Hook-konfiguration

Hooks kan registreras i filen azure.yaml i roten eller inom en specifik tjänstkonfiguration. Alla typer av krokar stöder följande konfigurationsalternativ:

  • shell: sh | pwsh (härleds automatiskt från körning om det inte anges).
    • Obs! PowerShell 7 krävs för pwsh.
  • run: Definiera ett infogat skript eller en sökväg till en fil.
  • continueOnError: När uppsättningen fortsätter att köras även efter att ett skriptfel uppstod under en kommandokrok (standard false).
  • interactive: När uppsättningen binder skriptet som körs till konsolen stdin, stdout & stderr (standard falskt).
  • windows: Anger att de kapslade konfigurationerna endast ska gälla för Windows OS. Om det här konfigurationsalternativet undantas körs kroken på alla plattformar.
  • posix: Anger att de kapslade konfigurationerna endast gäller för POSIX-baserade operativsystem (Linux och MaxOS). Om det här konfigurationsalternativet undantas körs kroken på alla plattformar.

Hook-exempel

I följande exempel visas olika typer av hookregistreringar och konfigurationer.

Rotkommandoregistrering

Hooks kan konfigureras för att köras för specifika azd kommandon i roten av azure.yaml filen.

Projektkatalogen azure.yaml (där filen finns) är standardkatalogen för den aktuella arbetskatalogen (cwd) för kommandokrokar.

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

Tjänstregistrering

Hooks kan också konfigureras att endast köras för specifika tjänster som definierats i filen .yaml .

Tjänstkatalogen (samma sökväg som definierats i project egenskapen för tjänstkonfigurationen azure.yaml i filen) är standardvärdet cwd för tjänstkrokar.

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

OS-specifika krokar

Du kan också konfigurera krokar för att köras antingen på Windows eller Posix (Linux & MaxOS). Om Windows- eller Posix-konfigurationerna undantas körs hooken som standard på alla plattformar.

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

Använda miljövariabler med krokar

Hooks kan hämta och ange miljövariabler i .env filen med hjälp av kommandona azd env get-values och azd set <key> <value> . Hooks kan också hämta miljövariabler från din lokala miljö med hjälp av syntaxen ${YOUR_ENVIRONMENT VARIABLE} . azd anger automatiskt vissa miljövariabler i .env filen när kommandon körs, till exempel AZURE_ENV_NAME och AZURE_LOCATION. Utdataparametrar från main.bicep filen anges också i .env filen. Sidan Hantera miljövariabler innehåller mer information om arbetsflöden för miljövariabler.

Hooks kan hämta och ange miljövariabler infogade eller via refererade skript, vilket visas i följande exempel:

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}

Det refererade: prepdocs.sh skriptet:

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

Begär hjälp

Information om hur du skickar in en bugg, begär hjälp eller föreslår en ny funktion för Azure Developer CLI finns på felsöknings - och supportsidan .