Folyamatos teljesítés az Azure Pipelines-szal
Az Azure Pipelines használatával automatikusan üzembe helyezheti az Azure Functionst. Az Azure Pipelines lehetővé teszi a folyamatos integráció (CI) és a folyamatos teljesítés (CD) használatával történő buildelést, tesztelést és üzembe helyezést az Azure DevOps használatával.
A YAML-folyamatok egy YAML-fájllal vannak definiálva az adattárban. A lépés a folyamat legkisebb építőeleme, amely lehet szkript vagy feladat (előre csomagolt szkript). Ismerje meg a folyamatokat alkotó legfontosabb fogalmakat és összetevőket.
Ezt a feladatot fogja használni az AzureFunctionApp
Azure Functionsben való üzembe helyezéshez. Az AzureFunctionApp-feladatnak már két verziója van (AzureFunctionApp@1, AzureFunctionApp@2). AzureFunctionApp@2
továbbfejlesztett érvényesítési támogatást tartalmaz, amely miatt a folyamatok kisebb valószínűséggel hiúsulnak meg a hibák miatt.
Válassza ki a feladat verzióját a cikk tetején. A YAML-folyamatok nem érhetők el az Azure DevOps 2019-es és korábbi verzióihoz.
Előfeltételek
Egy Azure DevOps-szervezet. Ha még nem rendelkezik fiókkal, ingyen létrehozhat egyet. Ha a csapatának már van ilyenje, győződjön meg arról, hogy Ön a használni kívánt Azure DevOps-projekt rendszergazdája.
Folyamatok futtatásának lehetősége a Microsoft által üzemeltetett ügynökökön. Vásárolhat párhuzamos feladatot , vagy ingyenes szintet kérhet.
Ha az Azure-adattárak helyett a GitHubot szeretné használni, szüksége lesz egy GitHub-adattárra is. Ha nincs GitHub-fiókja, ingyenesen létrehozhat egyet.
Egy meglévő függvényalkalmazás az Azure-ban, amelynek forráskódja egy támogatott adattárban található. Ha még nem rendelkezik Azure Functions-kódprojektel, az alábbi nyelvspecifikus cikk végrehajtásával hozhat létre egyet:
Ne felejtse el feltölteni a helyi kódprojektet a GitHubra vagy az Azure Repos-adattárba, miután közzétette azt a függvényalkalmazásban.
Az alkalmazás fordítása
- Jelentkezzen be az Azure DevOps-szervezetbe, és lépjen a projekthez.
- A projektben lépjen a Folyamatok lapra. Ezután válassza az Új folyamat lehetőséget.
- Válassza ki az alábbi lehetőségek közül a Hol található a kód?:
- GitHub: Előfordulhat, hogy a rendszer átirányítja a GitHubra a bejelentkezéshez. Ha igen, adja meg a GitHub hitelesítő adatait. Ha ez a kapcsolat az első GitHub-kapcsolat, a varázsló végigvezeti a DevOps GitHub-fiókokhoz való csatlakoztatásának folyamatán.
- Azure Repos Git: Azonnal kiválaszthat egy adattárat a jelenlegi DevOps-projektben.
- Amikor megjelenik az adattárak listája, válassza ki a mintaalkalmazás-adattárat.
- Az Azure Pipelines elemzi az adattárat, a Folyamat konfigurálása területen pedig a lehetséges sablonok listáját találja. Válassza ki a nyelvéhez megfelelő függvényalkalmazás-sablont . Ha nem látja a megfelelő sablont, válassza a Továbbiak megjelenítése lehetőséget.
- Válassza a Mentés és futtatás lehetőséget, majd válassza a Véglegesítés lehetőséget közvetlenül a főágra, majd válassza a Mentés és futtatás lehetőséget.
- Új futtatás indul el. Várja meg, amíg a futtatás befejeződik.
Példa YAML-buildfolyamatokra
Az alkalmazások létrehozásához az alábbi nyelvspecifikus folyamatok használhatók.
Az alábbi minta segítségével létrehozhat egy YAML-fájlt egy .NET-alkalmazás létrehozásához.
Ha az alkalmazás létrehozásakor hibaüzenet jelenik meg, ellenőrizze, hogy a használt .NET-verzió megegyezik-e az Azure Functions verziójával. További információkért tekintse meg az Azure Functions futtatókörnyezeti verzióinak áttekintését.
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'
Az alkalmazás üzembe helyezése
Az Azure-függvényalkalmazás üzembe helyezési feladatával fog üzembe helyezni. Ehhez a feladathoz bemenetként Azure-szolgáltatáskapcsolat szükséges. Egy Azure-szolgáltatáskapcsolat tárolja az Azure Pipelinesból az Azure-ba való csatlakozáshoz szükséges hitelesítő adatokat.
Az Azure Functionsben való üzembe helyezéshez adja hozzá a következő kódrészletet a azure-pipelines.yml
fájl végén. Az alapértelmezett appType
a Windows. A Linuxot a következőre állítva appType
functionAppLinux
adhatja meg. Az AzureFunctionApp-feladat nem támogatja a rugalmas használatú @v1 alkalmazásokban való üzembe helyezést.
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>'
A kódrészlet feltételezi, hogy a YAML-fájl buildelési lépései létrehozták a zip archívumot az $(System.ArtifactsDirectory)
ügynök mappájában.
Tároló üzembe helyezése
Minden sikeres buildelés után automatikusan üzembe helyezheti a kódot tárolóalapú függvényalkalmazásként. A tárolókról további információt a tárolók és az Azure Functions használata című témakörben talál.
A tárolón való üzembe helyezés legegyszerűbb módja az Azure Function App on Container Deploy feladat használata.
Az üzembe helyezéshez adja hozzá a következő kódrészletet a YAML-fájl végén:
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)
A kódrészlet leküldi a Docker-rendszerképet az Azure Container Registrybe. Az Azure Function App on Container Deploy feladat lekéri a megadott adattárnak megfelelő BuildId
Docker-rendszerképet, majd telepíti a lemezképet.
A teljes körű folyamatra vonatkozó példa, beleértve a tároló kiépítését és a tárolóregisztrációs adatbázisban való közzétételt, tekintse meg ezt az Azure Pipelines-tároló üzembehelyezési példáját.
Üzembe helyezés egy ponton
A függvényalkalmazást több tárolóhelyre is konfigurálhatja. A pontok lehetővé teszik az alkalmazás biztonságos üzembe helyezését és tesztelését, mielőtt elérhetővé tenné az ügyfelek számára.
Az alábbi YAML-kódrészlet bemutatja, hogyan lehet üzembe helyezni egy előkészítési ponton, majd felcserélni egy éles pontra:
- 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
Folyamat létrehozása az Azure CLI-vel
Buildelési folyamat azure-beli létrehozásához használja a az functionapp devops-pipeline create
parancsot. A buildelési folyamat az adattárban végrehajtott kódmódosítások létrehozásához és kiadásához jön létre. A parancs létrehoz egy új YAML-fájlt, amely meghatározza a buildelési és kiadási folyamatot, majd véglegesíti azt az adattárban. A parancs előfeltételei a kód helyétől függenek.
Ha a kód a GitHubon található:
Az előfizetéshez írási engedélyekkel kell rendelkeznie.
Az Azure DevOps projektadminisztrátorának kell lennie.
Rendelkeznie kell a megfelelő engedélyekkel rendelkező GitHub személyes hozzáférési jogkivonat (PAT) létrehozásához szükséges engedélyekkel. További információ: GitHub PAT engedélykövetelményei.
A GitHub-adattár fő ágának véglegesítéséhez engedélyekkel kell rendelkeznie az automatikusan létrehozott YAML-fájl véglegesítéséhez.
Ha a kód az Azure-adattárakban található:
Az előfizetéshez írási engedélyekkel kell rendelkeznie.
Az Azure DevOps projektadminisztrátorának kell lennie.
Az alkalmazás fordítása
- Jelentkezzen be az Azure DevOps-szervezetbe, és lépjen a projekthez.
- A projektben lépjen a Folyamatok lapra. Ezután válassza ki a műveletet egy új folyamat létrehozásához.
- A varázsló lépéseit végigvezetve először válassza ki a GitHubot a forráskód helyeként.
- Előfordulhat, hogy a rendszer átirányítja a GitHubra a bejelentkezéshez. Ha igen, adja meg a GitHub hitelesítő adatait.
- Amikor megjelenik az adattárak listája, válassza ki a mintaalkalmazás-adattárat.
- Az Azure Pipelines elemzi az adattárat, és sablont javasol. Válassza a Mentés és futtatás lehetőséget, majd válassza a Véglegesítés lehetőséget közvetlenül a főágra, majd válassza a Mentés és futtatás lehetőséget.
- Új futtatás indul el. Várja meg, amíg a futtatás befejeződik.
Példa YAML-buildfolyamatokra
Az alkalmazások létrehozásához az alábbi nyelvspecifikus folyamatok használhatók.
A következő mintával létrehozhat egy YAML-fájlt egy .NET-alkalmazás létrehozásához:
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'
Az alkalmazás üzembe helyezése
Az Azure Function App Deploy v2 feladattal fog üzembe helyezni. Ehhez a feladathoz bemenetként Azure-szolgáltatáskapcsolat szükséges. Egy Azure-szolgáltatáskapcsolat tárolja az Azure Pipelinesból az Azure-ba való csatlakozáshoz szükséges hitelesítő adatokat. Olyan kapcsolatot kell létrehoznia, amely számítási feladatok identitás-összevonását használja.
A feladat v2-es verziója támogatja a .NET, a Python és a Node újabb alkalmazásveremeit. A feladat magában foglalja a hálózatkezelési előzetes üzembe helyezési ellenőrzéseket. Ha előre üzembe helyezési problémák merülnek fel, az üzembe helyezés leáll.
Az Azure Functionsben való üzembe helyezéshez adja hozzá a következő kódrészletet a azure-pipelines.yml
fájl végén. Az alapértelmezett appType
a Windows. A Linuxot a következőre állítva appType
functionAppLinux
adhatja meg. A Rugalmas kihasználtságú alkalmazásokban való üzembe helyezéshez be kell állítania mind appType: functionAppLinux
a 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>'
Következő lépések
- Tekintse át az Azure Functions áttekintését.
- Tekintse át az Azure DevOps áttekintését.