Azure-webalkalmazás üzembe helyezése

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019 | TFS 2018

Megjegyzés

A Microsoft Team Foundation Server (TFS) 2018-ban és a korábbi verziókban a buildelési és kiadási folyamatokat definícióknak, a futtatásokatbuildeknek, a szolgáltatáskapcsolatokatszolgáltatásvégpontoknak, a fázisokatkörnyezeteknek, a feladatokatpedig fázisoknak nevezzük.

Az Azure Pipelines használatával automatikusan üzembe helyezheti a webalkalmazást az Azure App Service-ben minden sikeres buildeléskor. Az Azure Pipelines segítségével folyamatos integrációval (CI) és folyamatos teljesítéssel (CD) hozhat létre, tesztelhet és helyezhet üzembe 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). Megismerheti a folyamatokat alkotó fő fogalmakat és összetevőket.

Az Azure Web App-feladattal üzembe helyezheti az Azure App Service-ben a folyamatban. Bonyolultabb forgatókönyvek esetén, például ha XML-paramétereket kell használnia az üzembe helyezésben, használhatja az Azure App Service Deploy feladatot.

A Linux-tárolókhoz készült Azure Web Appban való üzembe helyezésről az Azure Web App Container üzembe helyezéséről olvashat.

Előfeltételek

Győződjön meg róla, hogy rendelkezik az alábbi elemekkel:

  • Egy GitHub-fiók, ahol adattárat hozhat létre. Hozzon létre egyet ingyen.

  • Egy Azure DevOps-szervezet. Hozzon létre egyet ingyen. Ha a csapata már rendelkezik ilyenekkel, győződjön meg arról, hogy Ön a használni kívánt Azure DevOps-projekt rendszergazdája.

  • Folyamatok futtatása a Microsoft által üzemeltetett ügynökökön. Vásárolhat párhuzamos feladatot , vagy kérhet egy ingyenes szintet.

Azure App Service létrehozása az Azure Portalon

Azure App Service létrehozása Linuxon vagy Windowson az Azure Cloud Shell használatával. Első lépések:

  1. Jelentkezzen be az Azure Portalra.
  2. Indítsa el a Cloud Shellt a portál felső navigációs paneljén. Open the Cloud Shell.

További információ: Az Azure Cloud Shell áttekintése.

Hozzon létre egy Azure App Service-t Linuxon.

# Create a resource group
az group create --location eastus2 --name myapp-rg

# Create an app service plan of type Linux
az appservice plan create -g myapp-rg -n myapp-service-plan --is-linux

# Create an App Service from the plan 
az webapp create -g myapppipeline-rg -p myapp-service-plan -n my-app-dotnet --runtime "DOTNETCORE|3.1" 

Alkalmazás létrehozása az Azure Pipelines használatával

.NET-projekt létrehozása

Ha nem rendelkezik .NET-projekttel, hozzon létre egy újat, és töltse fel a kódot a GitHub-adattárba vagy az Azure-adattárba. Első lépésként telepítse a legújabb .NET 6.0 SDK-t.

Hozzon létre egy új .NET 6-webalkalmazást.

dotnet new webapp -f net6.0

Ugyanabból a terminál munkamenetből futtassa az alkalmazást helyileg a dotnet run projektkönyvtárból származó paranccsal.

dotnet run

A kód feltöltése

Töltse fel a kódot az új webalkalmazásba, a GitHubra vagy az Azure Reposba:

A folyamat létrehozása

  1. Jelentkezzen be az Azure DevOps-szervezetbe, és keresse meg a projektet.

  2. Lépjen a Folyamatok elemre, majd válassza az Új folyamat lehetőséget.

  3. A varázsló lépéseit végigvezetve először válassza ki a GitHubot a forráskód helyeként.

  4. Előfordulhat, hogy a rendszer átirányítja a GitHubra a bejelentkezéshez. Ha igen, adja meg a GitHub hitelesítő adatait.

  5. Amikor megjelenik az adattárak listája, válassza ki az adattárat.

  6. Előfordulhat, hogy a rendszer átirányítja a GitHubra az Azure Pipelines alkalmazás telepítéséhez. Ha igen, válassza a Telepítés jóváhagyása lehetőséget&.

  7. Amikor megjelenik a Konfigurálás lap, válassza a ASP.NET Core lehetőséget.

  8. 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.

