Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Gebruik Azure Pipelines om uw codeproject automatisch te implementeren in een functie-app in Azure. Met Azure Pipelines kunt u met behulp van Azure DevOps bouwen, testen en implementeren met continue integratie (CI) en continue levering (CD).
YAML-pijplijnen worden gedefinieerd met behulp van een YAML-bestand in uw opslagplaats. Een stap is de kleinste bouwsteen van een pijplijn en kan een script of taak (vooraf verpakt script) zijn. Meer informatie over de belangrijkste concepten en onderdelen waaruit een pijplijn bestaat.
U gebruikt de AzureFunctionApp taak om uw code te implementeren. Er zijn nu twee versies van AzureFunctionApp, die in deze tabel worden vergeleken:
| Vergelijking/versie | AzureFunctionApp@2 | AzureFunctionApp@1 | 
|---|---|---|
| Ondersteunt het Flex Consumption-abonnement | ✔ | ❌ | 
| Bevat verbeterde validatieondersteuning* | ✔ | ❌ | 
| Wanneer gebruikt u... | Aanbevolen voor nieuwe app-implementaties | Onderhouden voor verouderde implementaties | 
* Verbeterde validatieondersteuning zorgt ervoor dat pijplijnen minder waarschijnlijk mislukken vanwege fouten.
Kies uw taakversie bovenaan het artikel.
Notitie
Upgrade van AzureFunctionApp@1 naar AzureFunctionApp@2 voor toegang tot nieuwe functies en langetermijnondersteuning.
Vereisten
- een Azure DevOps-organisatie. Als u geen account hebt, kunt u er gratis een maken. Als uw team er al een heeft, controleert u of u een beheerder bent van het Azure DevOps-project dat u wilt gebruiken. 
- Een mogelijkheid om pijplijnen uit te voeren op door Microsoft gehoste agents. U kunt een parallelle taak aanschaffen of u kunt een gratis laag aanvragen. 
- Als u Van plan bent GitHub te gebruiken in plaats van Azure-opslagplaatsen, hebt u ook een GitHub-opslagplaats nodig. Als u geen GitHub-account hebt, kunt u er gratis een maken. 
- Een bestaande functie-app in Azure met de broncode in een ondersteunde opslagplaats. Als u nog geen Azure Functions-codeproject hebt, kunt u er een maken door het volgende taalspecifieke artikel te voltooien: 
Vergeet niet om het lokale codeproject te uploaden naar uw GitHub- of Azure-opslagplaats nadat u het naar uw functie-app hebt gepubliceerd.
Uw app compileren
- Meld u aan bij uw Azure DevOps-organisatie en navigeer naar uw project.
- Navigeer in het project naar de pagina Pijplijnen. Kies vervolgens de actie om een nieuwe pijplijn te maken.
- Doorloop de stappen van de wizard door eerst GitHub te selecteren als de locatie van de broncode.
- U wordt mogelijk omgeleid naar GitHub om u aan te melden. Voer in dat geval uw GitHub-referenties in.
- Wanneer de lijst met opslagplaatsen wordt weergegeven, selecteert u de voorbeeld-app-opslagplaats.
- Azure Pipelines analyseert uw opslagplaats en raadt een sjabloon aan. Selecteer Opslaan en uitvoeren, selecteer vervolgens Rechtstreeks doorvoeren naar de hoofdbranch, en kies ten slotte opnieuw Opslaan en uitvoeren.
- Er wordt een nieuwe run gestart. Wacht totdat de uitvoering is voltooid.
Voorbeelden van YAML-buildpijplijnen
De volgende taalspecifieke pijplijnen kunnen worden gebruikt voor het bouwen van apps.
U kunt het volgende voorbeeld gebruiken om een YAML-bestand te maken om een .NET-app te bouwen:
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'
- Meld u aan bij uw Azure DevOps-organisatie en navigeer naar uw project.
- Navigeer in het project naar de pagina Pijplijnen. Selecteer vervolgens Nieuwe pijplijn.
- Selecteer een van deze opties voor Waar is uw code?: - GitHub: U wordt mogelijk omgeleid naar GitHub om u aan te melden. Voer in dat geval uw GitHub-referenties in. Wanneer deze verbinding uw eerste GitHub-verbinding is, begeleidt de wizard u ook bij het verbinden van DevOps met uw GitHub-accounts.
- Git voor Azure-opslagplaatsen: u kunt direct een opslagplaats kiezen in uw huidige DevOps-project.
 
