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
ypostrestore
: ejecute antes y después de restaurar las dependencias del paquete.preprovision
ypostprovision
: ejecute antes y después de crear los recursos de Azure.predeploy
ypostdeploy
: ejecute antes y después de implementar el código de la aplicación en Azure.preup
ypostup
: ejecute antes y después de la canalización de implementación combinada.Up
es un comando abreviado que ejecutarestore
,provision
ydeploy
secuencialmente.predown
ypostdown
: ejecute antes y después de quitar los recursos.
Están disponibles los siguientes enlaces de eventos del ciclo de vida del servicio:
prerestore
ypostrestore
: ejecute antes y después de restaurar los paquetes de servicio y las dependencias.prepackage
ypostpackage
: ejecute antes y después de empaquetar la aplicación para la implementación.predeploy
ypostdeploy
: 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
.
- Nota: PowerShell 7 es necesario para
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 consolastdin
,stdout
ystderr
(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 .