Az Azure Web App-feladat hozzáadása

  1. Az Azure Web App-feladat hozzáadásához használja a Feladatsegédet.

    Azure web app task.

  2. Válassza ki az Azure Resource Managert a kapcsolattípushoz , és válassza ki az Azure-előfizetését. Győződjön meg arról, hogy engedélyezi a kapcsolatot.

  3. Válassza ki a Web Appot Linux rendszeren , és adja meg a azureSubscription, appNameés package. A teljes YAML-nek így kell kinéznie.

    variables:
      buildConfiguration: 'Release'
    
    steps:
    - script: dotnet build --configuration $(buildConfiguration)
      displayName: 'dotnet build $(buildConfiguration)'
    - task: DotNetCoreCLI@2
      inputs:
        command: 'publish'
        publishWebProjects: true
    - task: AzureWebApp@1
      inputs:
        azureSubscription: '<Azure service connection>'
        appType: 'webAppLinux'
        appName: '<Name of web app>'
        package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    
    • azureSubscription: az Ön Azure-előfizetése.
    • 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.

Egyelőre nem javasoljuk az új felhasználóknak, hogy YAML-folyamatokat használjanak az Azure DevOps Server 2019-ből való üzembe helyezéshez. Ha Ön tapasztalt folyamatfelhasználó, és már rendelkezik YAML-folyamattal a .NET Core-alkalmazás létrehozásához, akkor hasznosnak találhatja az alábbi példákat.

A YAML nem támogatott a TFS-ben.

Most már készen áll a témakör további részeinek elolvasására, hogy megismerje az Azure-webalkalmazások üzembe helyezésének testreszabása során a felhasználók által végzett leggyakoribb módosításokat.

Az Azure Web App-feladat használata

Az Azure-webalkalmazásokban való üzembe helyezés legegyszerűbb módja az Azure Web App (AzureWebApp) feladat használata.

Web Deploy-csomag üzembe helyezése (ASP.NET)

Ha egy .zip Web Deploy-csomagot (például egy ASP.NET-webalkalmazásból) szeretne üzembe helyezni egy Azure-webalkalmazásban, adja hozzá a következő kódrészletet az azure-pipelines.yml fájlhoz:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appName: '<Name of web app>'
    package: $(System.DefaultWorkingDirectory)/**/*.zip    
  • azureSubscription: az Ön Azure-előfizetése.
  • 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.

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.DefaultWorkingDirectory) ügynök mappájában.

Az Azure-szolgáltatáskapcsolatokkal kapcsolatos információkért tekintse meg a következő szakaszt.

.NET-alkalmazás üzembe helyezése

ha .NET Core-alkalmazást készít, az alábbi kódrészlet használatával helyezze üzembe a buildet egy alkalmazásban.

variables:
  buildConfiguration: 'Release'

steps:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'
- task: DotNetCoreCLI@2
  inputs:
    command: 'publish'
    publishWebProjects: true
- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: 'webAppLinux'
    appName: '<Name of web app>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
  • azureSubscription: az Ön Azure-előfizetése.
  • appType: a webalkalmazás típusa.
  • appName: a meglévő App Service neve.
  • csomag: a csomag fájlelérési útja vagy az App Service tartalmát tartalmazó mappa. A helyettesítő karakterek támogatottak.

JavaScript-Node.js-alkalmazás üzembe helyezése

Ha JavaScript-Node.js-alkalmazást készít, a munkakönyvtár teljes tartalmát közzéteszi a webalkalmazásban. Ez a kódrészlet Web.config fájlt is létrehoz az üzembe helyezés során, ha az alkalmazás nem rendelkezik ilyenrel, és elindítja az iisnode-kezelőt az Azure-webalkalmazásban:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connections>'
    appName: '<Name of web app>'
    package: '$(System.DefaultWorkingDirectory)'
    customWebConfig: '-Handler iisnode -NodeStartFile server.js -appType node'
  • azureSubscription: az Ön Azure-előfizetése.
  • appName: a meglévő App Service neve.
  • csomag: a csomag fájlelérési útja vagy az App Service tartalmát tartalmazó mappa. A helyettesítő karakterek támogatottak.
  • customWebConfig: web.config paraméterek létrehozása Python-, Node.js-, Go- és Java-alkalmazásokhoz. A rendszer létrehoz és üzembe helyez egy standard web.config fájlt az Azure App Service-ben, ha az alkalmazás nem rendelkezik ilyen fájllal.

