Partager via


Déployer sur Azure App Service à l’aide d’Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

Utilisez Azure Pipelines pour déployer automatiquement votre application web sur Azure App Service à chaque build réussie. Azure Pipelines vous permet de générer, de tester et de déployer avec l’intégration continue et la livraison continue (CI/CD) à l’aide d’Azure DevOps.

Les pipelines YAML sont définis à l’aide d’un fichier YAML dans votre référentiel. Une étape est le plus petit bloc de construction d’un pipeline, et peut être un script ou une tâche (script prédéfini). En savoir plus sur les principaux concepts et composants qui composent un pipeline.

Vous utilisez la tâche Azure Web App (AzureWebApp) pour déployer sur Azure App Service dans votre pipeline. Pour des scénarios plus complexes, comme lorsque vous devez utiliser des paramètres XML dans votre déploiement, vous pouvez utiliser la tâche AzureRmWebAppDeploymentde déploiement Azure App Service.

Configuration requise :

1. Créer un pipeline pour votre pile

Les exemples de code de cette section supposent que vous déployez une application web ASP.NET. Vous pouvez adapter les instructions pour d’autres infrastructures.

Apprenez-en davantage plus sur la prise en charge de l’écosystème Azure Pipelines.

  1. Connectez-vous à votre organisation Azure DevOps et accédez à votre projet.

  2. Accédez aux pipelines et sélectionnez Nouveau pipeline.

  3. Lorsque vous y êtes invité, sélectionnez l’emplacement de votre code source : Azure Repos Git ou GitHub.

    Vous serez peut-être redirigé vers GitHub pour vous connecter. Si c’est le cas, entrez vos informations d’identification GitHub.

  4. Quand la liste des dépôts s’affiche, sélectionnez votre dépôt.

  5. Vous serez peut-être redirigé vers GitHub pour pouvoir installer l’application Azure Pipelines. Si c’est le cas, sélectionnez Approuver et installer.

  6. Quand l’onglet Configurer s’affiche, sélectionnez ASP.NET Core.

  7. Quand votre nouveau pipeline s’affiche, examinez le code YAML pour voir ce qu’il fait. Lorsque vous êtes prêt, sélectionnez Enregistrer et exécuter.

2. Ajouter la tâche de déploiement

  1. Sélectionnez la fin du fichier YAML, puis sélectionnez Afficher l’Assistant.

  2. Utilisez l’Assistant Tâche pour ajouter la tâche d’application web Azure .

    Vous pouvez également ajouter la tâche Azure App Service de déploiementAzureRmWebAppDeployment.

  3. Choisissez votre abonnement Azure. Veillez à sélectionner Autoriser pour autoriser votre connexion. L’autorisation crée la connexion de service requise.

  4. Sélectionnez le type d’application, le nom de l’application et la pile d’exécution en fonction de votre application App Service. Votre YAML complet doit ressembler au code suivant.

    variables:
      buildConfiguration: 'Release'
    
    steps:
    - task: DotNetCoreCLI@2
      inputs:
        command: 'publish'
        publishWebProjects: true
    - task: AzureWebApp@1
      inputs:
        azureSubscription: '<service-connection-name>'
        appType: 'webAppLinux'
        appName: '<app-name>'
        package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    
    • azureSubscription: nom de la connexion de service autorisée à votre abonnement Azure.
    • appName: nom de votre application existante.
    • package: chemin d’accès au package ou à un dossier contenant votre contenu App Service. Les caractères génériques sont pris en charge.

Exemple : déployer une application .NET

Pour déployer un package web .zip (par exemple, à partir d’une application web ASP.NET) vers une application web Azure, utilisez l’extrait de code suivant pour déployer la build sur une application.

variables:
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
- task: AzureWebApp@1
  inputs:
    azureSubscription: '<service-connection-name>'
    appType: 'webAppLinux'
    appName: '<app-name>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
  • azureSubscription: Votre abonnement Azure.
  • appType: type d’application web.
  • appName: nom de votre service d’application existant.
  • package: chemin d’accès au package ou à un dossier contenant votre contenu App Service. Les caractères génériques sont pris en charge.

Exemple : Déployer sur une application virtuelle

Par défaut, votre déploiement se produit à l’application racine dans l’application web Azure. Vous pouvez déployer sur une application virtuelle spécifique en utilisant la propriété VirtualApplication de la tâche de déploiement Azure App Service AzureRmWebAppDeployment :

- task: AzureRmWebAppDeployment@4
  inputs:
    VirtualApplication: '<name of virtual application>'

Exemple : déployer sur un emplacement

L’exemple suivant montre comment effectuer un déploiement vers un emplacement de préproduction, puis dans un emplacement de production :

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<service-connection-name>'
    appType: webAppLinux
    appName: '<app-name>'
    deployToSlotOrASE: true
    resourceGroupName: '<name of resource group>'
    slotName: staging
    package: '$(Build.ArtifactStagingDirectory)/**/*.zip'

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<service-connection-name>'
    appType: webAppLinux
    WebAppName: '<app-name>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: Votre abonnement Azure.
  • appType: (Facultatif) Permet webAppLinux de déployer sur une application web sur Linux.
  • appName: nom de votre service d’application existant.
  • deployToSlotOrASE*:Booléen. Déployez dans un emplacement de déploiement existant ou dans Azure App Service Environment.
  • resourceGroupName: nom du groupe de ressources. Obligatoire si la valeur de deployToSlotOrASE est true.
  • slotName: Nom de l’emplacement, qui est défini par défaut sur production. Obligatoire si la valeur de deployToSlotOrASE est true.
  • package: chemin d’accès au package ou à un dossier contenant votre contenu App Service. Les caractères génériques sont pris en charge.
  • SourceSlot : Emplacement envoyé à la production lorsque SwapWithProduction est vrai.
  • SwapWithProduction:Booléen. Échangez le trafic de l’emplacement source avec la production.

