Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
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
Une organisation Azure DevOps. Si vous n’en avez pas, vous pouvez en créer un gratuitement. Si votre équipe en a déjà une, vérifiez que vous êtes bien un administrateur du projet Azure DevOps que vous souhaitez utiliser.
Possibilité d’exécuter des pipelines sur des agents hébergés par Microsoft. Vous pouvez acheter un travail parallèle ou demander un niveau gratuit.
Si vous prévoyez d’utiliser GitHub au lieu d’Azure Repos, vous avez également besoin d’un référentiel GitHub. Si vous ne possédez pas de compte GitHub, vous pouvez créer un compte gratuit.
Application de fonction existante dans Azure dont le code source se trouve dans un référentiel pris en charge. Si vous n’avez pas encore de projet de code Azure Functions, vous pouvez en créer un en suivant l’article spécifique au langage suivant :
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
- Connectez-vous à votre organisation Azure DevOps et accédez à votre projet.
- Dans votre projet, accédez à la page Pipelines. Choisissez ensuite l’action pour créer un pipeline.
- Suivez les étapes de l’Assistant en sélectionnant d’abord GitHub comme emplacement du code source.
- Vous serez peut-être redirigé vers GitHub pour vous connecter. Si c’est le cas, entrez vos informations d’identification GitHub.
- Lorsque la liste des dépôts s’affiche, sélectionnez votre dépôt d’exemples d’applications.
- 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.
- 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'
- Connectez-vous à votre organisation Azure DevOps et accédez à votre projet.
- Dans votre projet, accédez à la page Pipelines. Sélectionnez ensuite Nouveau pipeline.
- 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.
- Lorsque la liste des dépôts s’affiche, sélectionnez votre dépôt d’exemples d’applications.
- 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.
- Sélectionnez Enregistrer et exécuter, Valider directement sur la branche primaire, puis choisissez à nouveau Enregistrer et exécuter.
- 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
- Consultez la vue d’ensemble d’Azure Functions
- Consultez la vue d’ensemble d’Azure DevOps.