Résoudre les problèmes liés aux tâches de déploiement d’Azure Web App

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022

Cet article vous aide à résoudre les erreurs courantes qui se produisent lorsque vous utilisez les tâches Azure Web App (AzureWebApp@1) ou Azure App Service Deploy (AzureRmWebAppDeployment@4) dans Azure Pipelines.

Il s’agit d’un article de résolution des problèmes. Pour en savoir plus sur les déploiements App Service, consultez Déployer sur Azure App Service à l’aide d’Azure Pipelines, qui couvre AzureWebApp@1 et propose des scénarios avancés avec AzureRmWebAppDeployment@4. Pour les déploiements basés sur des conteneurs, consultez Déployer un conteneur personnalisé sur App Service à l’aide d’Azure Pipelines, qui inclut des AzureRmWebAppDeployment@4 exemples.

Conseil / Astuce

Avant de résoudre les problèmes, rassemblez les journaux de débogage en activant la journalisation détaillée pour votre exécution de pipeline. Vous pouvez également collecter les journaux de diagnostic à partir du service Kudu et la fonctionnalité Diagnostiquer et résoudre les problèmes dans le portail Azure pour votre App Service. Vérifiez l’état d’Azure DevOps et l’état Azure pour exclure les pannes de service.

« Pile JavaScript hors mémoire »

Symptôme

La tâche de déploiement échoue avec l’erreur suivante :

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

La cause

Cette erreur se produit lorsque la tâche tente de décompresser, puis de recompresser un package de déploiement volumineux, et que l'opération dépasse la mémoire disponible sur l’agent. Les agents hébergés par Microsoft ont des ressources limitées, ce qui peut entraîner cette défaillance pour les packages volumineux.

Résolution

Utilisez la tâche Azure Web App (AzureWebApp@1) au lieu de la AzureRmWebAppDeployment@4 tâche pour les déploiements App Service. La AzureWebApp@1 tâche gère les packages volumineux plus efficacement.

Pour des scénarios de déploiement plus complexes nécessitant une transformation XML, utilisez la tâche Azure App Service Deploy (AzureRmWebAppDeployment@4) avec un package plus petit ou fractionnez les transformations en une étape de pipeline distincte.

« ECONNRESET » pendant le déploiement

Symptôme

La tâche de déploiement échoue avec l’erreur suivante :

Encountered a retriable error: ECONNRESET. Message: read ECONNRESET

La cause

Une connexion réseau entre l’agent de pipeline et App Service a été réinitialisée pendant le déploiement. Les causes courantes sont les suivantes :

  • Agents hébergés par Microsoft qui déploient sur un environnement App Service (ASE) : L’ASE peut bloquer les connexions entrantes à partir d’adresses IP de l’agent.
  • Agents auto-hébergés : Connexion réseau instable ou intermittente entre l’agent et le service App Service.

Résolution

Pour les agents hébergés par Microsoft avec ASE :

Assurez-vous que vos règles de sécurité réseau ASE autorisent les connexions entrantes à partir des plages d’adresses IP de l’agent hébergé par Microsoft pour votre zone géographique. Pour obtenir la liste des plages d’adresses IP, consultez adresses IP autorisées et URL de domaine.

Pour les agents auto-hébergés :

  • Vérifiez que la connexion réseau entre votre agent et App Service est stable.
  • Si le problème persiste, créez un ticket de support auprès de l’équipe Azure App Service ou Réseau Azure pour une investigation plus approfondie.

« Échec du déploiement du package web sur App Service »

Symptôme

La tâche de déploiement échoue avec une ou les deux erreurs suivantes :

[error]Failed to deploy web package to App Service.
Package deployment using ZIP Deploy failed. Refer logs for more details.

La cause

La tâche utilise l’API Kudu zipDeploy pour le déploiement et l’API a retourné une erreur. Cette erreur peut se produire lorsque App Service ne peut pas traiter correctement le package entrant.

Résolution

Configurez le paramètre WEBSITE_RUN_FROM_PACKAGE pour qu’il soit 1 sur votre Service d’applications.

  1. Dans le portail Azure, accédez à votre App Service.
  2. Sélectionnez Configuration>Paramètres de l'application.
  3. Ajoutez ou mettez à jour le paramètre WEBSITE_RUN_FROM_PACKAGE avec la valeur .1
  4. Enregistrez la configuration et réessayez le déploiement.

Pour plus d’informations, consultez Exécuter votre application à partir d’un package.

« EMFILE : trop de fichiers ouverts »

Symptôme

La tâche de déploiement échoue avec l’une des erreurs suivantes :

EMFILE: too many open files
Error: Package deployment using ZIP Deploy failed

La cause

La tâche de déploiement ouvre trop de handles de fichiers lors de la décompression d’un package volumineux, dépassant la limite de descripteur de fichier du système d’exploitation.

