Přizpůsobení pracovních postupů Azure Developer CLI pomocí příkazů a hooků událostí

Háky jsou azd rozšiřující body, které automaticky spouštějí vlastní skripty před příkazy a po azd příkazech a událostech životního cyklu služby. Háky se řídí konvencí vytváření názvů pomocí předpon předpon a posílejte na odpovídající azd název události příkazu nebo služby.

Můžete například chtít spustit vlastní skript v následujících scénářích:

  • K přizpůsobení správy závislostí použijte prerestore hook.
  • Před nasazením aplikace použijte před nasazením háku pro ověření externích závislostí nebo vlastních konfigurací.
  • Pomocí postup připojit na konci pracovního postupu nebo kanálu k provedení vlastního vyčištění nebo protokolování.

Dostupné háky

K dispozici jsou následující azd háky příkazů:

  • prerestore a postrestore: Spusťte před a po obnovení závislostí balíčku.
  • preprovision a postprovision: Spusťte před a po vytvoření prostředků Azure.
  • prepackage a postpackage: Spusťte před a po zabalení aplikace.
  • predeploy a postdeploy: Spusťte před a po nasazení kódu aplikace do Azure.
  • prepublish a postpublish: Spusťte před a po publikování aplikace.
  • preup a postup: Spusťte před a po kombinovaném kanálu nasazení. Up je zkrácený příkaz, který spouští restore, provisiona deploy postupně.
  • predown a postdown: Spusťte před a po odebrání prostředků.

K dispozici jsou následující háky událostí životního cyklu služby:

  • prerestore a postrestore: Spusťte před a po obnovení balíčků a závislostí služby.
  • prebuild a postbuild: Spusťte před a po sestavení zdrojového kódu nebo kontejneru služby.
  • prepackage a postpackage: Spusťte před a po zabalení aplikace pro nasazení.
  • predeploy a postdeploy: Spusťte před a po nasazení kódu služby do Azure.
  • prepublish a postpublish: Spusťte před a po publikování služby.

Konfigurace háku

Háky se registrují v souboru v azure.yaml kořenovém adresáři nebo v rámci konkrétní konfigurace služby. Všechny typy háků podporují následující možnosti konfigurace:

  • shell: sh | pwsh (volitelné). Pokud tento parametr vynecháte, azd vybere výchozí nastavení na základě operačního systému: pwsh v Windows a sh v systémech Linux a macOS. azd vytiskne upozornění při použití výchozího nastavení a doporučí explicitně nastavení shell pro spolehlivost mezi platformami. PowerShell 7 se vyžaduje pro pwsh.
  • run: Definujte vložený skript nebo cestu k souboru. Pro cesty k azd souborům odvodí prostředí z přípony souboru (například.sh)..ps1
  • continueOnError: Pokud sada bude pokračovat v provádění i po chybě skriptu během volání příkazů (výchozí false).
  • interactive: Při nastavení vytvoří vazbu spuštěného skriptu na konzolu stdin, stdout & stderr (výchozí false).
  • windows: Určuje, že vnořené konfigurace se použijí jenom v operačním systému Windows. Pokud je tato možnost konfigurace vyloučená, spustí se hook na všech platformách.
  • posix: Určuje, že vnořené konfigurace budou platit pouze pro operační systémy založené na POSIX (Linux & MaxOS). Pokud je tato možnost konfigurace vyloučená, spustí se hook na všech platformách.

Note

Nastavení shell explicitně zůstává doporučeným přístupem pro projekty napříč platformami, protože výchozí nastavení závisí na operačním systému přispěvatele. Pokud vložený skript používá syntaxi, která je platná pouze v jednom prostředí, deklarujte shell , že se chcete vyhnout selháním modulu runtime.

Příklady háku

Následující příklady ukazují různé typy registrací a konfigurací háku.

Registrace kořenového příkazu

Háky je možné nakonfigurovat tak, aby běžely pro konkrétní příkazy azd v kořenovém adresáři souboru azure.yaml.

