Compartir vía


AzureFunctionApp@2: tarea Implementar v2 de Azure Functions

Actualice una aplicación de funciones con .NET, Python, JavaScript, PowerShell, aplicaciones web basadas en Java.

Sintaxis

# Azure Functions Deploy v2
# Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications.
- task: AzureFunctionApp@2
  inputs:
    connectedServiceNameARM: # string. Alias: azureSubscription. Required. Azure Resource Manager connection. 
    appType: # 'functionApp' | 'functionAppLinux'. Required. App type. 
    #isFlexConsumption: false # boolean. Is Function App on Flex Consumption Plan. Default: false.
    appName: # string. Required. Azure Functions App name. 
    #deployToSlotOrASE: false # boolean. Optional. Use when appType != "" && isFlexConsumption = false. Deploy to Slot or App Service Environment. Default: false.
    #resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group. 
    #slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
    package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
    #runtimeStack: # 'DOTNET|6.0' | 'DOTNET-ISOLATED|6.0' | 'DOTNET-ISOLATED|7.0' | 'DOTNET-ISOLATED|8.0' | 'JAVA|8' | 'JAVA|11' | 'JAVA|17' | 'JAVA|21' | 'NODE|14' | 'NODE|16' | 'NODE|18' | 'NODE|20' | 'PYTHON|3.8' | 'PYTHON|3.9' | 'PYTHON|3.10' | 'PYTHON|3.11'. Optional. Use when appType = functionAppLinux && isFlexConsumption = false. Runtime stack. 
  # Application and Configuration Settings
    #appSettings: # string. App settings. 
  # Additional Deployment Options
    #deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != "" && isFlexConsumption = false && appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Deployment method. Default: auto.
# Azure Functions Deploy v2
# Update a function app with .NET, Python, JavaScript, PowerShell, Java based web applications.
- task: AzureFunctionApp@2
  inputs:
    connectedServiceNameARM: # string. Alias: azureSubscription. Required. Azure Resource Manager connection. 
    appType: # 'functionApp' | 'functionAppLinux'. Required. App type. 
    appName: # string. Required. Azure Functions App name. 
    #deployToSlotOrASE: false # boolean. Optional. Use when appType != "". Deploy to Slot or App Service Environment. Default: false.
    #resourceGroupName: # string. Required when deployToSlotOrASE = true. Resource group. 
    #slotName: 'production' # string. Required when deployToSlotOrASE = true. Slot. Default: production.
    package: '$(System.DefaultWorkingDirectory)/**/*.zip' # string. Required. Package or folder. Default: $(System.DefaultWorkingDirectory)/**/*.zip.
    #runtimeStack: # 'DOTNET|2.2' | 'DOTNET|3.1' | 'DOTNET|6.0' | 'DOTNET-ISOLATED|7.0' | 'JAVA|8' | 'JAVA|11' | 'NODE|8' | 'NODE|10' | 'NODE|12' | 'NODE|14' | 'NODE|16' | 'NODE|18' | 'PYTHON|3.6' | 'PYTHON|3.7' | 'PYTHON|3.8' | 'PYTHON|3.9' | 'PYTHON|3.10'. Optional. Use when appType = functionAppLinux. Runtime stack. 
  # Application and Configuration Settings
    #appSettings: # string. App settings. 
  # Additional Deployment Options
    #deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required when appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Deployment method. Default: auto.

Entradas

connectedServiceNameARM - de conexión de Azure Resource Manager
Alias de entrada: azureSubscription. string. Obligatorio.

Seleccione la suscripción de Azure Resource Manager para la implementación.


appType - tipo de aplicación
string. Obligatorio. Valores permitidos: functionApp (Function App en Windows), functionAppLinux (Function App en Linux).

Seleccione el tipo de aplicación de funciones de Azure para la implementación.


isFlexConsumption - es function App on Flex Consumption Plan
boolean. Valor predeterminado: false.

Establézcalo en true si la aplicación de funciones está en un plan de consumo flexible .


appName - nombre de aplicación de Azure Functions
string. Obligatorio.

Especifique el nombre de una aplicación de Azure Functions existente. Las aplicaciones de funciones enumeradas se basarán en el tipo de aplicación seleccionado.


deployToSlotOrASE - implementación en ranuras o app Service Environment
boolean. Opcional. Use cuando appType != "" && isFlexConsumption = false. Valor predeterminado: false.

Implementa en una ranura de implementación existente o en Azure App Service Environment. Para ambos destinos, la tarea necesita un nombre de grupo de recursos.