Résolution

Utilisez l’une des solutions de contournement suivantes :

Option 1 : Utiliser la tâche Azure Web App

Passez de AzureRmWebAppDeployment@4 vers la tâche Azure Web App (AzureWebApp@1), qui gère les packages volumineux différemment.

Option 2 : Extraire des fichiers avant le déploiement

Utilisez la tâche Extraire des fichiers pour décompresser le package à l’étape précédente, puis déployez le dossier extrait. Cette approche empêche la tâche de déploiement de devoir décompresser le package lui-même.

steps:
- task: ExtractFiles@1
  displayName: 'Extract files'
  inputs:
    archiveFilePatterns: '$(InputPackageZipPath)'
    destinationFolder: '$(OutputUnzippedPath)'

- task: AzureRmWebAppDeployment@4
  displayName: 'Azure App Service Deploy'
  inputs:
    azureSubscription: 'Subscription'
    WebAppName: 'app-name'
    package: '$(OutputUnzippedPath)'

Erreur « La ressource n’existe pas »

Symptôme

La tâche de déploiement échoue avec l’erreur suivante :

Error: Resource '<ResourceName>' doesn't exist. Resource should exist before deployment.

Cette erreur peut se produire avec les tâches Azure Web App, les tâches Azure App Service Deploy, les tâches Azure Functions et les tâches de déploiement de modèles ARM.

La cause

La tâche appelle des API Azure qui dépendent des données de ressources mises en cache. Si App Service ou une autre ressource Azure a été créée récemment ( dans le même pipeline, par un autre outil ou juste avant l’exécution du pipeline), le cache peut ne pas refléter la nouvelle ressource.

Résolution

Ajoutez une étape de retard dans votre pipeline avant la tâche de déploiement pour permettre au cache Azure de mettre à jour :

steps:
- task: PowerShell@2
  displayName: 'Wait for resource propagation'
  inputs:
    targetType: inline
    script: Start-Sleep -Seconds 60

Si vous ajoutez un délai ne résout pas l’erreur, créez un ticket de support auprès de l’équipe de service Azure pour le type de ressource affecté.

« Aucun package trouvé avec le modèle spécifié »

Symptôme

La tâche de déploiement échoue avec une erreur indiquant qu’aucun package n’a été trouvé correspondant au modèle spécifié.

La cause

L’artefact contenant le package de déploiement n’a pas été publié dans la build ou une étape précédente, ou il n’a pas été téléchargé dans le travail actuel.

Résolution

  • Vérifiez que la build ou une étape de pipeline précédente publie le package en tant qu’artefact de pipeline.
  • Vérifiez que le travail actuel inclut une étape de téléchargement pour l’artefact.
  • Vérifiez que le modèle de chemin d’accès du fichier dans la tâche de déploiement correspond au chemin d’accès d’artefact réel.

« La publication à l’aide de l’option zip deploy n’est pas prise en charge pour le type de package MSBuild »

Symptôme

La tâche de déploiement échoue en raison de l'absence de support pour le déploiement par zip pour les types de package MSBuild.

La cause

Les packages web créés par la tâche MSBuild (avec des arguments par défaut) utilisent une structure de dossiers imbriquée qui nécessite Web Deploy pour un déploiement correct. L’option de déploiement zip ne peut pas gérer cette structure de package.

Résolution

Utilisez la AzureRmWebAppDeployment@4 tâche avec Web Deploy au lieu de zip deploy, ou restructurez votre build pour produire une sortie basée sur un dossier. Pour produire une sortie de dossier à partir de MSBuild, ajoutez l’argument /p:PackageAsSingleFile=false à votre tâche MSBuild.

Erreur 5xx pendant le déploiement

Symptôme

La tâche de déploiement échoue avec un 500, 502, 503 ou un autre code d’erreur HTTP 5xx.

La cause

Une erreur côté serveur s’est produite sur App Service ou sur son infrastructure sous-jacente. Les causes courantes incluent une capacité de plan de service d'application insuffisante, une panne Azure en cours ou le service d'application étant soit à l'arrêt, soit en état d'erreur.

Résolution

  • Vérifiez l’état d’Azure pour connaître les pannes en cours.
  • Dans le portail Azure, vérifiez que l’App Service est en cours d’exécution et que le plan App Service dispose d’une capacité suffisante.
  • Augmentez le plan App Service pour accroître le processeur, la RAM et l’espace disque, ou essayez un autre plan.
  • Pour plus d’informations sur l’erreur côté serveur, consultez les journaux Kudu.

La version se bloque, puis échoue ou « 503 service indisponible »

Symptôme

Un déploiement s’exécute pendant une période prolongée et échoue finalement, une 503 Service Unavailable erreur se produit ou l’historique du déploiement dans les journaux Kudu ne parvient pas à être mis à jour.

