Sdílet prostřednictvím


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

Azure Developer CLI podporuje různé body rozšíření pro přizpůsobení pracovních postupů a nasazení. Middleware hooks umožňuje spouštět vlastní skripty před a po azd příkazy a události životního cyklu služby. háky se řídí konvencí vytváření názvů pomocí před a post předpony odpovídající azd příkazu nebo názvu události 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.
  • predeploy a postdeploy: Spusťte před a po nasazení kódu aplikace do Azure.
  • 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.

Konfigurace háku

Háky je možné zaregistrovat v souboru azure.yaml v 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
    • Poznámka: PowerShell 7 se vyžaduje pro pwsh.
  • run: Definujte vložený skript nebo cestu k souboru.
  • 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.

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. (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

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. (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

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

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

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.