Konfigurera kontinuerlig leverans med Azure Pipelines
Använd Azure Pipelines för att distribuera automatiskt till Azure Functions. 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 distribuera till Azure Functions. Det finns nu två versioner av AzureFunctionApp-aktiviteten (AzureFunctionApp@1, AzureFunctionApp@2). AzureFunctionApp@2
innehåller förbättrat valideringsstöd som gör pipelines mindre benägna att misslyckas på grund av fel.
Välj din uppgiftsversion överst i artikeln. YAML-pipelines är inte tillgängliga för Azure DevOps 2019 och tidigare.
Kommentar
AzureFunctionApp@2 rekommenderas starkt. Distribution till en app i Flex Consumption-planen stöds endast i version 2.
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 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:
- script: |
dotnet restore
dotnet build --configuration Release
- task: DotNetCoreCLI@2
inputs:
command: publish
arguments: '--configuration Release --output publish_output'
projects: '*.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-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.
Om du vill distribuera till Azure Functions lägger du till följande kodfragment i slutet av azure-pipelines.yml
filen. Standardvärdet appType
är Windows. Du kan ange Linux genom att ange appType
till functionAppLinux
. Distribution till en Flex Consumption-app stöds inte med @v1 AzureFunctionApp-uppgiften.
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: AzureFunctionApp@1 # Add this at the end of your file
inputs:
azureSubscription: <Azure service connection>
appType: functionAppLinux # default is functionApp
appName: $(appName)
package: $(System.ArtifactsDirectory)/**/*.zip
#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 Name>'
#slotName: '<Slot name>'
Kodfragmentet förutsätter att byggstegen i YAML-filen skapar zip-arkivet $(System.ArtifactsDirectory)
i mappen på din agent.
Distribuera en container
Du kan automatiskt distribuera koden som en containerbaserad funktionsapp efter varje lyckad version. Mer information om containrar finns i Arbeta med containrar och Azure Functions.
Det enklaste sättet att distribuera till en container är att använda azure-funktionsappen i containerdistributionsuppgiften.
Om du vill distribuera lägger du till följande kodfragment i slutet av YAML-filen:
trigger:
- main
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: <Docker registry service connection>
imageRepository: <Name of your image repository>
containerRegistry: <Name of the Azure container registry>
dockerfilePath: '$(Build.SourcesDirectory)/Dockerfile'
tag: '$(Build.BuildId)'
# Agent VM image name
vmImageName: 'ubuntu-latest'
- task: AzureFunctionAppContainer@1 # Add this at the end of your file
inputs:
azureSubscription: '<Azure service connection>'
appName: '<Name of the function app>'
imageName: $(containerRegistry)/$(imageRepository):$(tag)
Kodfragmentet skickar Docker-avbildningen till Azure Container Registry. Azure Function App on Container Deploy-uppgiften hämtar lämplig Docker-avbildning som motsvarar BuildId
från den angivna lagringsplatsen och distribuerar sedan avbildningen.
Ett fullständigt exempel på en pipeline från slutpunkt till slutpunkt, inklusive att skapa containern och publicera till containerregistret, finns i det här exemplet på distribution av Azure Pipelines-container.
Distribuera till ett fack
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
Skapa en pipeline med Azure CLI
Använd kommandot för az functionapp devops-pipeline create
att 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.
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:
- script: |
dotnet restore
dotnet build --configuration Release
- task: DotNetCoreCLI@2
inputs:
command: publish
arguments: '--configuration Release --output publish_output'
projects: '*.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.
V2-versionen av uppgiften innehåller stöd för nyare programstackar för .NET, Python och Node. Uppgiften innehåller nätverksfördistributionskontroller. När det finns problem med fördistributionen stoppas distributionen.
Om du vill distribuera till Azure Functions lägger du till följande kodfragment i slutet av azure-pipelines.yml
filen. Standardvärdet appType
är Windows. Du kan ange Linux genom att ange appType
till functionAppLinux
. När du distribuerar till en Flex Consumption-app måste du ange både appType: functionAppLinux
och isFlexConsumption: true
.
trigger:
- main
variables:
# Azure service connection established during pipeline creation
azureSubscription: <SUBSCRIPTION_NAME>
appName: <APP_NAME>
# Agent VM image name
vmImageName: 'windows-latest'
- task: AzureFunctionApp@2 # Add this at the end of your file
inputs:
azureSubscription: <AZURE_SERVICE_CONNECTION>
appType: functionApp # this specifies a Windows-based function app
appName: $(appName)
package: $(System.ArtifactsDirectory)/**/*.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>'