Si el destino de implementación es una ranura, el valor predeterminado será el ranura de producción. También se puede proporcionar cualquier otro nombre de ranura existente.

Si el destino de implementación es un entorno de Azure App Service, deje el nombre de ranura como de producción y especifique el nombre del grupo de recursos.


deployToSlotOrASE - implementación en ranuras o app Service Environment
boolean. Opcional. Use cuando appType != "". Valor predeterminado: false.

Implementa en una ranura de implementación existente o en Azure App Service Environment. Para ambos destinos, la tarea necesita un nombre de grupo de recursos.

Si el destino de implementación es una ranura, el valor predeterminado será el ranura de producción. También se puede proporcionar cualquier otro nombre de ranura existente.

Si el destino de implementación es un entorno de Azure App Service, deje el nombre de ranura como de producción y especifique el nombre del grupo de recursos.


del grupo de recursos de
string. Obligatorio cuando deployToSlotOrASE = true.

El nombre del grupo de recursos es necesario cuando el destino de implementación es una ranura de implementación o una instancia de App Service Environment.

Escribe o selecciona el grupo de recursos de Azure que contiene el Servicio de aplicaciones de Azure especificado anteriormente.


de ranura de
string. Obligatorio cuando deployToSlotOrASE = true. Valor predeterminado: production.

Especifica o selecciona una ranura existente, excepto la ranura producción.


de ranura de
string. Obligatorio cuando deployToSlotOrASE = true. Valor predeterminado: production.

Escriba o seleccione una ranura existente que no sea la ranura de producción.


package - paquete o carpeta
string. Obligatorio. Valor predeterminado: $(System.DefaultWorkingDirectory)/**/*.zip.

Ruta de acceso del archivo al paquete o carpeta que contiene el contenido de App Service generado por MSBuild o un archivo ZIP comprimido. Se admiten variables ( Build | Release) y caracteres comodín. Por ejemplo, $(System.DefaultWorkingDirectory)/**/*.zip.


de pila en tiempo de ejecución de
string. Opcional. Use cuando appType = functionAppLinux && isFlexConsumption = false. Valores permitidos: DOTNET|6.0, DOTNET-ISOLATED|6.0, DOTNET-ISOLATED|7.0, DOTNET-ISOLATED|8.0, JAVA|8, JAVA|11, JAVA|17, JAVA|21, NODE|14, NODE|16, NODE|18, NODE|20, PYTHON|3.8, PYTHON|3.9, PYTHON|3.10, PYTHON|3.11.

Especifique el marco y la versión en la que se ejecutará la aplicación de funciones. Puede usar cualquiera de las versiones de tiempo de ejecución admitidas . Los valores antiguos como DOCKER|microsoft/azure-functions-* están en desuso. Los nuevos valores se muestran en la lista desplegable del asistente de tareas de . Si hay una versión más reciente de un marco disponible en la versiones en tiempo de ejecución compatibles puede especificarla incluso si no está en la lista.

Nota

Actualmente, este valor no actualiza el linuxFxVersion en el que se ejecuta el sitio. Esto significa que no se puede actualizar la pila del nodo 18 al nodo 20. Actualmente, la tarea solo actualiza la configuración de la aplicación.


de pila en tiempo de ejecución de
string. Opcional. Use cuando appType = functionAppLinux. Valores permitidos: DOTNET|2.2 (DOTNET|2.2 (functionapp v2)), DOTNET|3.1 (DOTNET|3.1 (functionapp v3)), DOTNET|6.0 (DOTNET|6.0 (functionapp v4)), DOTNET-ISOLATED|7.0 (DOTNET-ISOLATED|7.0 (functionapp v4)), JAVA|8 (JAVA|8 (functionapp v2/v)3/v4)), JAVA|11 (JAVA|11 (functionapp v3/v4)), NODE|8 (NODE|8 (functionapp v2)), NODE|10 (NODE|10 (functionapp v2/v3)), NODE|12 (NODE|12 (functionapp v3)), NODE|14 (NODE|14 (functionapp v3/v4)), NODE|16 (NODE|16 (functionapp v4)), NODE|18 (NODE|18 (functionapp v4)), PYTHON|3.6 (PYTHON|3.6 (functionapp v2/v3)), PYTHON|3.7 (PYTHON|3.7 (functionapp v2/v)3/v4)), PYTHON|3.8 (PYTHON|3.8 (functionapp v3/v4)), PYTHON|3.9 (PYTHON|3.9 (functionapp v3/v4)), PYTHON|3.10 (PYTHON|3.10 (functionapp v3/v4)).

