Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd Azure Pipelines för att automatiskt distribuera kodprojektet till en funktionsapp i Azure. Med Azure Pipelines kan du skapa, testa och distribuera med kontinuerlig integrering (CI) och kontinuerlig leverans (CD) med Hjälp av Azure DevOps.
YAML-pipelines definieras med hjälp av en YAML-fil på lagringsplatsen. Ett steg är det minsta byggblocket i en pipeline och kan vara ett skript eller en uppgift (förpaketerat skript). Lär dig mer om viktiga begrepp och komponenter som utgör en pipeline.
Du använder uppgiften AzureFunctionApp för att implementera din kod. Det finns nu två versioner av AzureFunctionApp, som jämförs i den här tabellen:
| Jämförelse/version | AzureFunctionApp@2 | AzureFunctionApp@1 | 
|---|---|---|
| Supporterar Flex Consumption plan | ✔ | ❌ | 
| Innehåller utökat valideringsstöd* | ✔ | ❌ | 
| När du ska använda... | Rekommenderas för nya appdistributioner | Underhålls för befintliga installationer | 
* Förbättrat valideringsstöd gör pipelines mindre benägna att misslyckas på grund av fel.
Välj din uppgiftsversion överst i artikeln.
Kommentar
Uppgradera från AzureFunctionApp@1 till AzureFunctionApp@2 för åtkomst till nya funktioner och långsiktig support.
Förutsättningar
- En Azure DevOps-organisation. Om du inte har någon sådan nu kan du skapa en kostnadsfritt. Om ditt team redan har ett kontrollerar du att du är administratör för det Azure DevOps-projekt som du vill använda. 
- En möjlighet att köra pipelines på Microsoft-värdbaserade agenter. Du kan antingen köpa ett parallellt jobb eller begära en kostnadsfri nivå. 
- Om du planerar att använda GitHub i stället för Azure Repos behöver du även en GitHub-lagringsplats. Om du inte har något GitHub-konto kan du skapa ett kostnadsfritt. 
- En befintlig funktionsapp i Azure som har sin källkod på en lagringsplats som stöds. Om du ännu inte har ett Azure Functions-kodprojekt kan du skapa ett genom att slutföra följande språkspecifika artikel: - Kom ihåg att ladda upp det lokala kodprojektet till din GitHub- eller Azure Repos-lagringsplats när du har publicerat det i funktionsappen. 
Skapa appen
- Logga in på din Azure DevOps-organisation och gå till projektet.
- I projektet navigerar du till sidan Pipelines . Välj sedan åtgärden för att skapa en ny pipeline.
- Gå igenom stegen i guiden genom att först välja GitHub som plats för källkoden.
- Du kan omdirigeras till GitHub för att logga in. I så fall anger du dina GitHub-autentiseringsuppgifter.
- När listan över lagringsplatser visas väljer du exempelapplagringsplatsen.
- Azure Pipelines analyserar lagringsplatsen och rekommenderar en mall. Välj Spara och kör, välj sedan Checka in direkt till huvudgrenen och välj sedan Spara och kör igen.
- En ny körning startas. Vänta tills körningen har slutförts.
Exempel på YAML-byggpipelines
Följande språkspecifika pipelines kan användas för att skapa appar.
Du kan använda följande exempel för att skapa en YAML-fil för att skapa en .NET-app:
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'
- Logga in på din Azure DevOps-organisation och gå till projektet.
- I projektet navigerar du till sidan Pipelines . Välj sedan Ny pipeline.
- Välj något av följande alternativ för Var är din kod?: - GitHub: Du kan omdirigeras till GitHub för att logga in. I så fall anger du dina GitHub-autentiseringsuppgifter. När den här anslutningen är din första GitHub-anslutning vägleder guiden dig också genom processen att ansluta DevOps till dina GitHub-konton.
- Azure Repos Git: Du kan omedelbart välja en lagringsplats i ditt aktuella DevOps-projekt.
 