Az Azure-szolgáltatáskapcsolatokkal kapcsolatos információkért tekintse meg a következő szakaszt.

A YAML nem támogatott a TFS-ben.

Szolgáltatáskapcsolat használata

Az Azure App Service-ben való üzembe helyezéshez Azure Resource Manager-szolgáltatáskapcsolatot kell használnia. Az Azure-szolgáltatáskapcsolat tárolja az Azure Pipelinesból vagy az Azure DevOps Serverből az Azure-ba való csatlakozáshoz szükséges hitelesítő adatokat.

További információ az Azure Resource Manager-szolgáltatáskapcsolatokról. Ha a szolgáltatáskapcsolat nem a várt módon működik, tekintse meg a szolgáltatáskapcsolatok hibaelhárításával foglalkozó témakört.

A feladathoz Azure-szolgáltatáskapcsolatra AzureWebApp lesz szüksége. Az Azure-szolgáltatáskapcsolat tárolja az Azure Pipelinesból az Azure-ba való csatlakozáshoz szükséges hitelesítő adatokat. Lásd: Azure-szolgáltatáskapcsolat létrehozása.

A YAML nem támogatott a TFS-ben.

Üzembe helyezés virtuális alkalmazásban

Alapértelmezés szerint az üzembe helyezés az Azure-webalkalmazás gyökéralkalmazásával történik. A feladat tulajdonságával AzureRmWebAppDeployment üzembe helyezhet egy adott virtuális alkalmazástVirtualApplication:

- task: AzureRmWebAppDeployment@4
  inputs:
    VirtualApplication: '<name of virtual application>'

A YAML pis nem támogatott a TFS-ben.

Üzembe helyezés egy ponton

Az Azure-webalkalmazást több tárolóhellyel 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 példa bemutatja, hogyan helyezhető üzembe egy előkészítési ponton, majd válthat egy üzemelési pontra:

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: webAppLinux
    appName: '<name of web app>'
    deployToSlotOrASE: true
    resourceGroupName: '<name of resource group>'
    slotName: staging

- task: AzureAppServiceManage@0
  inputs:
    azureSubscription: '<Azure service connection>'
    appType: webAppLinux
    WebAppName: '<name of web app>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: az Ön Azure-előfizetése.
  • appType: (nem kötelező) Linuxon futó 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 App Service-környezetben.
  • resourceGroupName: Az erőforráscsoport neve. Kötelező, ha deployToSlotOrASE igaz.
  • slotName: A pont neve, alapértelmezett értéke.production Kötelező, ha deployToSlotOrASE igaz.
  • 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örnyezetre.

A YAML nem támogatott a TFS-ben.

Üzembe helyezés több webalkalmazásban

A YAML-fájlban lévő feladatokkal üzembe helyezési folyamatokat állíthat be. Feladatok használatával több webalkalmazásban is szabályozhatja az üzembe helyezés sorrendjét.

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: '<Azure service connection>'
      appType: <app type>
      appName: '<name of test stage web app>'
      deployToSlotOrASE: true
      resourceGroupName: <resource 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: '<Azure service connection>'
      appType: <app type>
      appName: '<name of test stage web app>'
      resourceGroupName: <resource group name>
      package: '$(Pipeline.Workspace)/**/*.zip'

A YAML nem támogatott a TFS-ben.

Konfigurációs módosítások

A legtöbb nyelvi verem esetében az alkalmazásbeállítások és a kapcsolati sztringek környezeti változókként állíthatók be futásidőben. Az alkalmazásbeállítások a Key Vault-referenciák használatával is feloldhatók a Key Vaultból.

ASP.NET és ASP.NET Core-fejlesztők számára az App Service-ben az alkalmazásbeállítások beállítása olyan, mintha <appSettings> Web.config. Érdemes lehet egy adott konfigurációt alkalmazni a webalkalmazás céljára, mielőtt üzembe helyezné azt. Ez akkor hasznos, ha ugyanazt a buildet több webalkalmazásban helyezi üzembe egy folyamatban. Ha például a Web.config fájl tartalmaz egy kapcsolati sztringet, connectionStringmódosíthatja annak értékét, mielőtt üzembe helyezné az egyes webalkalmazásokban. Ezt egy Web.config átalakítással vagy a Web.config-fájl változóinak behelyettesítésével teheti meg.