Especifique el marco y la versión en la que se ejecutará la aplicación de funciones. Puede usar cualquiera de las versiones de tiempo de ejecución admitidas . Los valores antiguos como DOCKER|microsoft/azure-functions-* están en desuso. Los nuevos valores se muestran en la lista desplegable del asistente de tareas de . Si hay una versión más reciente de un marco disponible en la versiones en tiempo de ejecución compatibles puede especificarla incluso si no está en la lista.


de configuración de la aplicación de
string.

Escriba la configuración de la aplicación con la sintaxis -key value (por ejemplo, -Port 5000-RequestTimeout 5000-WEBSITE_TIME_ZONE). Incluya valores que contengan espacios entre comillas dobles (por ejemplo: "Eastern Standard Time").

Para más información sobre la configuración de la aplicación, consulte Variables de entorno y configuración de la aplicación en Azure App Service.


de método de implementación de
string. Obligatorio cuando appType != "" && isFlexConsumption = false && appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Valores permitidos: auto (detección automática), zipDeploy (Implementación zip), runFromPackage (Implementación zip con ejecución desde paquete). Valor predeterminado: auto.

Especifica el método de implementación para la aplicación. Las aplicaciones de consumo de Linux no admiten esta configuración.


de método de implementación de
string. Obligatorio cuando appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Valores permitidos: auto (detección automática), zipDeploy (Implementación zip), runFromPackage (Implementación zip con ejecución desde paquete). Valor predeterminado: auto.

Especifica el método de implementación para la aplicación. Las aplicaciones de consumo de Linux no admiten esta configuración.


de método de implementación de
string. Obligatorio cuando appType != "" && package NotEndsWith .war && Package NotEndsWith .jar. Valores permitidos: auto (detección automática), zipDeploy (Implementación zip), runFromPackage (Implementación zip con ejecución desde paquete). Valor predeterminado: auto.

Elige el método de implementación para la aplicación. Las aplicaciones de consumo de Linux no admiten esta configuración.s


Opciones de control de tareas

Todas las tareas tienen opciones de control además de sus entradas de tarea. Para obtener más información, consulte Opciones de control y propiedades de tareas comunes.

Variables de salida

Esta tarea define las siguientes variables de salida , que puede consumir en pasos, trabajos y fases de bajada.

AppServiceApplicationUrl
dirección URL de la aplicación de La aplicación de funciones de Azure seleccionada.

Observaciones

La tarea Implementación de funciones de Azure se usa para actualizar Azure Functions para implementar Functions en Azure. La tarea funciona en agentes de Azure Pipelines multiplataforma que ejecutan Windows, Linux o Mac y usa las tecnologías de implementación subyacentes de RunFromPackage, Zip Deploy y API rest de Kudu.

La tarea funciona para los idiomas admitidos de Azure Functions.

Requisitos previos para la tarea

Los siguientes requisitos previos deben configurarse en las máquinas de destino para que la tarea funcione correctamente.

Función de Azure

La tarea se usa para implementar un proyecto de Azure Functions en una función de Azure existente. La aplicación de funciones de Azure debe existir antes de ejecutar la tarea. La aplicación de funciones de Azure se puede crear desde Azure Portal. Como alternativa, el de tareas de Azure PowerShell de se puede usar para ejecutar scripts de AzureRM PowerShell para aprovisionar y configurar la aplicación de funciones de Azure.

La tarea se puede usar para implementar azure Functions (Windows/Linux).

Suscripción de Azure

Para realizar la implementación en Azure, una suscripción de Azure debe vincularse a Azure Pipelines mediante la pestaña Servicios de la sección Administración de cuentas. Agregue la suscripción de Azure que se usará en la definición De compilación o Administración de versiones; para ello, abra la pantalla Administración de cuentas (icono de engranaje en la parte superior derecha de la pantalla) y, a continuación, haga clic en la pestaña Servicios.

Cree el punto de conexión de servicio de ARM y use tipo de punto de conexión de de Azure Resource Manager. Para obtener más información, siga los pasos enumerados en el vínculo aquí.

La tarea no funciona con el punto de conexión de servicio clásico de Azure y no enumerará estas conexiones en los parámetros de la tarea.

Métodos de implementación

Hay varios métodos de implementación disponibles en esta tarea.

Para cambiar la opción de implementación basada en paquetes en una tarea de diseñador, expanda Opciones de implementación adicionales y habilite Seleccionar método de implementación.

