Az Azure Developer CLI munkafolyamatainak testreszabása parancs- és eseményhookok használatával

A horgok olyan azd bővítménypontok, amelyek automatikusan hajtanak végre egyéni szkripteket a parancsok és a szolgáltatás életciklus-eseményei előtt és után azd . A horgok egy elnevezési konvenciót követnek , amely elő - és utótagokat használ a megfelelő azd parancs vagy szolgáltatásesemény nevére.

Előfordulhat például, hogy egyéni szkriptet szeretne futtatni a következő forgatókönyvekben:

  • A függőségkezelés testreszabásához használja a előtár horogot.
  • Az alkalmazás üzembe helyezése előtt az előre üzembe helyezési horoggal ellenőrizheti, hogy vannak-e külső függőségek vagy egyéni konfigurációk.
  • A munkafolyamat vagy folyamat végén található postup horoggal egyéni törlést vagy naplózást végezhet.

Elérhető horgok

A következő azd parancshookok érhetők el:

  • prerestore és postrestore: Futtassa a csomagfüggőségek visszaállítása előtt és után.
  • preprovision és postprovision: Futtassa az Azure-erőforrások létrehozása előtt és után.
  • prepackage és postpackage: Futtassa az alkalmazás csomagolása előtt és után.
  • predeploy és postdeploy: Futtassa az alkalmazáskódot az Azure-ban való üzembe helyezés előtt és után.
  • prepublish és postpublish: Futtassa az alkalmazás közzététele előtt és után.
  • preup és postup: Futtassa a kombinált üzembehelyezési folyamat előtt és után. Up egy gyorsparancs, amely restore, provisionés deploy egymás után fut.
  • predown és postdown: Futtassa az erőforrások eltávolítása előtt és után.

A következő szolgáltatás életciklus-eseményhookok érhetők el:

  • prerestore és postrestore: Futtassa a szolgáltatáscsomagok és függőségek visszaállítása előtt és után.
  • prebuild és postbuild: Futtassa a szolgáltatás forráskódja vagy tárolója előtt és után.
  • prepackage és postpackage: Futtassa az alkalmazás üzembe helyezéshez való csomagolása előtt és után.
  • predeploy és postdeploy: Futtassa a szolgáltatáskódot az Azure-ban való üzembe helyezés előtt és után.
  • prepublish és postpublish: Futtassa a szolgáltatás közzététele előtt és után.

Horogkonfiguráció

A horgok a gyökérkiszolgálón vagy egy adott szolgáltatáskonfigurációban vannak regisztrálva a fájlban azure.yaml . A horgok minden típusa támogatja a következő konfigurációs beállításokat:

  • shell: sh | pwsh
    • Megjegyzés: A PowerShell 7 szükséges pwsh.
  • run: Beágyazott szkript vagy fájl elérési útja.
  • continueOnError: Ha a beállítás akkor is folytatódik, ha szkripthiba történt a parancshook során (alapértelmezett hamis).
  • interactive: Ha a beállítás a futó szkriptet a konzolhoz köti, stdin, stdout & stderr (alapértelmezett hamis).
  • windows: Azt adja meg, hogy a beágyazott konfigurációk csak Windows operációs rendszerre lesznek érvényesek. Ha ez a konfigurációs lehetőség nincs kizárva, a horog minden platformon végrehajtható.
  • posix: Azt határozza meg, hogy a beágyazott konfigurációk csak POSIX-alapú operációs rendszerekre (Linux & MaxOS) lesznek érvényesek. Ha ez a konfigurációs lehetőség nincs kizárva, a horog minden platformon végrehajtható.

Példák horogra

Az alábbi példák a horogregisztrációk és -konfigurációk különböző típusait mutatják be.

Fő parancsregisztráció

A horgok úgy konfigurálhatók, hogy a azd fájl gyökerében meghatározott azure.yaml parancsokhoz fussanak.

A projektkönyvtár (ahol a azure.yaml fájl található) a parancshookok alapértelmezett aktuális munkakönyvtára (cwd).

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

Szolgáltatásregisztráció

A horgok úgy is konfigurálhatók, hogy csak a .yaml fájlban meghatározott szolgáltatásokhoz fussanak.

A szolgáltatáskönyvtár (az project fájl szolgáltatáskonfigurációjának azure.yaml tulajdonságában definiált elérési út) a szolgáltatáshookok alapértelmezett cwd.

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

Operációsrendszer-specifikus horgok

A horgok konfigurálhatók Windows vagy Posix rendszeren (Linux & MaxOS) is. Alapértelmezés szerint, ha a Windows- vagy Posix-konfigurációk nincsenek kizárva, a horog minden platformon végrehajtva lesz.

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

Eseményenként több horog

Eseményenként több horogot is konfigurálhat különböző hatókörökben, például a gyökérregisztrációs szinten vagy egy adott szolgáltatásban:

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

Horgok egymástól függetlenül való futtatása

A azd hooks run parancs lehetővé teszi, hogy a horgokat a normál eseményindító eseményektől függetlenül hajtsa végre. Ez hasznos a horgok teszteléséhez és hibakereséséhez anélkül, hogy végigmennél a teljes munkafolyamaton.

azd hooks run <hook-name>

Cserélje le <hook-name> a futtatni kívánt horog nevére (pl. preprovision, postdeploy).

Speciális beállítások

# 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

Interaktív mód konfigurálása

A horgok alapértelmezés szerint interaktív módban futnak. Az interaktív horog mód lehetővé teszi horogszkriptek közvetlen konzol-interakcióval történő futtatását, így egyszerűbben végezhet hibakeresést, monitorozást és a horgok valós idejű kezelését. A tulajdonságot explicit módon beállíthatja a interactive horogkonfigurációban, ha le szeretné tiltani az interaktív módot egy adott horog esetében:

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

Szolgáltatásspecifikus horgok esetén:

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

Környezeti változók használata horgokkal

A horgok a .env és azd env get-values parancsok használatával lekérhetik és beállíthatják a környezeti változókat a azd set <key> <value> fájlban. A horgok a környezeti változókat is lekérhetik a helyi környezetből a ${YOUR_ENVIRONMENT VARIABLE} szintaxis használatával. azd parancsok futtatásakor automatikusan beállít bizonyos környezeti változókat a .env fájlban, például AZURE_ENV_NAME és AZURE_LOCATION. A main.bicep fájl kimeneti paraméterei a .env fájlban is be vannak állítva. A környezeti változók kezelése lapon további információk találhatók a környezeti változók munkafolyamatairól.

A horgok a környezeti változókat beágyazottan vagy hivatkozott szkripteken keresztül is lekérhetik és beállíthatják, ahogy az a következő példában is látható:

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}

A hivatkozott: prepdocs.sh szkript:

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

Segítség kérése

Ha tudni szeretné, hogyan nyújthat be hibát, kérhet segítséget vagy javasolhat új funkciót az Azure Developer CLI-hez, látogasson el a hibaelhárítási és támogatási oldalra.