Dela via


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

Hooks är azd tilläggspunkter som automatiskt kör 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örlagring hook för att anpassa beroendehantering.
  • Använd fördistribuering hook för att kontrollera att externa beroenden eller anpassade konfigurationer finns på plats innan du distribuerar appen.
  • Använd 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.
  • prepackage och postpackage: Kör före och efter att programmet har paketerats.
  • predeploy och postdeploy: Kör före och efter att programkoden har distribuerats till Azure.
  • prepublish och postpublish: Kör före och efter att programmet har publicerats.
  • 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.
  • prebuild och postbuild: Kör före och efter att tjänstens källkod eller container har skapats.
  • 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.
  • prepublish och postpublish: Kör före och efter att tjänsten har publicerats.

Hook-konfiguration

Hooks 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
    • 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 kommer att binda skriptet som körs till konsolen stdin, stdout & stderr (standard false).
  • windows: Anger att kapslade konfigurationer endast ska gälla för Windows OS. Om det här konfigurationsalternativet undantas körs kroken på alla plattformar.
  • posix: Anger att kapslade konfigurationer endast ska gälla för POSIX-baserade operativsystem (Linux & 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 för din azure.yaml-fil.

Projektkatalogen (där den azure.yaml filen finns) är den aktuella standardkatalogen (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 din .yaml-fil.

Tjänstkatalogen (samma sökväg som definierats i egenskapen project för tjänstkonfigurationen i filen azure.yaml) är standard 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

Flera krokar per händelse

Du kan konfigurera flera krokar per händelse i olika omfång, till exempel rotregistreringsnivån eller för en specifik tjänst:

name: example-project
services:
    api:
        project: src/api
        host: containerapp
        language: ts
        hooks:
            postprovision:
                - shell: sh
                  run: scripts/postprovision1.sh
                - shell: sh
                  run: scripts/postprovision2.sh
hooks:
    postprovision:
        - shell: sh
          run: scripts/postprovision1.sh
        - shell: sh
          run: scripts/postprovision2.sh

Kör krokar oberoende av varandra

Med azd hooks run kommandot kan du köra krokar oberoende av deras normala utlösarhändelser. Detta är användbart för att testa och felsöka krokar utan att gå igenom hela arbetsflödet.

azd hooks run <hook-name>

Ersätt <hook-name> med namnet på den krok som du vill köra (t.ex. preprovision, postdeploy).

Avancerade alternativ

# Run a specific service hook
azd hooks run postdeploy --service api

# Force hooks to run for a specific platform
azd hooks run preprovision --platform windows

# Run hooks in a specific environment
azd hooks run postup -e staging

# Run hooks with all options combined
azd hooks run predeploy --service frontend --platform posix -e production --interactive

Konfigurera interaktivt läge

Krokar körs som standard i interaktivt läge. Med interaktivt hooks-läge kan du köra hook-skript med direktkonsolinteraktion, vilket gör det enklare att felsöka, övervaka och interagera med dina krokar i realtid. Du kan uttryckligen interactive ange egenskapen i din hook-konfiguration om du vill inaktivera interaktivt läge för en specifik krok:

hooks:
  postprovision:
    shell: sh
    run: ./scripts/setup-database.sh
    interactive: false # Default is true

För tjänstspecifika krokar:

services:
  api:
    project: ./src/api
    language: js
    host: appservice
    hooks:
      postdeploy:
        shell: sh
        run: ./scripts/post-deploy-verification.sh
        interactive: false  # Override the default interactive mode

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 ${YOUR_ENVIRONMENT VARIABLE} syntax. 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 filen .env. 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 skript:

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å sidan felsökning och support.