Az Azure App Service üzembe helyezési feladatával a felhasználók a megadott fázisnév alapján módosíthatják a konfigurációs fájlok (*.config fájlok) konfigurációs beállításait webes csomagokban és XML-paraméterfájlokban (parameters.xml).

Megjegyzé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álathoz. A Fájlátalakítási feladat használatával fájlátalakításokat és változóhelyettesítéseket alkalmazhat bármely konfigurációs és paraméterfájlra.

Az alábbi kódrészlet egy példa 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

A YAML piis nem támogatott a TFS-ben.

Feltételes üzembe helyezés

Dönthet úgy, hogy csak bizonyos buildeket helyez üzembe az Azure Web Appban.

Ehhez a YAML-ben az alábbi technikák egyikét használhatja:

  • Az üzembe helyezés lépéseit külön feladatba különítse el, és adjon hozzá egy feltételt a feladathoz.
  • Adjon hozzá egy feltételt a lépéshez.

Az alábbi példa bemutatja, hogyan helyezhet üzembe lépési feltételeket 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: '<Azure service connection>'
    appName: '<name of web app>'

A feltételekről további információt a Feltételek megadása című témakörben talál.

A YAML nem támogatott a TFS-ben.

(Klasszikus) Üzembe helyezés kiadási folyamattal

A kiadási folyamattal felveheti a build által közzétett összetevőket, majd üzembe helyezheti őket az Azure-webhelyen.

  1. A kiadási folyamat létrehozásának megkezdéséhez tegye az alábbiak egyikét:

    • Ha most fejezte be a CI-buildet, válassza a hivatkozást (például a 20170815.1-et) a buildösszegzés megnyitásához. Ezután a Kiadás lehetőséget választva elindíthat egy új kiadási folyamatot, amely automatikusan kapcsolódik a buildelési folyamathoz.

    • Nyissa meg a Kiadások lapot az Azure Pipelinesban, nyissa meg a + legördülő listát a kiadási folyamatok listájában, és válassza a Kiadási folyamat létrehozása lehetőséget.

  2. A kiadási folyamat létrehozásának legegyszerűbb módja egy sablon használata. Ha Node.js alkalmazást helyez üzembe, válassza a Node.js alkalmazás telepítése Azure App Service sablonba lehetőséget. Ellenkező esetben válassza ki a Azure App Service üzembe helyezési sablont. Ezután kattintson az Alkalmaz gombra.

    Megjegyzés

    A sablonok között az egyetlen különbség az, hogy Node.js sablon úgy konfigurálja a feladatot, hogy létrehozzon egy web.config fájlt, amely egy paramétert tartalmaz, amely elindítja az iisnode szolgáltatást.

  3. Ha az új kiadási folyamatot buildösszesítésből hozta létre, ellenőrizze, hogy a buildfolyamat és az összetevő megjelenik-e a Folyamat lap Összetevők szakaszában. Ha a Kiadások lapon létrehozott egy új kiadási folyamatot, válassza a + Hozzáadás hivatkozást, és válassza ki a buildösszetevőt.

  4. Válassza a Folyamatos üzembe helyezés ikont az Összetevők szakaszban, ellenőrizze, hogy engedélyezve van-e a folyamatos üzembe helyezési eseményindító, és adjon hozzá egy szűrőt, amely tartalmazza a ágat.

    Megjegyzés

    A folyamatos üzembe helyezés alapértelmezés szerint nincs engedélyezve, amikor új kiadási folyamatot hoz létre a Kiadások lapon.

  5. Nyissa meg a Feladatok lapot, és ha az 1. fázis van kiválasztva, konfigurálja a tevékenységtulajdonság változóit az alábbiak szerint:

    • Azure-előfizetés: Válasszon ki egy kapcsolatot az Elérhető Azure-szolgáltatáskapcsolatok listából, vagy hozzon létre egy korlátozottabb engedélykapcsolatot az Azure-előfizetéséhez. Ha Az Azure Pipelinest használja, és megjelenik egy Engedélyezés gomb a bemenet mellett, kattintson rá, hogy engedélyezze az Azure Pipelines számára az Azure-előfizetéshez való csatlakozást. Ha TFS-t használ, vagy ha nem látja a kívánt Azure-előfizetést az előfizetések listájában, tekintse meg az Azure Resource Manager szolgáltatáskapcsolatot a kapcsolat manuális beállításához.

    • App Service neve: Válassza ki a webalkalmazás nevét az előfizetéséből.

    Megjegyzés

    Előfordulhat, hogy a feladatok egyes beállításai automatikusan fázisváltozókként lettek definiálva, amikor egy sablonból létrehozott egy kiadási folyamatot. Ezek a beállítások nem módosíthatók a feladatbeállításokban; ehelyett ki kell jelölnie a szülőszakasz-elemet a beállítások szerkesztéséhez.

  6. Mentse a kiadási folyamatot.