La cause

Ces problèmes se produisent généralement lorsque le plan App Service a une capacité insuffisante pour gérer le déploiement en même temps que l’application en cours d’exécution.

Résolution

  • Effectuez un scale-up de l’instance App Service pour augmenter l’espace processeur, RAM et disque disponible.
  • Essayez de déployer sur un autre Plan de Service d'Application pour éliminer la contention des ressources.
  • Passez en revue les journaux de diagnostic Kudu à partir du portail Azure pour identifier des erreurs spécifiques.
  • Pour les déploiements sans temps d’arrêt, utilisez des emplacements de déploiement avec des échanges d’emplacements au lieu de déployer directement sur l’emplacement de production.

Erreurs de connectivité réseau pendant le déploiement

Symptôme

La tâche de déploiement échoue avec une erreur liée au réseau, par exemple :

Could not connect to the remote computer ('<AppName>.scm.azurewebsites.net')

La cause

L’agent de pipeline ne peut pas atteindre le point de terminaison Kudu d’App Service (site SCM) en raison de règles de pare-feu, de configuration de proxy ou de restrictions réseau.

Résolution

Passez en revue la configuration réseau de votre type d’agent :

« Impossible d’extraire le jeton d’accès pour Azure »

Symptôme

La tâche de déploiement échoue avec l’erreur suivante :

Could not fetch access token for Azure. Verify if the Service Principal used is valid and not expired.

La cause

Le principal de service qui sauvegarde la connexion de service Azure a expiré, est désactivé ou n’a pas les autorisations requises.

Résolution

Vérifiez le principal de service dans Microsoft Entra ID et renouvelez le secret ou le certificat s'il est expiré. Pour obtenir des instructions détaillées sur la résolution des problèmes, consultez Résoudre les problèmes liés aux connexions de service Azure Resource Manager.

Erreur SSL dans la tâche de déploiement

Symptôme

La tâche de déploiement échoue avec une erreur liée au protocole SSL.

La cause

App Service a un problème de configuration de certificat SSL, comme l’utilisation d’un certificat non approuvé ou auto-signé.

Résolution

Vérifiez que le certificat utilisé par App Service est signé par une autorité de certification approuvée. Pour plus d’informations, consultez Ajouter et gérer des certificats TLS/SSL dans Azure App Service.

Codes d’erreur de Web Deploy

Symptôme

Lorsque vous utilisez Web Deploy comme méthode de déploiement, le journal des tâches affiche un code d’erreur Web Deploy tel que ERROR_CONNECTION_NOT_FOUND, ERROR_DESTINATION_NOT_REACHABLEou d’autres.

La cause

Web Deploy a rencontré un problème de communication avec ou de déploiement sur App Service.

Résolution

Consultez les codes d’erreur Web Deploy pour obtenir la liste complète des codes d’erreur et leurs résolutions.

« ERROR_FILE_IN_USE » lors du déploiement d’applications .NET

Symptôme

La tâche de déploiement échoue avec une erreur lors du déploiement d’une ERROR_FILE_IN_USE application .NET sur App Service sur Windows.

La cause

Les fichiers d’application sont verrouillés par le processus d’application en cours d’exécution pendant le déploiement.

Résolution

Dans la AzureRmWebAppDeployment@4 tâche, activez les options suivantes :

  • Renommer des fichiers verrouillés (enableMSDeployAppOffline: true)
  • Mettre l’application hors connexion (enableMSDeployRetry: true)

Pour les déploiements sans temps d’arrêt, utilisez des slots de déploiement avec des swaps d’emplacements.

Application déployée avec succès, mais ne fonctionne pas (Windows)

Symptôme

Le déploiement se termine sans erreur, mais l’application ne répond pas ou renvoie des erreurs lorsque vous y accédez.

La cause

Sur Windows App Service, un web.config fichier est requis pour de nombreux types d’applications (tels que Node.js ou Python). Si le fichier est manquant, IIS ne peut pas acheminer les demandes vers votre application.

Résolution

Ajoutez un web.config fichier à la racine de votre application. Pour plus d’informations, consultez Configurer un conteneur personnalisé pour Azure App Service et les instructions spécifiques à l’infrastructure :

Le déploiement d’application de fonction échoue avec la tâche AzureRmWebAppDeployment

Symptôme

Le déploiement d’une application de fonction Azure à l’aide de la AzureRmWebAppDeployment@4 tâche échoue.

La cause

La AzureRmWebAppDeployment@4 tâche est conçue pour les déploiements App Service et peut ne pas gérer correctement les exigences spécifiques à Function App.

Résolution

Utilisez la tâche Azure Functions (AzureFunctionApp@1) à la place, qui est conçue spécifiquement pour les déploiements d’application de fonction.