Partager via


Livraison continue avec Azure Pipelines

Utilisez Azure Pipelines pour déployer automatiquement votre projet de code sur une application de fonction dans Azure. Azure Pipelines vous permet de créer, tester et déployer avec l’intégration continue (CI) et la livraison continue (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 AzureFunctionApp pour déployer votre code. Il existe maintenant deux versions de AzureFunctionApp, qui sont comparées dans ce tableau :

Comparaison/version AzureFunctionApp@2 AzureFunctionApp@1
Prend en charge le plan Flex Consumption
Inclut une prise en charge améliorée de la validation*
Quand utiliser... Recommandé pour les nouveaux déploiements d’applications Maintenu pour les déploiements anciens

* La prise en charge améliorée de la validation rend les pipelines moins susceptibles d’échouer en raison d’erreurs.

Choisissez la version de votre tâche en haut de l’article.

Remarque

Effectuez une mise à niveau de AzureFunctionApp@1 vers AzureFunctionApp@2 pour accéder aux nouvelles fonctionnalités et à la prise en charge à long terme.

Prérequis

N’oubliez pas de télécharger le projet de code local sur votre référentiel GitHub ou Azure Repos après l’avoir publié dans votre application de fonction.

Générer votre application

  1. Connectez-vous à votre organisation Azure DevOps et accédez à votre projet.
  2. Dans votre projet, accédez à la page Pipelines. Choisissez ensuite l’action pour créer un pipeline.
  3. Suivez les étapes de l’Assistant en sélectionnant d’abord GitHub comme emplacement du code source.
  4. Vous serez peut-être redirigé vers GitHub pour vous connecter. Si c’est le cas, entrez vos informations d’identification GitHub.
  5. Lorsque la liste des dépôts s’affiche, sélectionnez votre dépôt d’exemples d’applications.
  6. Azure Pipelines analysera votre dépôt et recommandera un modèle. Sélectionnez Enregistrer et exécuter, Valider directement sur la branche primaire, puis choisissez à nouveau Enregistrer et exécuter.
  7. Une nouvelle exécution est lancée. Attendez la fin de l’exécution.

Exemples de pipelines de build YAML

Les pipelines propres aux langages suivants peuvent être utilisés pour créer des applications.

Vous pouvez utiliser l’exemple suivant pour créer un fichier YAML pour générer votre application .NET :

pool:
  vmImage: 'windows-latest'
steps:
  - task: UseDotNet@2
    displayName: 'Install .NET 8.0 SDK'
    inputs:
      packageType: 'sdk'
      version: '8.0.x'
      installationPath: $(Agent.ToolsDirectory)/dotnet
  - script: |
      dotnet restore
      dotnet build --configuration Release
  - task: DotNetCoreCLI@2
    displayName: 'dotnet publish'
    inputs:
      command: publish
      arguments: '--configuration Release --output $(System.DefaultWorkingDirectory)/publish_output'
      projects: 'csharp/*.csproj'
      publishWebProjects: false
      modifyOutputPath: false
      zipAfterPublish: false
  - task: ArchiveFiles@2
    displayName: "Archive files"
    inputs:
      rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
      includeRootFolder: false
      archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
      artifactName: 'drop'
  1. Connectez-vous à votre organisation Azure DevOps et accédez à votre projet.
  2. Dans votre projet, accédez à la page Pipelines. Sélectionnez ensuite Nouveau pipeline.
  3. Sélectionnez l’une de ces options pour Où se trouve votre code ? :
    • GitHub : Vous allez éventuellement être redirigé vers GitHub pour vous connecter. Si c’est le cas, entrez vos informations d’identification GitHub. Lorsque cette connexion est votre première connexion GitHub, l’Assistant vous guide également dans le processus de connexion de DevOps à vos comptes GitHub.
    • Azure Repos Git : vous pouvez immédiatement choisir un référentiel dans votre projet DevOps actuel.
  4. Lorsque la liste des dépôts s’affiche, sélectionnez votre dépôt d’exemples d’applications.
  5. Azure Pipelines analyse votre référentiel et fournit une liste de modèles potentiels dans Configurer votre pipeline. Choisissez le modèle d’application de fonction approprié pour votre langue. Si vous ne voyez pas le modèle approprié, sélectionnez Afficher plus.
  6. Sélectionnez Enregistrer et exécuter, Valider directement sur la branche primaire, puis choisissez à nouveau Enregistrer et exécuter.
  7. Une nouvelle exécution est lancée. Attendez la fin de l’exécution.

Exemples de pipelines de build YAML

Les pipelines propres aux langages suivants peuvent être utilisés pour créer des applications.

Vous pouvez utiliser l’exemple suivant pour créer un fichier YAML pour générer votre application .NET.

Si vous voyez des erreurs lors de la génération de votre application, vérifiez que la version de .NET que vous utilisez correspond à votre version Azure Functions. Pour plus d’informations, consultez Vue d’ensemble des versions du runtime Azure Functions.

pool:
  vmImage: 'windows-latest'
steps:
  - task: UseDotNet@2
    displayName: 'Install .NET 8.0 SDK'
    inputs:
      packageType: 'sdk'
      version: '8.0.x'
      installationPath: $(Agent.ToolsDirectory)/dotnet
  - script: |
      dotnet restore
      dotnet build --configuration Release
  - task: DotNetCoreCLI@2
    displayName: 'dotnet publish'
    inputs:
      command: publish
      arguments: '--configuration Release --output $(System.DefaultWorkingDirectory)/publish_output'
      projects: 'csharp/*.csproj'
      publishWebProjects: false
      modifyOutputPath: false
      zipAfterPublish: false
  - task: ArchiveFiles@2
    displayName: "Archive files"
    inputs:
      rootFolderOrFile: "$(System.DefaultWorkingDirectory)/publish_output"
      includeRootFolder: false
      archiveFile: "$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip"
  - task: PublishBuildArtifacts@1
    inputs:
      PathtoPublish: '$(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip'
      artifactName: 'drop'

Déployer votre application

Vous déploierez avec la tâche de déploiement d’application de fonction Azure v2. Cette tâche nécessite une connexion de service Azure comme entrée. Une connexion de service Azure stocke les informations d’identification pour se connecter à Azure à partir d’Azure Pipelines. Vous devez créer une connexion qui utilise la fédération d’identité de charge de travail.

Pour effectuer un déploiement sur Azure Functions, ajoutez cet extrait de code à la fin de votre azure-pipelines.yml fichier, selon que votre application s’exécute sur Linux ou Windows :

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <Name of your Azure subscription>
  appName: <Name of the function app>
  # Agent VM image name
  vmImageName: 'windows-latest'

- task: AzureFunctionApp@2 # Add this at the end of your file
  inputs:
    azureSubscription: <Name of your Azure subscription>
    appType: functionApp # this specifies a Windows-based function app
    appName: $(appName)
    package: $(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip
    deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required. Deployment method. Default: auto.
    #Uncomment the next lines to deploy to a deployment slot
    #Note that deployment slots is not supported for Linux Dynamic SKU
    #deployToSlotOrASE: true
    #resourceGroupName: '<RESOURCE_GROUP>'
    #slotName: '<SLOT_NAME>'

La valeur par défaut appType est Windows (functionApp). Vous pouvez spécifier Linux en affectant functionAppLinux à la valeur appType. Une application Flex Consumption s’exécute sur Linux, et vous devez définir à la fois appType: functionAppLinux et isFlexConsumption: true.

L’extrait de code part du principe que les étapes de génération de votre fichier YAML produisent l’archive zip dans le dossier $(System.ArtifactsDirectory) sur votre agent.

Vous déployez à l’aide de la tâche Azure Function App Deploy . Cette tâche nécessite une connexion de service Azure comme entrée. Une connexion de service Azure stocke les informations d’identification pour se connecter à Azure à partir d’Azure Pipelines.

Important

Le déploiement sur une application Consommation flexible n’est pas pris en charge en utilisant @v1 de la tâche AzureFunctionApp.

Pour effectuer un déploiement sur Azure Functions, ajoutez cet extrait de code à la fin de votre azure-pipelines.yml fichier :

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <Name of your Azure subscription>
  appName: <Name of the function app>
  # Agent VM image name
  vmImageName: 'ubuntu-latest'

- task: DownloadBuildArtifacts@1 # Add this at the end of your file
  inputs:
    buildType: 'current'
    downloadType: 'single'
    artifactName: 'drop'
    itemPattern: '**/*.zip'
    downloadPath: '$(System.ArtifactsDirectory)'
- task: AzureFunctionApp@1
  inputs:
    azureSubscription: $(azureSubscription)
    appType: functionAppLinux # default is functionApp
    appName: $(appName)
    package: $(System.ArtifactsDirectory)/**/*.zip

Cet extrait de code assigne la valeur de appType à functionAppLinux, ce qui est nécessaire lors du déploiement sur une application qui s’exécute sous Linux. La valeur par défaut appType est Windows (functionApp).

L’exemple suppose que les étapes de génération de votre fichier YAML produisent l’archive zip dans le $(System.ArtifactsDirectory) dossier de votre agent.

Déploiement d’un conteneur

Conseil / Astuce

Nous vous recommandons d’utiliser la prise en charge d’Azure Functions dans Azure Container Apps pour héberger votre application de fonction dans un conteneur Linux personnalisé. Pour plus d’informations, consultez la vue d’ensemble d’Azure Functions sur Azure Container Apps.

Lors du déploiement d’une application de fonction conteneurisée, la tâche de déploiement que vous utilisez dépend de l’environnement d’hébergement spécifique.

Vous pouvez utiliser la tâche Azure Container Apps Deploy (AzureContainerApps) pour déployer une image d’application de fonction sur une instance Azure Container App optimisée pour Azure Functions.

Ce code déploie l’image de base d’une application de fonction de modèle de processus isolé .NET 8 :

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

steps:
- task: AzureContainerApps@1
  inputs:
    azureSubscription: <Name of your Azure subscription>
    imageToDeploy: 'mcr.microsoft.com/azure-functions/dotnet-isolated:4-dotnet-isolated8.0'
    containerAppName: <Name of your container app>
    resourceGroup: <Name of the resource group>

Dans l’idéal, vous créez votre propre conteneur personnalisé dans le pipeline au lieu d’utiliser une image de base, comme illustré dans cet exemple. Pour plus d’informations, consultez Déployer sur Azure Container Apps à partir d’Azure Pipelines.

Déployer sur un emplacement

Important

Le plan Flex Consumption ne prend actuellement pas en charge les emplacements. Les applications Linux ne prennent pas en charge non plus les emplacements lors de l’exécution dans un plan Consommation et la prise en charge de ces applications sera supprimée à l’avenir.

trigger:
- main

variables:
  # Azure service connection established during pipeline creation
  azureSubscription: <Name of your Azure subscription>
  appName: <Name of the function app>
  # Agent VM image name
  vmImageName: 'windows-latest'

- task: AzureFunctionApp@2 # Add this at the end of your file
  inputs:
    azureSubscription: <Name of your Azure subscription>
    appType: functionApp # this specifies a Windows-based function app
    appName: $(appName)
    package: $(System.DefaultWorkingDirectory)/build$(Build.BuildId).zip
    deploymentMethod: 'auto' # 'auto' | 'zipDeploy' | 'runFromPackage'. Required. Deployment method. Default: auto.
    deployToSlotOrASE: true
    resourceGroupName: '<RESOURCE_GROUP>'
    slotName: '<SLOT_NAME>'

Vous pouvez configurer votre application de fonction pour qu’elle ait plusieurs emplacements. Les emplacements vous permettent de déployer votre application de manière sécurisée, et de la tester avant de la mettre à la disposition de vos clients.

L’extrait de code YAML suivant montre comment effectuer un déploiement vers un emplacement de préproduction, puis basculer vers un emplacement de production :

- task: AzureFunctionApp@1
  inputs:
    azureSubscription: <Azure service connection>
    appType: functionAppLinux
    appName: <Name of the function app>
    package: $(System.ArtifactsDirectory)/**/*.zip
    deployToSlotOrASE: true
    resourceGroupName: <Name of the resource group>
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: <Azure service connection>
    WebAppName: <name of the function app>
    ResourceGroupName: <name of resource group>
    SourceSlot: staging
    SwapWithProduction: true

Lorsque vous utilisez des emplacements de déploiement, vous pouvez également ajouter la tâche suivante pour effectuer un échange d’emplacements dans le cadre de votre déploiement.

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: <AZURE_SERVICE_CONNECTION>
    WebAppName: <APP_NAME>
    ResourceGroupName: <RESOURCE_GROUP>
    SourceSlot: <SLOT_NAME>
    SwapWithProduction: true

Créer un pipeline avec Azure CLI

Pour créer un pipeline de build dans Azure, utilisez la commandeaz functionapp devops-pipeline create. Le pipeline de build est créé pour créer et mettre en production toutes les modifications du code de votre référentiel. Cette commande génère un nouveau fichier YAML qui définit le pipeline de génération et de mise en production et le valide dans votre référentiel. Les conditions préalables de cette commande varient selon l’emplacement de votre code.

  • Si votre code se trouve dans GitHub :

    • Vous devez disposer des autorisations en écriture dans votre abonnement.

    • Vous devez être l’administrateur de projet dans Azure DevOps.

    • Vous devez disposer des autorisations nécessaires pour créer un jeton d’accès personnel GitHub disposant d’autorisations suffisantes. Pour plus d’informations, consultez Autorisations requises du jeton d’accès personnel GitHub.

    • Vous devez disposer des autorisations nécessaires pour valider dans la branche principale de votre référentiel GitHub pour valider le fichier YAML généré automatiquement.

  • Si votre code se trouve dans Azure Repos :

    • Vous devez disposer des autorisations en écriture dans votre abonnement.

    • Vous devez être l’administrateur de projet dans Azure DevOps.

Étapes suivantes