Compartir a través de


Personalización de los flujos de trabajo de la CLI para desarrolladores de Azure mediante enlaces de comandos y eventos

Los enlaces son azd puntos de extensión que ejecutan automáticamente scripts personalizados antes y después azd de los comandos y los eventos del ciclo de vida del servicio. Los enlaces siguen una convención de nomenclatura mediante prefijos previos y posteriores en el comando coincidente azd o el nombre del evento de servicio.

Por ejemplo, puede que desee ejecutar un script personalizado en los escenarios siguientes:

  • Use el enlace de de prerestore para personalizar la administración de dependencias.
  • Use el enlace implementación previa para comprobar que las dependencias externas o las configuraciones personalizadas están implementadas antes de implementar la aplicación.
  • Use el postup enlace al final de un flujo de trabajo o canalización para realizar una limpieza o registro personalizados.

Enlaces disponibles

Están disponibles los siguientes enlaces de comandos azd:

  • prerestore y postrestore: ejecute antes y después de restaurar las dependencias del paquete.
  • preprovision y postprovision: ejecute antes y después de crear los recursos de Azure.
  • prepackage y postpackage: ejecute antes y después de empaquetar la aplicación.
  • predeploy y postdeploy: ejecute antes y después de implementar el código de la aplicación en Azure.
  • prepublish y postpublish: ejecute antes y después de publicar la aplicación.
  • preup y postup: ejecute antes y después de la canalización de implementación combinada. Up es un comando abreviado que ejecuta restore, provisiony deploy secuencialmente.
  • predown y postdown: ejecute antes y después de quitar los recursos.

Están disponibles los siguientes enlaces de eventos del ciclo de vida del servicio:

  • prerestore y postrestore: ejecute antes y después de restaurar los paquetes de servicio y las dependencias.
  • prebuild y postbuild: ejecute antes y después de compilar el código fuente del servicio o el contenedor.
  • prepackage y postpackage: ejecute antes y después de empaquetar la aplicación para la implementación.
  • predeploy y postdeploy: ejecute antes y después de implementar el código de servicio en Azure.
  • prepublish y postpublish: ejecute antes y después de publicar el servicio.

Configuración del enlace

Los enlaces se registran en el archivo en azure.yaml la raíz o dentro de una configuración de servicio específica. Todos los tipos de enlaces admiten las siguientes opciones de configuración:

  • shell: sh | pwsh
    • Nota: PowerShell 7 es necesario para pwsh.
  • run: defina un script insertado o una ruta de acceso a un archivo.
  • continueOnError: cuando set continúe ejecutándose incluso después de que se haya producido un error de script durante un enlace de comandos (valor predeterminado false).
  • interactive: cuando se establece enlazará el script en ejecución a la consola stdin, stdout & stderr (valor predeterminado false).
  • windows: especifica que las configuraciones anidadas solo se aplicarán en el sistema operativo Windows. Si se excluye esta opción de configuración, el enlace se ejecuta en todas las plataformas.
  • posix: especifica que las configuraciones anidadas solo se aplicarán a los sistemas operativos basados en POSIX (Linux & MaxOS). Si se excluye esta opción de configuración, el enlace se ejecuta en todas las plataformas.

Ejemplos de enlace

En los ejemplos siguientes se muestran diferentes tipos de registros y configuraciones de enlace.

Registro de comandos raíz

Los enlaces se pueden configurar para ejecutarse para comandos de azd específicos en la raíz del archivo azure.yaml.

El directorio del proyecto (donde se encuentra el archivo azure.yaml) es el directorio de trabajo actual predeterminado (cwd) para los enlaces de comandos.

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

Registro del servicio

Los enlaces también se pueden configurar para que solo se ejecuten para servicios específicos definidos en el archivo .yaml.

El directorio de servicio (misma ruta de acceso que se define en la propiedad project de la configuración del servicio en el archivo azure.yaml) es el cwd predeterminado para los enlaces de servicio.

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

Enlaces específicos del sistema operativo

Opcionalmente, los enlaces también se pueden configurar para que se ejecuten en Windows o Posix (Linux & MaxOS). De forma predeterminada, si las configuraciones de Windows o Posix se excluyen, el enlace se ejecuta en todas las plataformas.

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

Varios enlaces por evento

Puede configurar varios enlaces por evento en distintos ámbitos, como el nivel de registro raíz o para un servicio específico:

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

Ejecutar enlaces de forma independiente

El azd hooks run comando permite ejecutar enlaces independientemente de sus eventos de desencadenador normales. Esto es útil para probar y depurar enlaces sin pasar por todo el flujo de trabajo.

azd hooks run <hook-name>

Reemplace <hook-name> por el nombre del enlace que desea ejecutar (por ejemplo, preprovision, postdeploy).

Opciones avanzadas

# Run a specific service hook
azd hooks run postdeploy --service api

# Force hooks to run for a specific platform
azd hooks run preprovision --platform windows

# Run hooks in a specific environment
azd hooks run postup -e staging

# Run hooks with all options combined
azd hooks run predeploy --service frontend --platform posix -e production --interactive

Configuración del modo interactivo

Los enlaces se ejecutan en modo interactivo de forma predeterminada. El modo de enlaces interactivos permite ejecutar scripts de enlace con la interacción directa de la consola, lo que facilita la depuración, la supervisión e interacción con los enlaces en tiempo real. Puede establecer explícitamente la propiedad en la interactive configuración del enlace si desea deshabilitar el modo interactivo para un enlace específico:

hooks:
  postprovision:
    shell: sh
    run: ./scripts/setup-database.sh
    interactive: false # Default is true

Para enlaces específicos del servicio:

services:
  api:
    project: ./src/api
    language: js
    host: appservice
    hooks:
      postdeploy:
        shell: sh
        run: ./scripts/post-deploy-verification.sh
        interactive: false  # Override the default interactive mode

Uso de variables de entorno con enlaces

Los enlaces pueden obtener y establecer variables de entorno en el archivo .env mediante los comandos azd env get-values y azd set <key> <value>. Los enlaces también pueden recuperar variables de entorno del entorno local mediante la sintaxis ${YOUR_ENVIRONMENT VARIABLE}. azd establece automáticamente determinadas variables de entorno en el archivo .env cuando se ejecutan comandos, como AZURE_ENV_NAME y AZURE_LOCATION. Los parámetros de salida del archivo main.bicep también se establecen en el archivo .env. La página administrar variables de entorno incluye más información sobre los flujos de trabajo de variables de entorno.

Los enlaces pueden obtener y establecer variables de entorno insertadas o a través de scripts a los que se hace referencia, como se muestra en el ejemplo siguiente:

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}

El script al que se hace referencia: 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

Solicitar ayuda

Para obtener información sobre cómo archivar un error, solicitar ayuda o proponer una nueva característica para la CLI para desarrolladores de Azure, visite la página solución de problemas y soporte técnico.