- Wanneer de lijst met opslagplaatsen wordt weergegeven, selecteert u de voorbeeld-app-opslagplaats.
- Azure Pipelines analyseert uw opslagplaats en in Uw pijplijn configureren bevat een lijst met mogelijke sjablonen. Kies de juiste sjabloon voor de functie-app voor uw taal. Als u de juiste sjabloon niet ziet, selecteert u Meer weergeven.
- Selecteer Opslaan en uitvoeren, selecteer vervolgens Rechtstreeks doorvoeren naar de hoofdbranch, en kies ten slotte opnieuw Opslaan en uitvoeren.
- Er wordt een nieuwe run gestart. Wacht totdat de uitvoering is voltooid.
Voorbeelden van YAML-buildpijplijnen
De volgende taalspecifieke pijplijnen kunnen worden gebruikt voor het bouwen van apps.
U kunt het volgende voorbeeld gebruiken om een YAML-bestand te maken om een .NET-app te bouwen.
Als er fouten optreden bij het bouwen van uw app, controleert u of de versie van .NET die u gebruikt overeenkomt met uw Azure Functions-versie. Raadpleeg Overzicht van Azure Functions-runtime voor meer informatie.
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'
Uw app implementeren
U implementeert met de Azure Function App Deploy v2-taak . Voor deze taak is een Azure-serviceverbinding als invoer vereist. Met een Azure-serviceverbinding worden de referenties opgeslagen om vanuit Azure Pipelines verbinding te maken met Azure. U moet een verbinding maken die gebruikmaakt van federatie van workloadidentiteit.
Als u wilt implementeren in Azure Functions, voegt u dit codefragment toe aan het einde van uw azure-pipelines.yml bestand, afhankelijk van of uw app wordt uitgevoerd in Linux of 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>'
De standaardwaarde appType is Windows (functionApp). U kunt Linux opgeven door het appType in te stellen op functionAppLinux. Een Flex Consumption-app wordt uitgevoerd op Linux, en u moet beide appType: functionAppLinux en isFlexConsumption: true instellen.
In het fragment wordt ervan uitgegaan dat de buildstappen in uw YAML-bestand het zip-archief produceren in de $(System.ArtifactsDirectory) map op uw agent.
U implementeert met behulp van de Azure Function App Deploy-taak . Voor deze taak is een Azure-serviceverbinding als invoer vereist. Met een Azure-serviceverbinding worden de referenties opgeslagen om vanuit Azure Pipelines verbinding te maken met Azure.
Belangrijk
Implementeren in een Flex Consumption-app wordt niet ondersteund met behulp @v1 van de AzureFunctionApp taak.
Als u wilt implementeren in Azure Functions, voegt u dit fragment toe aan het einde van uw azure-pipelines.yml bestand:
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
Dit codefragment stelt het appType in op functionAppLinux, wat vereist is bij het implementeren naar een app die wordt uitgevoerd op Linux. De standaardwaarde appType is Windows (functionApp).
In het voorbeeld wordt ervan uitgegaan dat de buildstappen in uw YAML-bestand het zip-archief produceren in de $(System.ArtifactsDirectory) map op uw agent.
Een container implementeren
Aanbeveling
U wordt aangeraden de ondersteuning van Azure Functions in Azure Container Apps te gebruiken voor het hosten van uw functie-app in een aangepaste Linux-container. Zie het overzicht van Azure Functions in Azure Container Apps voor meer informatie.
Bij het implementeren van een containerfunctie-app is de implementatietaak die u gebruikt, afhankelijk van de specifieke hostingomgeving.
U kunt de Azure Container Apps Deploy-taak (AzureContainerApps) gebruiken om een image van een functie-app te implementeren in een Azure Container App-exemplaar dat geoptimaliseerd is voor Azure Functions.
Deze code implementeert de basisafbeelding voor een .NET 8 geïsoleerd procesmodel voor een functieapplicatie:
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>
Ideaal gezien bouwt u uw eigen aangepaste container in de pijplijn in plaats van een basisafbeelding te gebruiken. Zie Implementeren in Azure Container Apps vanuit Azure Pipelines voor meer informatie.
Implementeren in een site
Belangrijk
Het Flex Consumption-abonnement biedt momenteel geen ondersteuning voor slots. Linux-apps bieden ook geen ondersteuning voor slots wanneer ze worden uitgevoerd in een verbruiksabonnement en de ondersteuning voor deze apps wordt in de toekomst stopgezet.
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>'
U kunt uw functie-app zo configureren dat er meerdere sites zijn. Met sites kunt u uw app veilig implementeren en testen voordat u deze beschikbaar maakt voor uw klanten.
In het volgende YAML-fragment ziet u hoe u implementeert in een staging-site en vervolgens wisselt naar een productiesite:
- 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
Wanneer u implementatiesleuven gebruikt, kunt u ook de volgende taak toevoegen om een sleuverwisseling uit te voeren als onderdeel van uw implementatie.
- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: <AZURE_SERVICE_CONNECTION>
    WebAppName: <APP_NAME>
    ResourceGroupName: <RESOURCE_GROUP>
    SourceSlot: <SLOT_NAME>
    SwapWithProduction: true
Een pijplijn maken met Azure CLI
Gebruik de az functionapp devops-pipeline createopdracht om een build-pijplijn te maken in Azure. De build-pijplijn wordt gemaakt om codewijzigingen te bouwen en vrij te geven die in uw opslagplaats worden aangebracht. Met de opdracht wordt een nieuw YAML-bestand gegenereerd dat de build- en release-pijplijn definieert en het vervolgens doorvoert naar uw opslagplaats. De vereisten voor deze opdracht zijn afhankelijk van de locatie van uw code.
- Als uw code zich in GitHub bevindt: - U moet schrijfmachtigingen hebben voor uw abonnement. 
- U moet de projectbeheerder zijn in Azure DevOps. 
- U moet beschikken over machtigingen om een persoonlijk GitHub-toegangstoken (PAT) te maken met voldoende machtigingen. Zie de machtigingsvereisten voor GitHub PAT voor meer informatie. 
- U moet machtigingen hebben om door te voeren naar de hoofdbranch in uw GitHub-opslagplaats, zodat u het automatisch gegenereerde YAML-bestand kunt doorvoeren. 
 
- Als uw code zich in Azure-opslagplaatsen bevindt: - U moet schrijfmachtigingen hebben voor uw abonnement. 
- U moet de projectbeheerder zijn in Azure DevOps.