Implementación de archivos en App Service

Nota:

A partir del 1 de junio de 2024, todas las aplicaciones de App Service recién creadas tendrán la opción de generar un nombre de host predeterminado único mediante la convención de nomenclatura <app-name>-<random-hash>.<region>.azurewebsites.net. Los nombres de aplicación existentes permanecerán sin cambios.

Ejemplo: myapp-ds27dh7271aah175.westus-01.azurewebsites.net

Para más información, consulte Nombre de host predeterminado único para el recurso App Service.

En este artículo, se muestra cómo implementar el código como un paquete ZIP, WAR, JAR o EAR en Azure App Service. También se muestra cómo implementar archivos individuales en App Service, de forma independiente del paquete de aplicación.

Requisitos previos

Para completar los pasos en este artículo, cree una aplicación de App Service o use alguna aplicación que haya creado para otro tutorial.

Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.

Creación de un paquete ZIP de proyecto

Importante

Al crear el paquete ZIP para la implementación, no incluya el directorio raíz, sino solo los archivos y directorios que contiene. Si descarga un repositorio de GitHub como un archivo ZIP, no puede implementar ese archivo tal cual en App Service. GitHub agrega directorios anidados adicionales en el nivel superior que no funcionan con App Service.

En la ventana de un terminal local, navegue hasta el directorio raíz del proyecto de la aplicación.

Este directorio debería contener el archivo de entrada para la aplicación web como, por ejemplo, index.html, index.php y app.js. También puede contener archivos de administración de paquetes como project.json, composer.json, package.json, bower.json y requirements.txt.

A menos que desee que App Service ejecute la automatización de implementación automáticamente, ejecute todas las tareas de compilación (por ejemplo, npm, bower, gulp, composer y pip) y asegúrese de que tiene todos los archivos que necesita para ejecutar la aplicación. Este paso es necesario si desea ejecutar su paquete directamente.

Cree un archivo ZIP con todo el contenido del proyecto. En el caso de los proyectos dotnet, todo está en el directorio de salida del comando dotnet publish (excepto el propio directorio de salida). Por ejemplo, el siguiente comando en el terminal para crear un paquete ZIP del contenido del directorio actual:

# Bash
zip -r <file-name>.zip .

# PowerShell
Compress-Archive -Path * -DestinationPath <file-name>.zip

Implementación de un paquete ZIP

Al implementar un paquete ZIP, App Service desempaqueta su contenido en la ruta de acceso predeterminada de la aplicación (D:\home\site\wwwroot para Windows y /home/site/wwwroot para Linux).

Esta implementación del paquete ZIP usa el mismo servicio de Kudu que permite realizar implementaciones basadas en la integración continua. Kudu admite la siguientes funcionalidades para implementar el paquete ZIP:

  • La eliminación de archivos restantes de una implementación anterior.
  • La opción de activar el proceso de compilación predeterminado, en el que se incluye la restauración del paquete.
  • La personalización de la implementación, incluyendo la ejecución de scripts de implementación.
  • Registros de implementación.
  • Un límite de tamaño de paquete de 2048 MB.

Nota:

Los archivos del paquete ZIP solo se copian si sus marcas de tiempo no coinciden con lo que ya está implementado.

Con la interfaz de usuario de implementación de zip en Kudu

En el explorador, vaya a https://<app_name>.scm.azurewebsites.net/ZipDeployUI (vea la nota en la parte superior).

Cargue el paquete ZIP que creó en Creación de un paquete ZIP de proyecto arrastrándolo al área del explorador de archivos en la página web.

Cuando la implementación está en curso, un icono en la esquina superior derecha muestra el progreso como un porcentaje. La página también muestra mensajes detallados para la operación debajo del área del explorador. Cuando se complete la implementación, el último mensaje debe indicar Deployment successful.

El punto de conexión anterior no funciona en este momento con App Services de Linux. Considere la posibilidad de usar en su lugar FTP o la API de implementación de ZIP.

Sin la interfaz de usuario de implementación de zip en Kudu

Implemente un paquete ZIP en la aplicación web mediante el comando az webapp deploy. El comando de la CLI usa la API de publicación de Kudu para implementar los archivos y se puede personalizar completamente.

En el ejemplo siguiente, se inserta un paquete ZIP en el sitio. Especifique la ruta de acceso al paquete ZIP local para --src-path.

az webapp deploy --resource-group <group-name> --name <app-name> --src-path <zip-package-path>

Este comando reinicia la aplicación después de implementar el paquete ZIP.

Habilitación de la automatización de compilación para la implementación mediante zip

De manera predeterminada, el motor de implementación da por supuesto que un paquete ZIP está listo para ejecutarse tal cual y no ejecuta ninguna automatización de la compilación. Para habilitar la misma automatización de la compilación que en una implementación de Git, establezca la configuración de la aplicación SCM_DO_BUILD_DURING_DEPLOYMENT ejecutando el siguiente comando en Cloud Shell:

az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings SCM_DO_BUILD_DURING_DEPLOYMENT=true

Para obtener más información, consulte la documentación de Kudu.

Implementación de paquetes WAR, JAR y EAR

Puede implementar su paquete WAR, JAR o EAR en App Service para ejecutar la aplicación web de Java mediante la CLI de Azure, PowerShell o la API de publicación de Kudu.

El proceso de implementación que se muestra aquí coloca el paquete en el recurso compartido de contenido de la aplicación con la convención de nomenclatura correcta y la estructura de directorios (consulte Referencia de la API de publicación de Kudu) y es el enfoque recomendado. Si implementa paquetes WAR/JAR/EAR mediante FTP o WebDeploy en su lugar, es posible que vea errores no reconocidos debido a errores en la nomenclatura o estructura.

