Delen via


Uw Azure Developer CLI-werkstromen aanpassen met behulp van opdracht- en gebeurtenishook

De Azure Developer CLI ondersteunt verschillende uitbreidingspunten om uw werkstromen en implementaties aan te passen. Met de hooks middleware kunt u aangepaste scripts uitvoeren voor en na opdrachten en gebeurtenissen voor azd de levenscyclus van de service. hooks volgen een naamconventie met behulp van voor- en post-voorvoegsels op de overeenkomende azd opdracht- of servicegebeurtenisnaam.

U kunt bijvoorbeeld een aangepast script uitvoeren in de volgende scenario's:

  • Gebruik de hook prerestore om afhankelijkheidsbeheer aan te passen.
  • Gebruik de predeployhook om te controleren of externe afhankelijkheden of aangepaste configuraties aanwezig zijn voordat u uw app implementeert.
  • Gebruik de postup hook aan het einde van een werkstroom of pijplijn om aangepaste opschoning of logboekregistratie uit te voeren.

Beschikbare haken

De volgende azd opdrachthook is beschikbaar:

  • prerestore en postrestore: Uitvoeren voor en na pakketafhankelijkheden worden hersteld.
  • preprovision en postprovision: Uitvoeren voor en nadat Azure-resources zijn gemaakt.
  • predeploy en postdeploy: Voer vóór en nadat de toepassingscode is geïmplementeerd in Azure uit.
  • preup en postup: Voer vóór en na de gecombineerde implementatiepijplijn uit. Up is een verkorte opdracht die wordt uitgevoerd restore, provisionen deploy sequentieel.
  • predown en postdown: Uitvoeren voor en nadat de resources zijn verwijderd.

De volgende gebeurtenishook voor de levenscyclus van de service zijn beschikbaar:

  • prerestore en postrestore: Voor en na de servicepakketten en afhankelijkheden worden hersteld.
  • prepackage en postpackage: Voor en nadat de app is verpakt voor implementatie.
  • predeploy en postdeploy: Voer vóór en nadat de servicecode is geïmplementeerd in Azure uit.

Hook-configuratie

Hooks kunnen worden geregistreerd in uw azure.yaml bestand in de hoofdmap of in een specifieke serviceconfiguratie. Alle typen hooks ondersteunen de volgende configuratieopties:

  • shell: sh | pwsh (automatisch afgeleid van uitvoering indien niet opgegeven).
    • Opmerking: PowerShell 7 is vereist voor pwsh.
  • run: Definieer een inlinescript of een pad naar een bestand.
  • continueOnError: Wanneer de set wordt uitgevoerd, zelfs nadat er een scriptfout is opgetreden tijdens een opdrachthook (standaard onwaar).
  • interactive: Wanneer de set het actieve script verbindt met de console stdin, stdout en stderr (standaard onwaar).
  • windows: Hiermee geeft u op dat de geneste configuraties alleen van toepassing zijn op het Windows-besturingssysteem. Als deze configuratieoptie is uitgesloten, wordt de hook uitgevoerd op alle platforms.
  • posix: Hiermee geeft u op dat de geneste configuraties alleen van toepassing zijn op OP POSIX gebaseerde besturingssystemen (Linux & MaxOS). Als deze configuratieoptie is uitgesloten, wordt de hook uitgevoerd op alle platforms.

Hook-voorbeelden

In de volgende voorbeelden ziet u verschillende soorten hookregistraties en configuraties.

Registratie van hoofdopdracht

Hooks kunnen worden geconfigureerd om te worden uitgevoerd voor specifieke azd opdrachten in de hoofdmap van uw azure.yaml bestand.

De projectmap (waar het azure.yaml bestand zich bevindt) is de standaard huidige werkmap (cwd) voor opdrachthook.

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

Serviceregistratie

Hooks kunnen ook worden geconfigureerd om alleen te worden uitgevoerd voor specifieke services die in uw .yaml bestand zijn gedefinieerd.

De servicemap (hetzelfde pad als gedefinieerd in de eigenschap van de project serviceconfiguratie in het azure.yaml bestand) is de standaardwaarde cwd voor servicehook.

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

Specifieke haken voor het besturingssysteem

Optioneel kunnen hooks ook worden geconfigureerd voor uitvoering in Windows of Posix (Linux & MaxOS). Als de Windows- of Posix-configuraties standaard worden uitgesloten, wordt de hook op alle platforms uitgevoerd.

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

Omgevingsvariabelen gebruiken met hooks

Hooks kunnen omgevingsvariabelen in het .env bestand ophalen en instellen met behulp van de azd env get-values en azd set <key> <value> opdrachten. Hooks kunnen ook omgevingsvariabelen ophalen uit uw lokale omgeving met behulp van de ${YOUR_ENVIRONMENT VARIABLE} syntaxis. azd stelt automatisch bepaalde omgevingsvariabelen in het .env bestand in wanneer opdrachten worden uitgevoerd, zoals AZURE_ENV_NAME en AZURE_LOCATION. Uitvoerparameters van het main.bicep bestand worden ook in het .env bestand ingesteld. De pagina Omgevingsvariabelen beheren bevat meer informatie over werkstromen voor omgevingsvariabelen .

Hooks kunnen omgevingsvariabelen inline of via scripts waarnaar wordt verwezen, ophalen en instellen, zoals wordt weergegeven in het volgende voorbeeld:

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}

Het script waarnaar wordt verwezen: 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

Hulp vragen

Ga naar de pagina voor probleemoplossing en ondersteuning voor informatie over het indienen van een bug, hulp vragen of een nieuwe functie voorstellen voor de Azure Developer CLI.