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

La CLI para desarrolladores de Azure admite varios puntos de extensión para personalizar los flujos de trabajo y las implementaciones. El middleware de enlaces permite ejecutar 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 prerestore para personalizar la administración de dependencias.
  • Use el enlace de implementación previa para comprobar que las dependencias externas o las configuraciones personalizadas están implementadas antes de implementar la aplicación.
  • Use el enlace posterior al final de un flujo de trabajo o canalización para realizar una limpieza o registro personalizados.

Enlaces disponibles

Los siguientes azd enlaces de comandos están disponibles:

  • 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.
  • predeploy y postdeploy: ejecute antes y después de implementar el código de la aplicación en Azure.
  • 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.
  • 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.

Configuración del enlace

Los enlaces se pueden registrar 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 (se deduce automáticamente de la ejecución si no se especifica).
    • 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 produjo 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 y 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 y 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 específicos azd en la raíz del azure.yaml archivo.

El directorio del proyecto (donde se encuentra el azure.yaml archivo) 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 de servicios

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

El directorio de servicio (la misma ruta de acceso definida en la propiedad de la project configuración del servicio en el azure.yaml archivo) es el valor predeterminado cwd 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 ejecutarse en Windows o Posix (Linux y 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

Uso de variables de entorno con enlaces

Los enlaces pueden obtener y establecer variables de entorno en el .env archivo mediante los azd env get-values comandos y azd set <key> <value> . Los enlaces también pueden recuperar variables de entorno del entorno local mediante la ${YOUR_ENVIRONMENT VARIABLE} sintaxis . azd establece automáticamente determinadas variables de entorno en el .env archivo cuando se ejecutan comandos, como AZURE_ENV_NAME y AZURE_LOCATION. Los parámetros de salida del main.bicep archivo también se establecen en el .env archivo. 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 de solución de problemas y soporte técnico .