En función del tipo de agente de Azure App Service y Azure Pipelines, la tarea usa una tecnología de implementación adecuada. Las tecnologías de implementación que usan las tareas son las siguientes:

De forma predeterminada, la tarea intenta seleccionar la tecnología de implementación adecuada en función del paquete de entrada, el tipo de App Service y el sistema operativo del agente.

  • Si se proporciona un script posterior a la implementación, use Zip Deploy.
  • Si el tipo de App Service es Aplicación web en Linux, use Zip Deploy.
  • Si se proporciona un archivo .war, use War Deploy.
  • Si se proporciona un archivo .jar, use Run-From-Zip.
  • Para todas las demás tareas, use Ejecutar desde paquete (a través de Zip Deploy).

En un agente que no sea de Windows (para cualquier tipo de App Service), la tarea se basa en el de la API REST de Kudu de para implementar la aplicación web.

Kudu REST API

El API rest de Kudu funciona en agentes de automatización de Windows y Linux cuando el destino es una aplicación web en Windows, una aplicación web en Linux (origen integrado) o una aplicación de funciones. La tarea usa Kudu para copiar archivos en Azure App Service.

Implementación de Zip

Zip Deploy crea un paquete de implementación de .zip a partir del paquete o carpeta elegido. A continuación, implementa el contenido del archivo en la carpeta wwwroot de la aplicación de funciones de nombre de App Service en Azure. Esta opción sobrescribe todo el contenido existente en la carpeta wwwroot. Para más información, consulte implementación de Zip para Azure Functions.

Ejecutar desde el paquete

Ejecutar desde paquete crea el mismo paquete de implementación que Zip Deploy. En lugar de implementar archivos en la carpeta wwwroot, el entorno de ejecución de Functions monta todo el paquete. Cuando se usa esta opción, los archivos de la carpeta wwwroot se convierten en de solo lectura. Para más información, consulte Ejecución de Azure Functions desde un archivo de paquete.

Solución de problemas

Error: No se pudo capturar el token de acceso para Azure. Compruebe si la entidad de servicio usada es válida y no ha expirado.

La tarea usa la entidad de servicio en la conexión de servicio para autenticarse con Azure. Si la entidad de servicio ha expirado o no tiene permisos para App Service, se produce un error en la tarea. Compruebe la validez de la entidad de servicio usada y que esté presente en el registro de la aplicación. Para más información, consulte Uso del control de acceso basado en rol para administrar el acceso a los recursos de suscripción de Azure. Esta entrada de blog también contiene más información sobre el uso de la autenticación de entidad de servicio.

Error ssl

Si desea usar un certificado en App Service, el certificado debe estar firmado por una entidad de certificación de confianza. Si la aplicación web proporciona errores de validación de certificados, probablemente esté usando un certificado autofirmado. Establezca una variable denominada VSTS_ARM_REST_IGNORE_SSL_ERRORS en el valor true en la canalización de compilación o versión para resolver el error.

Una versión se bloquea durante mucho tiempo y, a continuación, se produce un error

Este problema podría ser el resultado de una capacidad insuficiente en el plan de App Service. Para resolver este problema, puede escalar verticalmente la instancia de App Service para aumentar la CPU, la RAM y el espacio en disco disponibles o probar con un plan de App Service diferente.

5 códigos de error xxxx

Si ve un error de 5xx, compruebe el estado del servicio de Azure.

La función de Azure de repente dejó de funcionar

Azure Functions puede dejar de funcionar repentinamente si ha transcurrido más de un año desde la última implementación. Si implementa con "RunFromPackage" en "deploymentMethod", se genera una SAS con una fecha de expiración de 1 año y se establece como el valor de "WEBSITE_RUN_FROM_PACKAGE" en la configuración de la aplicación. Azure Functions usa esta SAS para hacer referencia al archivo de paquete para la ejecución de la función, por lo que si la SAS ha expirado, la función no se ejecutará. Para resolver este problema, vuelva a implementar para generar una SAS con una fecha de expiración de un año.

Error: No se encontró ningún paquete con el patrón especificado

Compruebe si el paquete mencionado en la tarea se publica como un artefacto en la compilación o una fase anterior y se descarga en el trabajo actual.

Error: No se admite publicar con la opción de implementación zip para el tipo de paquete msBuild.

