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říkazech a událostech životního cyklu služby. háky se řídí konvencí pojmenování pomocí předpon předpon a posílání u odpovídajícího azd názvu události příkazu nebo služby.

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

  • Pomocí háku prerestore můžete přizpůsobit správu závislostí.
  • Před nasazením aplikace pomocí háku predeploy ověřte, že jsou splněné externí závislosti nebo vlastní konfigurace.
  • Pomocí háku postupu na konci pracovního postupu nebo kanálu můžete provést vlastní 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ý běží 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.
  • 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 se dají zaregistrovat 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 (automaticky odvozeno ze spuštění, pokud není zadáno).
    • Poznámka: PowerShell 7 se vyžaduje pro pwsh.
  • run: Definujte vložený skript nebo cestu k souboru.
  • continueOnError: Pokud se sada bude i nadále spouštět i po chybě skriptu, ke které došlo během háku příkazu (výchozí nepravda).
  • interactive: Když nastavíte vazbu spuštěného skriptu na konzolu stdin, stdout & stderr (výchozí false).
  • windows: Určuje, že vnořené konfigurace budou platit pouze 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 se spouštěly pro konkrétní azd příkazy v kořenovém adresáři souboru azure.yaml .

Adresář projektu (kde azure.yaml se soubor nachází) 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 .yaml souboru.

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

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

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

Háky můžou získat a nastavit proměnné prostředí v .env souboru pomocí azd env get-values příkazů a azd set <key> <value> příkazů. Háky můžou také načítat proměnné prostředí z místního prostředí pomocí ${YOUR_ENVIRONMENT VARIABLE} syntaxe. azd automaticky nastaví určité proměnné prostředí v .env souboru při spuštění příkazů, například AZURE_ENV_NAME a AZURE_LOCATION. Výstupní parametry ze main.bicep souboru jsou také nastaveny .env v souboru. 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 pro řešení potíží a podporu .