Üzembe helyezés az App Service-ben az Azure Pipelines segítségével
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
Feljegyzés
2024. június 1-től az összes újonnan létrehozott App Service-alkalmazás létrehozhat egy egyedi alapértelmezett gazdagépnevet az elnevezési konvencióval <app-name>-<random-hash>.<region>.azurewebsites.net
. A meglévő alkalmazásnevek változatlanok maradnak.
Példa: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
További részletekért tekintse meg az App Service-erőforrás egyedi alapértelmezett gazdagépnevét.
Az Azure Pipelines használatával automatikusan üzembe helyezheti a webalkalmazást Azure-alkalmazás Service-ben minden sikeres builden. 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.
Az Azure Web App-feladat (AzureWebApp
) használatával üzembe helyezheti Azure-alkalmazás szolgáltatásban a folyamatban. Bonyolultabb forgatókönyvek esetén, például ha XML-paramétereket kell használnia az üzembe helyezés során, használhatja a Azure-alkalmazás szolgáltatás üzembe helyezési feladatát (AzureRmWebAppDeployment) is.
Előfeltételek
- Egy Azure-fiók, aktív előfizetéssel. Fiók ingyenes létrehozása.
- Egy Azure DevOps-szervezet. Hozzon létre egyet ingyen.
- 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.
- Egy működő Azure-alkalmazás Service-alkalmazás a GitHubon vagy az Azure Reposon üzemeltetett kóddal.
- .NET: ASP.NET Core-webalkalmazás létrehozása az Azure-ban
- ASP.NET: ASP.NET-keretrendszer webalkalmazás létrehozása az Azure-ban
- JavaScript: Node.js webalkalmazás létrehozása a Azure-alkalmazás Szolgáltatásban
- Java: Java-alkalmazás létrehozása Azure-alkalmazás szolgáltatásban
- Python: Python-alkalmazás létrehozása a Azure-alkalmazás Szolgáltatásban
1. Folyamat létrehozása a veremhez
Az ebben a szakaszban szereplő példakód azt feltételezi, hogy egy ASP.NET webalkalmazást helyez üzembe. Más keretrendszerek utasításait is módosíthatja.
További információ az Azure Pipelines ökoszisztéma támogatásáról.
Jelentkezzen be az Azure DevOps-szervezetbe, és lépjen a projekthez.
Lépjen a Folyamatok elemre, majd válassza az Új folyamat lehetőséget.
Amikor a rendszer kéri, válassza ki a forráskód helyét: az Azure Repos Git vagy a GitHub.
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 az adattárat.
Előfordulhat, hogy a Rendszer átirányítja a GitHubra az Azure Pipelines alkalmazás telepítéséhez. Ha igen, válassza a Jóváhagyás > telepítés lehetőséget.
Amikor megjelenik a Konfigurálás lap, válassza a ASP.NET Core lehetőséget.
Amikor megjelenik az új folyamat, tekintse meg a YAML-et, hogy lássa, mit csinál. Ha elkészült, válassza a Mentés és futtatás lehetőséget.
2. Az üzembe helyezési feladat hozzáadása
Kattintson a YAML-fájl végére, majd válassza az Asszisztens megjelenítése lehetőséget."
Az Azure Web App-feladat hozzáadásához használja a Feladat segédet.
Másik lehetőségként hozzáadhatja a Azure-alkalmazás service deploy (AzureRmWebAppDeployment) feladatot.
Válassza ki az Azure-előfizetését. Győződjön meg arról, hogy engedélyezi a kapcsolatot. Az engedélyezés létrehozza a szükséges szolgáltatáskapcsolatot.
Az App Service-alkalmazás alapján válassza ki az alkalmazástípust, az alkalmazásnevet és a futtatókörnyezeti vermet. A teljes YAML-nek az alábbi kódhoz hasonlóan kell kinéznie.
variables: buildConfiguration: 'Release' steps: - task: DotNetCoreCLI@2 inputs: command: 'publish' publishWebProjects: true - task: AzureWebApp@1 inputs: azureSubscription: '<service-connection-name>' appType: 'webAppLinux' appName: '<app-name>' package: '$(System.DefaultWorkingDirectory)/**/*.zip'
- azureSubscription: Az Azure-előfizetéshez engedélyezett szolgáltatáskapcsolat neve.
- appName: A meglévő alkalmazás neve.
- csomag: A csomag vagy az App Service tartalmát tartalmazó mappa elérési útja. A helyettesítő karakterek támogatottak.
Példa: .NET-alkalmazás üzembe helyezése
Ha egy .zip-webcsomagot (például egy ASP.NET-webalkalmazásból) szeretne üzembe helyezni egy Azure-webalkalmazásban, az alábbi kódrészlet használatával helyezze üzembe a buildet egy alkalmazásban.
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: 'webAppLinux'
appName: '<app-name>'
package: '$(System.DefaultWorkingDirectory)/**/*.zip'
- azureSubscription: az Azure-előfizetése.
- appType: a webalkalmazás típusa.
- appName: a meglévő app service neve.
- csomag: a csomag vagy az App Service tartalmát tartalmazó mappa elérési útja. A helyettesítő karakterek támogatottak.
Példa: üzembe helyezés virtuális alkalmazásban
Alapértelmezés szerint az üzembe helyezés az Azure Web App gyökéralkalmazásával történik. Egy adott virtuális alkalmazásba a Azure-alkalmazás szolgáltatás üzembe helyezési (AzureRmWebAppDeployment
) feladatának tulajdonságával VirtualApplication
helyezhet üzembe:
- task: AzureRmWebAppDeployment@4
inputs:
VirtualApplication: '<name of virtual application>'
- VirtualApplication: az Azure Portalon konfigurált virtuális alkalmazás neve. További információ: App Service-alkalmazás konfigurálása az Azure Portalon .
Példa: Üzembe helyezés egy ponton
Az alábbi példa bemutatja, hogyan lehet üzembe helyezni egy átmeneti ponton, majd felcserélni egy éles pontra:
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: webAppLinux
appName: '<app-name>'
deployToSlotOrASE: true
resourceGroupName: '<name of resource group>'
slotName: staging
package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
- task: AzureAppServiceManage@0
inputs:
azureSubscription: '<service-connection-name>'
appType: webAppLinux
WebAppName: '<app-name>'
ResourceGroupName: '<name of resource group>'
SourceSlot: staging
SwapWithProduction: true
- azureSubscription: az Azure-előfizetése.
- appType: (nem kötelező) A linuxos webalkalmazásban való üzembe helyezéshez használható
webAppLinux
. - appName: a meglévő app service neve.
- deployToSlotOrASE: Logikai. Üzembe helyezés meglévő üzembehelyezési ponton vagy Azure-alkalmazás szolgáltatáskörnyezetben.
- resourceGroupName: Az erőforráscsoport neve. Ha igaz, kötelező
deployToSlotOrASE
megadni. - slotName: A pont neve, amely alapértelmezés szerint a
production
. Ha igaz, köteleződeployToSlotOrASE
megadni. - csomag: a csomag vagy az App Service tartalmát tartalmazó mappa elérési útja. A helyettesítő karakterek támogatottak.
- SourceSlot: Az éles környezetbe küldött pont, ha
SwapWithProduction
igaz. - SwapWithProduction: Logikai. Cserélje le a forráshely forgalmát az éles környezettel.
Példa: Üzembe helyezés több webalkalmazásban
A YAML-fájlban lévő feladatok használatával üzembe helyezési folyamatokat állíthat be. A feladatok használatával több webalkalmazás üzembe helyezésének sorrendjét is szabályozhatja.
jobs:
- job: buildandtest
pool:
vmImage: ubuntu-latest
steps:
# publish an artifact called drop
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.ArtifactStagingDirectory)'
artifactName: drop
# deploy to Azure Web App staging
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: <app type>
appName: '<staging-app-name>'
deployToSlotOrASE: true
resourceGroupName: <group-name>
slotName: 'staging'
package: '$(Build.ArtifactStagingDirectory)/**/*.zip'
- job: deploy
dependsOn: buildandtest
condition: succeeded()
pool:
vmImage: ubuntu-latest
steps:
# download the artifact drop from the previous job
- task: DownloadPipelineArtifact@2
inputs:
source: 'current'
artifact: 'drop'
path: '$(Pipeline.Workspace)'
- task: AzureWebApp@1
inputs:
azureSubscription: '<service-connection-name>'
appType: <app type>
appName: '<production-app-name>'
resourceGroupName: <group-name>
package: '$(Pipeline.Workspace)/**/*.zip'
Példa: Változóhelyettesítések létrehozása
A legtöbb nyelvi verem esetében az alkalmazásbeállítások és kapcsolati sztring környezeti változókként állíthatók be futásidőben.
Vannak azonban más okok is, amelyek miatt változókat szeretne helyettesíteni a Web.config-ra. Ebben a példában a Web.config fájl egy kapcsolati sztring tartalmaz.connectionString
Az egyes webalkalmazásokban való üzembe helyezés előtt módosíthatja annak értékét. Ezt web.config átalakítás alkalmazásával vagy a Web.config fájl változóinak helyettesítésével teheti meg.
Az alábbi kódrészlet egy példa a Azure-alkalmazás Service Deploy (AzureRmWebAppDeployment
) feladattal történő változóhelyettesítésre:
jobs:
- job: test
variables:
connectionString: <test-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Test stage Azure service connection>'
WebAppName: '<name of test stage web app>'
enableXmlVariableSubstitution: true
- job: prod
dependsOn: test
variables:
connectionString: <prod-stage connection string>
steps:
- task: AzureRmWebAppDeployment@4
inputs:
azureSubscription: '<Prod stage Azure service connection>'
WebAppName: '<name of prod stage web app>'
enableXmlVariableSubstitution: true
Példa: Feltételes üzembe helyezés
Ehhez a YAML-ben az alábbi technikák egyikét használhatja:
- Elkülönítheti az üzembe helyezés lépéseit egy külön feladatba, és hozzáadhat egy feltételt ehhez a feladathoz.
- Adjon hozzá egy feltételt a lépéshez.
Az alábbi példa bemutatja, hogyan lehet lépésfeltételeket használni csak a fő ágból származó buildek üzembe helyezéséhez:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<service-connection-name>'
appName: '<app-name>'
A feltételekről további információt a Feltételek megadása című témakörben talál.
Példa: üzembe helyezés a Web Deploy használatával
A Azure-alkalmazás szolgáltatás üzembe helyezési (AzureRmWebAppDeployment
) feladata üzembe helyezhető az App Service-ben a Web Deploy használatával.
trigger:
- main
pool:
vmImage: windows-latest
variables:
buildConfiguration: 'Release'
steps:
- task: DotNetCoreCLI@2
inputs:
command: 'publish'
publishWebProjects: true
arguments: '--configuration $(buildConfiguration)'
zipAfterPublish: true
- task: AzureRmWebAppDeployment@4
inputs:
ConnectionType: 'AzureRM'
azureSubscription: '<service-connection-name>'
appType: 'webApp'
WebAppName: '<app-name>'
packageForLinux: '$(System.DefaultWorkingDirectory)/**/*.zip'
enableCustomDeployment: true
DeploymentType: 'webDeploy'
Gyakori kérdések
Mi a különbség a tevékenységek és AzureRmWebAppDeployment
a AzureWebApp
tevékenységek között?
Az Azure Web App-feladat (AzureWebApp
) a legegyszerűbb módja annak, hogy üzembe helyezhető egy Azure-webalkalmazásban. Alapértelmezés szerint az üzembe helyezés az Azure Web App gyökéralkalmazásával történik.
A Azure-alkalmazás Szolgáltatás üzembe helyezése feladat (AzureRmWebAppDeployment
) több egyéni forgatókönyvet is képes kezelni, például:
- Módosítsa a konfigurációs beállításokat a webcsomagokban és az XML-paraméterek fájljaiban.
- Üzembe helyezés a Web Deploy használatával, ha az IIS üzembehelyezési folyamatához van szokva.
- Üzembe helyezés virtuális alkalmazásokban.
- Üzembe helyezés más alkalmazástípusokban, például Tárolóalkalmazásokban, Függvényalkalmazásokban, WebJobs-alkalmazásokban vagy API- és Mobilalkalmazásokban.
Feljegyzés
A fájlátalakításokat és a változók helyettesítését a különálló Fájlátalakítási feladat is támogatja az Azure Pipelinesban való használatra. A Fájlátalakítás feladat használatával fájlátalakításokat és változóhelyettesítéseket alkalmazhat bármilyen konfigurációs és paraméterfájlra.
Az "Érvénytelen App Service-csomag vagy mappa elérési útja" hibaüzenetet kapom.
A YAML-folyamatokban a folyamattól függően előfordulhat, hogy a beépített webcsomag mentése és az üzembe helyezési feladat helye nem egyezik. A feladat például felveszi a AzureWebApp
webcsomagot az üzembe helyezéshez. Az AzureWebApp-feladat például a következőben $(System.DefaultWorkingDirectory)/**/*.zip
néz ki: . Ha a webcsomagot máshol helyezik el, módosítsa a következő értékét package
: .
A következő üzenet jelenik meg: "A webdeploy-beállítások használatával történő közzététel csak Windows-ügynök használata esetén támogatott."
Ez a hiba az AzureRmWebAppDeployment feladatban fordul elő, amikor a feladatot a Web Deploy használatával történő üzembe helyezésre konfigurálja, de az ügynök nem windowsos. Ellenőrizze, hogy a YAML rendelkezik-e az alábbi kódhoz hasonlóval:
pool:
vmImage: windows-latest
A webes üzembe helyezés nem működik, ha letiltom az alapszintű hitelesítést
A Microsoft Entra ID-hitelesítés feladattal való használatához AzureRmWebAppDeployment
szükséges hibaelhárítási információkért tekintse meg a Windows-ügynökömről származó Microsoft Entra ID-hitelesítéssel történő webes üzembe helyezést a Azure-alkalmazás szolgáltatásban
Következő lépések
- Az Azure DevOps-folyamat testreszabása.