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
enpostrestore
: Uitvoeren voor en na pakketafhankelijkheden worden hersteld. -
preprovision
enpostprovision
: Uitvoeren voor en nadat Azure-resources zijn gemaakt. -
predeploy
enpostdeploy
: Voer vóór en nadat de toepassingscode is geïmplementeerd in Azure uit. -
preup
enpostup
: voor en na de gecombineerde implementatiepijplijn uitvoeren.Up
is een verkorte opdracht waarmeerestore
,provision
endeploy
opeenvolgend worden uitgevoerd. -
predown
enpostdown
: voor en nadat de resources zijn verwijderd.
De volgende gebeurtenishook voor de levenscyclus van de service zijn beschikbaar:
-
prerestore
enpostrestore
: voor en na de servicepakketten en afhankelijkheden worden hersteld. -
prebuild
enpostbuild
: Voer vóór en na de broncode of container van de service uit. -
prepackage
enpostpackage
: Uitvoeren voor en nadat de app is verpakt voor implementatie. -
predeploy
enpostdeploy
: 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
.
-
Opmerking: PowerShell 7 is vereist voor
-
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 consolestdin
,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.