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 de azd comandos y eventos de ciclo de vida del servicio. Los enlaces siguen una convención de nomenclatura mediante previo y después de prefijos en el nombre de evento de servicio o comando de azd coincidente.

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.
  • 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.
  • 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.

Configuración del enlace

Los enlaces se pueden registrar en el archivo azure.yaml en 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

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.