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
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. -
prebuild
ypostbuild
: ejecute antes y después de compilar el código fuente del servicio o el contenedor. -
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 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
.
-
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 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 consolastdin
,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.