Ü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

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

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.

  1. Jelentkezzen be az Azure DevOps-szervezetbe, és lépjen a projekthez.

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

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

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

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

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

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

  1. Kattintson a YAML-fájl végére, majd válassza az Asszisztens megjelenítése lehetőséget."

  2. Az Azure Web App-feladat hozzáadásához használja a Feladat segédet.

    Screenshot of Azure web app task.

    Másik lehetőségként hozzáadhatja a Azure-alkalmazás service deploy (AzureRmWebAppDeployment) feladatot.

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

  4. 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:
    - script: dotnet build --configuration $(buildConfiguration)
      displayName: 'dotnet build $(buildConfiguration)'
    - 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:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'
- 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>'

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.
  • deployToSlotOrA Standard kiadás: 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:
- script: dotnet build --configuration $(buildConfiguration)
  displayName: 'dotnet build $(buildConfiguration)'
- 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:

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)/**/*.zipné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