Los paquetes web creados a través de la tarea de MSBuild (con argumentos predeterminados) tienen una estructura de carpetas anidada que solo se puede implementar correctamente mediante Web Deploy. La opción de implementación publicar en zip no se puede usar para implementar esos paquetes. Para convertir la estructura de empaquetado, siga estos pasos:

  1. En la tarea Compilar solución, cambie el argumentos de MSBuild a /p:DeployOnBuild=true /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl="$(System.DefaultWorkingDirectory)\\WebAppContent":

    Captura de pantalla que muestra los valores de la solución de compilación.

  2. Agregue una tarea Archivar y cambie los valores de la siguiente manera:

    1. Cambie carpeta raíz o archivo para archivar a $(System.DefaultWorkingDirectory)\\WebAppContent.

    2. Desactive la casilla Nombre de carpeta raíz anteponer para archivar rutas de acceso:

      Captura de pantalla que muestra los valores de archivo.

La implementación de la aplicación de funciones en Windows se realiza correctamente, pero la aplicación no funciona

Este problema podría producirse si un archivo web.config no está presente en la aplicación. Puede agregar un archivo web.config al origen o generar uno automáticamente mediante la Configuración y la aplicación de la tarea.

  1. Seleccione la tarea y vaya a Generar parámetros de web.config para Python, Node.js, Go y Aplicaciones Java:

    Captura de pantalla que muestra la sección Generar parámetros web.config.

  2. Seleccione el botón Más (...) en Generar parámetros de web.config para Python, Node.js, Go y Aplicaciones Java para editar los parámetros:

    Captura de pantalla que muestra los parámetros Generar web.config.

  3. Seleccione el tipo de aplicación en la lista Application Framework.

  4. Seleccione Aceptar. Al hacerlo, se rellenarán los parámetros web.config necesarios para generar el archivo web.config.

Preguntas más frecuentes

¿Cómo debo configurar mi conexión de servicio?

Esta tarea requiere una conexión de servicio de Azure Resource Manager .

¿Cómo debo configurar la implementación de trabajos web con Application Insights?

Al implementar en una instancia de App Service, si ha configurado Application Insights y ha habilitado Remove additional files at destination, también debe habilitar Exclude files from the App_Data folder. Al habilitar esta opción, la extensión de Application Insights se mantiene en un estado seguro. Este paso es necesario porque el trabajo web continuo de Application Insights se instala en la carpeta App_Data.

¿Cómo debo configurar mi agente si está detrás de un proxy mientras estoy implementando en App Service?

Si el agente autohospedado requiere un proxy web, puede informar al agente sobre el proxy durante la configuración. Esto permite al agente conectarse a Azure Pipelines o Azure DevOps Server a través del proxy. Obtenga más información sobre cómo ejecutar un agente autohospedado detrás de un proxy web.

No puedo implementar en una instancia interna de App Service Environment mediante una conexión de servicio de Azure Resource Manager y un agente hospedado por Microsoft

Por diseño, un agente hospedado por Microsoft no funcionará con una instancia de App Service Environment. En su lugar, debe configurar un agente privado en una máquina virtual que se encuentra en la misma red virtual que App Service Environment. Además, establezca una zona DNS privada para habilitar la comunicación entre los recursos.

Ejemplos

Este es un fragmento de código YAML de ejemplo que implementa funciones de Azure en Windows:


variables:
  azureSubscription: Contoso
  # To ignore SSL error, uncomment the below variable
  # VSTS_ARM_REST_IGNORE_SSL_ERRORS: true

steps:
- task: AzureFunctionApp@2
  displayName: Azure Function App Deploy
  inputs:
    azureSubscription: $(azureSubscription)
    appName: samplefunctionapp
    appType: functionApp
    package: $(System.DefaultWorkingDirectory)/**/*.zip

Para implementar una función en Linux, agregue el parámetro appType y establézcalo en appType: functionAppLinux. Si no especifica un valor, functionApp es el valor predeterminado.

Para especificar explícitamente el método de implementación como Zip Deploy, agregue el parámetro deploymentMethod: zipDeploy. Otro valor admitido para este parámetro es runFromPackage. Si no especifica un valor, auto es el valor predeterminado.

Para ver un tutorial que muestra cómo crear una canalización de CI/CD, consulte Compilación e implementación de Java en Azure Functions.

Requisitos

Requisito Descripción
Tipos de canalización YAML, compilación clásica, versión clásica
Se ejecuta en Agente, DeploymentGroup
demandas Ninguno
funcionalidades de Esta tarea no satisface ninguna demanda de tareas posteriores en el trabajo.
restricciones de comandos Cualquier
variables settable Cualquier
Versión del agente 2.104.1 o superior
Categoría de tarea Desplegar