Partager via


Personnaliser vos flux de travail Azure Developer CLI à l’aide de hooks de commande et d’événements

Azure Developer CLI prend en charge différents points d’extension pour personnaliser vos flux de travail et vos déploiements. L’intergiciel hooks vous permet d’exécuter des scripts personnalisés avant et après azd commandes et événements de cycle de vie du service. les hooks suivent une convention d’affectation de noms en utilisant pré et post- préfixes sur le nom d’événement de azd ou de commande de service correspondant.

Par exemple, vous pouvez exécuter un script personnalisé dans les scénarios suivants :

  • Utilisez le de prérestore hook pour personnaliser la gestion des dépendances.
  • Utilisez le hook de prédéploiement pour vérifier que les dépendances externes ou les configurations personnalisées sont en place avant de déployer votre application.
  • Utilisez le hook à la fin d’un flux de travail ou d’un pipeline pour effectuer un nettoyage ou une journalisation personnalisés.

Crochets disponibles

Les azd hooks de commande suivants sont disponibles :

  • prerestore et postrestore: exécuter avant et après la restauration des dépendances de package.
  • preprovision et postprovision: exécuter avant et après la création des ressources Azure.
  • predeploy et postdeploy: exécuter avant et après le déploiement du code de l’application sur Azure.
  • preup et postup: exécuter avant et après le pipeline de déploiement combiné. Up est une commande abrégée qui s’exécute restore, provisionet deploy séquentiellement.
  • predown et postdown: exécuter avant et après la suppression des ressources.

Les hooks d’événements de cycle de vie de service suivants sont disponibles :

  • prerestore et postrestore: exécuter avant et après la restauration des packages de service et des dépendances.
  • prebuild et postbuild: exécuter avant et après la génération du code source ou du conteneur du service.
  • prepackage et postpackage: exécuter avant et après le déploiement de l’application.
  • predeploy et postdeploy: exécuter avant et après le déploiement du code de service sur Azure.

Configuration de hook

Les hooks peuvent être inscrits dans votre fichier azure.yaml à la racine ou dans une configuration de service spécifique. Tous les types de hooks prennent en charge les options de configuration suivantes :

  • shell: sh | pwsh
    • remarque: PowerShell 7 est requis pour pwsh.
  • run: définir un script inline ou un chemin d’accès à un fichier.
  • continueOnError: lorsque l’ensemble continue à s’exécuter même après qu’une erreur de script s’est produite lors d’un hook de commande (valeur false par défaut).
  • interactive: quand la définition lie le script en cours d’exécution à la console stdin, stdout & stderr (valeur false par défaut).
  • windows: spécifie que les configurations imbriquées s’appliquent uniquement au système d’exploitation Windows. Si cette option de configuration est exclue, le hook s’exécute sur toutes les plateformes.
  • posix: spécifie que les configurations imbriquées s’appliquent uniquement aux systèmes d’exploitation basés sur POSIX (Linux & MaxOS). Si cette option de configuration est exclue, le hook s’exécute sur toutes les plateformes.

Exemples de crochets

Les exemples suivants illustrent différents types d’inscriptions et de configurations de hook.

Inscription de commande racine

Les hooks peuvent être configurés pour s’exécuter pour des commandes azd spécifiques à la racine de votre fichier azure.yaml.

Le répertoire du projet (où se trouve le fichier azure.yaml) est le répertoire de travail actif par défaut (cwd) pour les hooks de commande.

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

Inscription de service

Les hooks peuvent également être configurés pour s’exécuter uniquement pour des services spécifiques définis dans votre fichier .yaml.

Le répertoire de service (même chemin que défini dans la propriété project de la configuration du service dans le fichier azure.yaml) est la cwd par défaut pour les hooks de service.

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

Raccordements spécifiques au système d’exploitation

Si vous le souhaitez, les hooks peuvent également être configurés pour s’exécuter sur Windows ou Posix (Linux & MaxOS). Par défaut, si les configurations Windows ou Posix sont exclues, le hook s’exécute sur toutes les plateformes.

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

Crochets multiples par événement

Vous pouvez configurer plusieurs hooks par événement dans différentes étendues, telles que le niveau d’inscription racine ou pour un service spécifique :

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

Utiliser des variables d’environnement avec des hooks

Les hooks peuvent obtenir et définir des variables d’environnement dans le fichier .env à l’aide des commandes azd env get-values et azd set <key> <value>. Les hooks peuvent également récupérer des variables d’environnement à partir de votre environnement local à l’aide de la syntaxe ${YOUR_ENVIRONMENT VARIABLE}. azd définit automatiquement certaines variables d’environnement dans le fichier .env lorsque des commandes sont exécutées, telles que AZURE_ENV_NAME et AZURE_LOCATION. Les paramètres de sortie du fichier main.bicep sont également définis dans le fichier .env. La page gérer les variables d’environnement contient plus d’informations sur les flux de travail des variables d’environnement.

Les hooks peuvent obtenir et définir des variables d’environnement inline ou via des scripts référencés, comme illustré dans l’exemple suivant :

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}

Le script référencé : 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

Demander de l’aide

Pour plus d’informations sur la façon de déposer un bogue, de demander de l’aide ou de proposer une nouvelle fonctionnalité pour Azure Developer CLI, consultez la page résolution des problèmes et de support.