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 azd opdrachten en gebeurtenissen voor 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 prerestore hook om afhankelijkheidsbeheer aan te passen.
  • Gebruik de vooraf geïmplementeerde hook om te controleren of externe afhankelijkheden of aangepaste configuraties aanwezig zijn voordat u uw app implementeert.
  • Gebruik de postup 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: voor en na de gecombineerde implementatiepijplijn uitvoeren. Up is een verkorte opdracht waarmee restore, provisionen deploy opeenvolgend worden uitgevoerd.
  • predown en postdown: 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.
  • prebuild en postbuild: Voer vóór en na de broncode of container van de service uit.
  • prepackage en postpackage: Uitvoeren 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
    • 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: als dit is ingesteld, wordt het actieve script gekoppeld aan de console stdin, stdout & 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 bestand azure.yaml 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 zijn gedefinieerd in uw .yaml-bestand.

De servicemap (hetzelfde pad dat is gedefinieerd in de eigenschap project van de serviceconfiguratie in het azure.yaml-bestand) is de standaard-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

Meerdere hooks per gebeurtenis

U kunt meerdere hooks per gebeurtenis configureren voor verschillende bereiken, zoals het basisregistratieniveau of voor een specifieke service:

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

Omgevingsvariabelen gebruiken met hooks

Hooks kunnen omgevingsvariabelen ophalen en instellen in het .env-bestand met behulp van de opdrachten azd env get-values en azd set <key> <value>. 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 uit het main.bicep-bestand worden ook ingesteld in het .env-bestand. 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.