- När listan över lagringsplatser visas väljer du exempelapplagringsplatsen.
- Azure Pipelines analyserar lagringsplatsen och i Konfigurera din pipeline finns en lista över potentiella mallar. Välj lämplig funktionsappmall för ditt språk. Om du inte ser rätt mall väljer du Visa mer.
- Välj Spara och kör, välj sedan Checka in direkt till huvudgrenen och välj sedan Spara och kör igen.
- En ny körning startas. Vänta tills körningen har slutförts.
Exempel på YAML-byggpipelines
Följande språkspecifika pipelines kan användas för att skapa appar.
Du kan använda följande exempel för att skapa en YAML-fil för att skapa en .NET-app.
Om du ser fel när du skapar din app kontrollerar du att den version av .NET som du använder matchar din Azure Functions-version. Mer information finns i Översikt över Azure Functions-körningsversioner.
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'
Distribuera din app
Du distribuerar med Azure Function App Deploy v2-uppgiften . Den här uppgiften kräver en Azure-tjänstanslutning som indata. En Azure-tjänstanslutning lagrar autentiseringsuppgifterna för att ansluta från Azure Pipelines till Azure. Du bör skapa en anslutning som använder arbetsbelastningsidentitetsfederation.
Om du vill distribuera till Azure Functions lägger du till det här kodfragmentet i slutet av azure-pipelines.yml filen, beroende på om appen körs i Linux eller 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>'
Standardvärdet appType är Windows (functionApp). Du kan ange Linux genom att ange appType till functionAppLinux. En Flex Consumption-app körs på Linux och du måste ange både appType: functionAppLinux och isFlexConsumption: true.
Kodfragmentet förutsätter att byggstegen i YAML-filen skapar zip-arkivet $(System.ArtifactsDirectory) i mappen på din agent.
Du distribuerar med hjälp av Azure Function App Deploy-uppgiften. Den här uppgiften kräver en Azure-tjänstanslutning som indata. En Azure-tjänstanslutning lagrar autentiseringsuppgifterna för att ansluta från Azure Pipelines till Azure.
Viktigt!
Distribution till en Flex Consumption-app stöds inte med hjälp @v1 av AzureFunctionApp uppgiften.
Om du vill distribuera till Azure Functions lägger du till det här kodfragmentet i slutet av azure-pipelines.yml filen:
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
Detta kodfragment ställer in appType till functionAppLinux, vilket krävs när du distribuerar till en app som körs på Linux. Standardvärdet appType är Windows (functionApp).
Exemplet förutsätter att byggstegen i YAML-filen skapar zip-arkivet $(System.ArtifactsDirectory) i mappen på din agent.
Distribuera en container
Tips/Råd
Vi rekommenderar att du använder Azure Functions-stöd i Azure Container Apps för att vara värd för din funktionsapp i en anpassad Linux-container. Mer information finns i Översikt över Azure Functions i Azure Container Apps.
När du distribuerar en containerbaserad funktionsapp beror distributionsuppgiften som du använder på den specifika värdmiljön.
Du kan använda Azure Container Apps Deploy-uppgiften (AzureContainerApps) för att distribuera en funktionsappavbildning till en Azure Container App-instans som är optimerad för Azure Functions.
Den här koden distribuerar basavbildningen för en funktionsapp för .NET 8-isolerad processmodell:
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>
Vi rekommenderar att du skapar en egen anpassad container i pipelinen i stället för att använda en basavbildning, som du ser i det här exemplet. Mer information finns i Distribuera till Azure Container Apps från Azure Pipelines.
Distribuera till ett fack
Viktigt!
Flex Consumption-planen stöder för närvarande inte fack. Linux-appar stöder inte heller slots när de körs i en Consumption Plan, och stödet för dessa appar kommer att avvecklas i framtiden.
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>'
Du kan konfigurera funktionsappen så att den har flera platser. Med fack kan du distribuera din app på ett säkert sätt och testa den innan du gör den tillgänglig för dina kunder.
Följande YAML-kodfragment visar hur du distribuerar till ett mellanlagringsfack och sedan byter till en produktionsplats:
- 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
När du använder distributionsfack kan du också lägga till följande uppgift för att utföra ett fackbyte som en del av distributionen.
- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: <AZURE_SERVICE_CONNECTION>
    WebAppName: <APP_NAME>
    ResourceGroupName: <RESOURCE_GROUP>
    SourceSlot: <SLOT_NAME>
    SwapWithProduction: true
Skapa en pipeline med Azure CLI
Använd kommandot för az functionapp devops-pipeline createatt skapa en byggpipeline i Azure. Bygg-pipelinen skapas för att skapa och släppa eventuella kodändringar som görs på lagringsplatsen. Kommandot genererar en ny YAML-fil som definierar bygg- och versionspipelinen och sedan checkar in den på lagringsplatsen. Förutsättningarna för det här kommandot beror på kodens plats.
- Om koden finns i GitHub: - Du måste ha skrivbehörighet för din prenumeration. 
- Du måste vara projektadministratör i Azure DevOps. 
- Du måste ha behörighet att skapa en personlig Åtkomsttoken för GitHub (PAT) som har tillräcklig behörighet. Mer information finns i Behörighetskrav för GitHub PAT. 
- Du måste ha behörighet att checka in till huvudgrenen på din GitHub-lagringsplats så att du kan checka in den automatiskt genererade YAML-filen. 
 
- Om koden finns i Azure Repos: - Du måste ha skrivbehörighet för din prenumeration. 
- Du måste vara projektadministratör i Azure DevOps.