Exemple : déployer sur plusieurs applications web

Vous pouvez utiliser des travaux dans votre fichier YAML pour configurer un pipeline de déploiements. En utilisant des travaux, vous pouvez contrôler l’ordre de déploiement sur plusieurs applications web.

jobs:
- job: buildandtest
  pool:
    vmImage: ubuntu-latest
 
  steps:
  # publish an artifact called drop
  - task: PublishPipelineArtifact@1
    inputs:
      targetPath: '$(Build.ArtifactStagingDirectory)' 
      artifactName: drop
  
  # deploy to Azure Web App staging
  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<service-connection-name>'
      appType: <app type>
      appName: '<staging-app-name>'
      deployToSlotOrASE: true
      resourceGroupName: <group-name>
      slotName: 'staging'
      package: '$(Build.ArtifactStagingDirectory)/**/*.zip'

- job: deploy
  dependsOn: buildandtest
  condition: succeeded()

  pool: 
    vmImage: ubuntu-latest  
  
  steps:
    # download the artifact drop from the previous job
  - task: DownloadPipelineArtifact@2
    inputs:
      source: 'current'
      artifact: 'drop'
      path: '$(Pipeline.Workspace)'

  - task: AzureWebApp@1
    inputs:
      azureSubscription: '<service-connection-name>'
      appType: <app type>
      appName: '<production-app-name>'
      resourceGroupName: <group-name>
      package: '$(Pipeline.Workspace)/**/*.zip'

Exemple : déployer de manière conditionnelle

Pour effectuer un déploiement conditionnel dans YAML, vous pouvez utiliser l’une des techniques suivantes :

  • Isoler les étapes de déploiement dans un travail distinct et ajouter une condition à celui-ci.
  • Ajouter une condition à l’étape.

L’exemple suivant montre comment utiliser des conditions d’étape pour déployer uniquement des builds provenant de la branche principale :

- task: AzureWebApp@1
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
    azureSubscription: '<service-connection-name>'
    appName: '<app-name>'

Pour en savoir plus sur les conditions, consultez Spécifier des conditions.

Exemple : Déployer à l’aide de Web Deploy

La tâche AzureRmWebAppDeployment de déploiement Azure App Service peut être déployée sur App Service à l’aide du déploiement web.

trigger:
- main

pool:
  vmImage: windows-latest

variables:
  buildConfiguration: 'Release'

steps:
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
    arguments: '--configuration $(buildConfiguration)'
    zipAfterPublish: true
- task: AzureRmWebAppDeployment@4
  inputs:
    ConnectionType: 'AzureRM'
    azureSubscription: '<service-connection-name>'
    appType: 'webApp'
    WebAppName: '<app-name>'
    packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
    enableCustomDeployment: true
    DeploymentType: 'webDeploy'

Forum aux questions

Quelle est la différence entre les tâches AzureWebApp et AzureRmWebAppDeployment ?

La tâche AzureWebApp est le moyen le plus simple de déployer sur une application web Azure. Par défaut, votre déploiement se produit à l’application racine dans l’application web Azure.

La tâche de déploiement Azure App Service (AzureRmWebAppDeployment) peut gérer des scénarios plus personnalisés, tels que :

  • Déployez avec Web Deploy, si vous utilisez généralement le processus de déploiement d’Internet Information Services (IIS).
  • Déployez sur des applications virtuelles.
  • Déployez sur d’autres types d’applications, tels que les applications conteneur, les applications de fonction, les tâches web ou les applications API et mobiles.

Remarque

La tâche de transformation de fichier distincte prend également en charge les transformations de fichiers et la substitution de variables à utiliser dans Azure Pipelines. Vous pouvez utiliser la tâche Transformation de fichier pour appliquer des transformations de fichiers et des substitutions de variables sur tous les fichiers de configuration et de paramètres.

Pourquoi est-ce que je reçois le message « Chemin de package ou de dossier App Service non valide fourni » ?

Dans les pipelines YAML, selon votre pipeline, il peut y avoir une incompatibilité entre l’emplacement où votre package web généré est enregistré et où la tâche de déploiement la recherche. Par exemple, la tâche AzureWebApp récupère le package web pour le déploiement. La tâche AzureWebApp pourrait apparaître dans $(System.DefaultWorkingDirectory)/**/*.zip. Si le package web est déposé ailleurs, modifiez la valeur de package.

Pourquoi est-ce que je reçois le message « Les options de publication avec Webdeploy ne sont prises en charge que lors de l'utilisation d'un agent Windows » ?

Cette erreur se produit dans la AzureRmWebAppDeployment tâche lorsque vous configurez la tâche pour déployer à l'aide de Web Deploy, mais que votre agent n'exécute pas Windows. Vérifiez que votre YAML inclut quelque chose de similaire au code suivant :

pool:
  vmImage: windows-latest

Pourquoi le déploiement web ne fonctionne-t-il pas quand je désactive l’authentification de base ?

Pour obtenir des informations de dépannage sur la manière de faire fonctionner l'authentification ID Microsoft Entra avec la tâche AzureRmWebAppDeployment, consultez Je ne peux pas déployer par le Web vers mon Azure App Service à l'aide de l'authentification ID Microsoft Entra à partir de mon agent Windows.