Implemente un paquete WAR en Tomcat o JBoss EAP mediante el comando az webapp deploy. Especifique la ruta de acceso al paquete de Java local para --src-path.

az webapp deploy --resource-group <group-name> --name <app-name> --src-path ./<package-name>.war

El comando de la CLI usa la API de publicación de Kudu para implementar el paquete y se puede personalizar completamente.

Implementación de archivos individuales

Implemente un script de inicio, una biblioteca y un archivo estático en la aplicación web mediante el comando az webapp deploy con el parámetro --type.

Si implementa un script de inicio de esta manera, App Service utiliza automáticamente el script para iniciar la aplicación.

El comando de la CLI usa la API de publicación de Kudu para implementar los archivos y se puede personalizar completamente.

Implementación de un script de inicio

az webapp deploy --resource-group <group-name> --name <app-name> --src-path scripts/startup.sh --type=startup

Implementación de un archivo de biblioteca

az webapp deploy --resource-group <group-name> --name <app-name> --src-path driver.jar --type=lib

Implementación de un archivo estático

az webapp deploy --resource-group <group-name> --name <app-name> --src-path config.json --type=static

Implementación en aplicaciones protegidas en la red

En función de la configuración de red de la aplicación web, es posible que se bloquee el acceso directo a la aplicación desde el entorno de desarrollo (consulte Implementación en sitios protegidos en la red e Implementación en sitios protegidos en la red, parte 2). En lugar de insertar directamente el paquete o archivo en la aplicación web, puede publicarlo en un sistema de almacenamiento accesible desde la aplicación web y desencadenar la aplicación para extraer el archivo ZIP desde la ubicación de almacenamiento.

La dirección URL remota puede ser cualquier ubicación accesible públicamente, pero es mejor usar un contenedor de almacenamiento de blobs con una clave SAS para protegerlo.

Use el comando az webapp deploy como lo haría en las otras secciones, pero use --src-url en lugar de --src-path. En el ejemplo siguiente se usa el parámetro --src-url para especificar la dirección URL de un archivo ZIP hospedado en una cuenta de Azure Storage.

az webapp deploy --resource-group <group-name> --name <app-name> --src-url "https://storagesample.blob.core.windows.net/sample-container/myapp.zip?sv=2021-10-01&sb&sig=slk22f3UrS823n4kSh8Skjpa7Naj4CG3 --type zip

Referencia de la API de publicación de Kudu

La API publish de Kudu le permite especificar los mismos parámetros del comando de la CLI como parámetros de consulta URL. Para autenticarse con la API de REST de Kudu, es mejor usar la autenticación de token, pero también puede usar la autenticación básica con las credenciales de implementación de la aplicación.

En la tabla siguiente, se muestran los parámetros de consulta disponibles, sus valores permitidos y sus descripciones.

Clave Valores permitidos Descripción Obligatorio Tipo
type war|jar|ear|lib|startup|static|zip Tipo de artefacto que se va a implementar; establece la ruta de acceso de destino predeterminada e informa a la aplicación web de cómo se debe controlar la implementación.
- type=zip: implementar un paquete ZIP descomprimiendo el contenido en /home/site/wwwroot. El parámetro target-path es opcional.
- type=war: implementar un paquete WAR. De manera predeterminada, el paquete WAR se implementa en /home/site/wwwroot/app.war. La ruta de acceso de destino se puede especificar con target-path.
- type=jar: implementar un paquete JAR en /home/site/wwwroot/app.jar. El parámetro target-path no se tiene en cuenta.
- type=ear: implementar un paquete EAR en /home/site/wwwroot/app.ear. El parámetro target-path no se tiene en cuenta.
- type=lib: implementar un archivo de biblioteca JAR. De manera predeterminada, el archivo se implementa en /home/site/libs. La ruta de acceso de destino se puede especificar con target-path.
- type=static: implemente un archivo estático (por ejemplo, un script). De manera predeterminada, el archivo se implementa en /home/site/wwwroot.
- type=startup: implementar un script que App Service utiliza automáticamente como script de inicio para la aplicación. De manera predeterminada, el script se implementa en D:\home\site\scripts\<name-of-source> para Windows y en home/site/wwwroot/startup.sh para Linux. La ruta de acceso de destino se puede especificar con target-path.
String
restart true|false De manera predeterminada, la API reinicia la aplicación después de la operación de implementación (restart=true). Para implementar varios artefactos, evite reinicios en todos ellos menos en la implementación final; para ello, establezca restart=false. No Boolean
clean true|false Especifica si se debe limpiar (eliminar) la implementación de destino antes de implementar allí el artefacto. No Boolean
ignorestack true|false La API de publicación usa la variable de entorno WEBSITE_STACK para elegir valores predeterminados seguros en función de la pila del lenguaje del sitio. Si se establece este parámetro en false, se deshabilitan los valores predeterminados específicos del lenguaje. No Booleano
target-path Una ruta de acceso absoluta Ruta de acceso absoluta en la que se implementará el artefacto. Por ejemplo: "/home/site/deployments/tools/driver.jar", "/home/site/scripts/helper.sh". No String

Pasos siguientes

Para ver escenarios de implementación más avanzados, pruebe Implementación en Azure con Git. La implementación basada en Git en Azure permite el control de versiones, la restauración de paquetes, MSBuild y mucho más.

Más recursos