Adresář projektu (kde se nachází soubor azure.yaml) je výchozí aktuální pracovní adresář (cwd) pro volání příkazů.

name: todo-nodejs-mongo
metadata:
  template: todo-nodejs-mongo@0.0.1-beta
hooks:
  prerestore: # Example of an inline script with an explicit shell
    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

Registrace služby

Háky je také možné nakonfigurovat tak, aby běžely jenom pro konkrétní služby definované v souboru .yaml.

Adresář služby (stejná cesta jako definovaná ve vlastnosti project konfigurace služby v souboru azure.yaml) je výchozí cwd pro volání služeb.

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 with an explicit shell
        shell: sh
        run: echo 'Restoring API service...'
      prepackage: # Example of external script (Relative path from service path)
        run: ./hooks/prepackage.sh

Konkrétní háky operačního systému

Volitelně je možné háky nakonfigurovat tak, aby běžely buď ve Windows, nebo Posix (Linux & MaxOS). Ve výchozím nastavení platí, že pokud jsou konfigurace Windows nebo Posix vyloučeny, háky se spustí na všech platformách.

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

Vložené skripty pro různé platformy bez explicitního prostředí

Když vynecháte shell vložený háček, azd vybere výchozí prostředí založené na operačním systému: pwsh na Windows a sh v systému Linux a macOS. Tato možnost je užitečná pro jednoduché příkazy, které fungují v obou prostředích, jako je tisk stavové zprávy nebo vyvolání rozhraní příkazového řádku, které už je v cestě uživatele.

name: example-project
hooks:
  prerestore: # No shell specified; azd uses pwsh on Windows and sh on Linux/macOS
    run: echo 'Restoring dependencies...'

azd vytiskne upozornění, kdykoli se vrátí do výchozího prostředí. Pro vložené skripty, které se spoléhají na syntaxi specifickou pro prostředí, nastavte shell explicitně nebo použijte windows konfiguraci a posix poskytněte obě varianty.

Více háků na událost

Pro každou událost můžete nakonfigurovat více háků v různých oborech, jako je úroveň registrace kořenového adresáře nebo pro konkrétní službu:

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

Nezávislé spouštění háků

Příkaz azd hooks run umožňuje spouštět háky nezávisle na jejich normálních aktivačních událostech. To je užitečné pro testování a ladění háků bez procházení celého pracovního postupu.

azd hooks run <hook-name>

Nahraďte <hook-name> názvem háku, preprovisionkterý chcete spustit (např. , postdeploy).

Upřesnit možnosti

# 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

Konfigurace interaktivního režimu

Ve výchozím nastavení se háky spouštějí v interaktivním režimu. Interaktivní režim háku umožňuje spouštět skripty háku s přímou interakcí konzoly, což usnadňuje ladění, monitorování a interakci s háky v reálném čase. Vlastnost v konfiguraci háku můžete explicitně nastavit interactive , pokud chcete zakázat interaktivní režim pro konkrétní háček:

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

Pro háky specifické pro službu:

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

Použití proměnných prostředí s háky

Háky můžou získat a nastavit proměnné prostředí v souboru .env pomocí příkazů azd env get-values a azd set <key> <value>. Háky můžou také načítat proměnné prostředí z místního prostředí pomocí syntaxe ${YOUR_ENVIRONMENT VARIABLE}. azd automaticky nastaví určité proměnné prostředí v souboru .env při spuštění příkazů, například AZURE_ENV_NAME a AZURE_LOCATION. Výstupní parametry ze souboru main.bicep jsou také nastaveny v souboru .env. Stránka spravovat proměnné prostředí obsahuje další informace o pracovních postupech proměnných prostředí.

Háky můžou získat a nastavit proměnné prostředí vložené nebo prostřednictvím odkazovaných skriptů, jak je znázorněno v následujícím příkladu:

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}

Odkazovaný skript: 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

Požádat o pomoc

Informace o tom, jak vytvořit chybu, požádat o pomoc nebo navrhnout novou funkci pro Azure Developer CLI, najdete na stránce řešení potíží a podpory.