Kiadás létrehozása az alkalmazás üzembe helyezéséhez

Most már készen áll egy kiadás létrehozására, ami azt jelenti, hogy a kiadási folyamatot egy adott build által létrehozott összetevőkkel futtatja. Ez a build üzembe helyezését eredményezi:

  1. Válassza a + Kiadás lehetőséget, és válassza a Kiadás létrehozása lehetőséget.

  2. Az Új kiadás létrehozása panelen ellenőrizze, hogy a használni kívánt összetevő verziója ki van-e jelölve, és válassza a Létrehozás lehetőséget.

  3. Válassza ki a kiadási hivatkozást az információs sáv üzenetében. Például: " Az 1. kiadás létrejött".

  4. A folyamatnézetben válassza ki az állapothivatkozást a folyamat szakaszaiban a naplók és az ügynök kimenetének megtekintéséhez.

  5. A kiadás befejezése után keresse meg az Azure-ban futó webhelyet a webalkalmazás URL-címével http://{web_app_name}.azurewebsites.net, és ellenőrizze annak tartalmát.

Üzembe helyezés Azure Government felhőben vagy az Azure Stackben

Hozzon létre egy megfelelő szolgáltatáskapcsolatot:

Üzembehelyezési mechanizmusok

Az előző példák a beépített Azure Web App-feladatra támaszkodnak, amely egyszerűbb integrációt biztosít az Azure-ral.

Ha Windows ügynököt használ, ez a feladat a Web Deploy technológiát használja az Azure Web App használatához. A Web Deploy számos kényelmes üzembe helyezési lehetőséget kínál, például a zárolt fájlok átnevezését és a fájlok App_Data mappából való kizárását az üzembe helyezés során.

Linux-ügynök használata esetén a feladat a Kudu REST API-kra támaszkodik.

Az üzembe helyezés előtt érdemes ellenőrizni a Azure App Service hozzáférési korlátozások listáját. Ez a lista IP-címeket vagy Azure Virtual Network alhálózatokat tartalmazhat. Ha egy vagy több bejegyzés van, akkor a lista végén egy implicit "megtagadás" szerepel. Az alkalmazás hozzáférés-korlátozási szabályainak módosításáról az Azure Portal hozzáférés-korlátozási szabályainak hozzáadása és szerkesztése című témakörben olvashat. Módosíthatja vagy korlátozhatja a hozzáférését a forrásvezérlő-felügyeleti (scm) webhelyhez.

A Azure App Service Feladat kezelése egy másik olyan feladat, amely hasznos az üzembe helyezéshez. Ezzel a feladatsal elindíthatja, leállíthatja vagy újraindíthatja a webalkalmazást az üzembe helyezés előtt vagy után. Ezzel a feladatsal helyeket cserélhet, webhelybővítményeket telepíthet, vagy engedélyezheti a webalkalmazás figyelését.

A Fájlátalakítási feladat segítségével fájlátalakításokat és változóhelyettesítéseket alkalmazhat bármely konfigurációs és paraméterfájlra.

Ha a beépített feladatok nem felelnek meg az igényeinek, más módszerekkel is szkriptelheti az üzembe helyezést. Néhány példa esetében tekintse meg a YAML-kódrészleteket az alábbi feladatok mindegyikében: