Nasazení do služby App Service pomocí Azure Pipelines

Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019

Pomocí Azure Pipelines můžete automaticky nasadit webovou aplikaci do služby Aplikace Azure Service při každém úspěšném sestavení. Azure Pipelines umožňuje sestavovat, testovat a nasazovat s využitím kontinuální integrace (CI) a průběžného doručování (CD) pomocí Azure DevOps.

Kanály YAML se definují pomocí souboru YAML ve vašem úložišti. Krok je nejmenší stavební blok kanálu a může to být skript nebo úloha (předpřipravený skript). Seznamte se s klíčovými koncepty a komponentami, které tvoří kanál.

K nasazení do služby Aplikace Azure v kanálu použijete úlohu Webové aplikace Azure (AzureWebApp). V případě složitějších scénářů, jako je potřeba použít parametry XML v nasazení, můžete použít úlohu nasazení služby Aplikace Azure (AzureRmWebAppDeployment).

Požadavky

1. Vytvoření kanálu pro váš zásobník

Příklady kódu v této části předpokládají, že nasazujete ASP.NET webovou aplikaci. Pokyny pro další architektury můžete přizpůsobit.

Přečtěte si další informace o podpoře ekosystému Azure Pipelines.

  1. Přihlaste se ke své organizaci Azure DevOps a přejděte k projektu.

  2. Přejděte na Kanály a pak vyberte Nový kanál.

  3. Po zobrazení výzvy vyberte umístění zdrojového kódu: Azure Repos Git nebo GitHub.

    Můžete být přesměrováni na GitHub kvůli přihlášení. Pokud ano, zadejte svoje přihlašovací údaje GitHubu.

  4. Jakmile se zobrazí seznam úložišť, vyberte úložiště.

  5. K instalaci aplikace Azure Pipelines můžete být přesměrováni na GitHub. Pokud ano, vyberte Schválit a nainstalovat.

  6. Po zobrazení karty Konfigurovat vyberte ASP.NET Core.

  7. Jakmile se nový kanál zobrazí, podívejte se na YAML a podívejte se, co dělá. Až budete připraveni, vyberte Uložit a spustit.

2. Přidání úlohy nasazení

  1. Klikněte na konec souboru YAML a pak vyberte Zobrazit asistenta.

  2. Pomocí Pomocníka úloh přidejte úlohu Webové aplikace Azure.

    Screenshot of Azure web app task.

    Případně můžete přidat úlohu nasazení služby Aplikace Azure (AzureRmWebAppDeployment).

  3. Zvolte své předplatné Azure. Ujistěte se, že připojení autorizujete . Autorizace vytvoří požadované připojení služby.

  4. Vyberte typ aplikace, název aplikace a zásobník modulu runtime na základě vaší aplikace App Service. Kompletní YAML by měl vypadat podobně jako v následujícím kódu.

    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: Název autorizovaného připojení služby k vašemu předplatnému Azure.
    • appName: Název existující aplikace.
    • package: Cesta k balíčku nebo složce obsahující obsah služby App Service. Podporují se zástupné kóty.

Příklad: Nasazení aplikace .NET

Pokud chcete nasadit .zip webový balíček (například z webové aplikace ASP.NET) do webové aplikace Azure, pomocí následujícího fragmentu kódu nasaďte sestavení do aplikace.

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: vaše předplatné Azure.
  • appType: typ webové aplikace.
  • appName: název existující služby App Service.
  • package: cesta k balíčku nebo složce obsahující obsah služby App Service. Podporují se zástupné kóty.

Příklad: Nasazení do virtuální aplikace

Ve výchozím nastavení se vaše nasazení stane s kořenovou aplikací ve webové aplikaci Azure. Do konkrétní virtuální aplikace můžete nasadit pomocí VirtualApplication vlastnosti úlohy nasazení služby Aplikace Azure Service (AzureRmWebAppDeployment):

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

Příklad: Nasazení do slotu

Následující příklad ukazuje, jak nasadit do přípravného slotu a pak prohodit do produkčního slotu:

- 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: vaše předplatné Azure.
  • appType: (volitelné) Slouží webAppLinux k nasazení do webové aplikace v Linuxu.
  • appName: název existující služby App Service.
  • deployToSlotOrASE: Boolean. Nasaďte ho do existujícího slotu nasazení nebo Aplikace Azure Service Environment.
  • resourceGroupName: Název skupiny prostředků. Vyžaduje se, pokud deployToSlotOrASE je true.
  • slotName: Název slotu, který má výchozí hodnotu production. Vyžaduje se, pokud deployToSlotOrASE je true.
  • package: cesta k balíčku nebo složce obsahující obsah služby App Service. Podporují se zástupné kóty.
  • SourceSlot: Slot se odešle do produkčního prostředí, pokud SwapWithProduction je true.
  • SwapWithProduction: Logická hodnota. Prohození provozu zdrojového slotu s produkčním prostředím

Příklad: Nasazení do několika webových aplikací

Pomocí úloh v souboru YAML můžete nastavit kanál nasazení. Pomocí úloh můžete řídit pořadí nasazení do více webových aplikací.

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říklad: Nahrazení proměnných

Pro většinu jazykových zásobníků je možné nastavení aplikací a připojovací řetězec nastavit jako proměnné prostředí za běhu.

Existují ale další důvody, proč byste chtěli nahradit proměnné web.config. V tomto příkladu soubor Web.config obsahuje připojovací řetězec s názvem connectionString. Před nasazením do každé webové aplikace můžete změnit její hodnotu. Můžete to provést buď použitím transformace Web.config, nebo nahrazením proměnných v souboru Web.config.

Následující fragment kódu ukazuje příklad nahrazení proměnných pomocí úlohy Aplikace Azure Service Deploy (AzureRmWebAppDeployment):

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říklad: Podmíněné nasazení

Pokud to chcete udělat v YAML, můžete použít jednu z následujících technik:

  • Izolujte kroky nasazení do samostatné úlohy a přidejte do této úlohy podmínku.
  • Přidejte do kroku podmínku.

Následující příklad ukazuje, jak pomocí podmínek kroků nasadit pouze sestavení pocházející z hlavní větve:

- task: AzureWebApp@1
  condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
  inputs:
    azureSubscription: '<service-connection-name>'
    appName: '<app-name>'

Další informace o podmínkách najdete v tématu Určení podmínek.

Příklad: Nasazení pomocí nasazení webu

Úloha nasazení služby Aplikace Azure service (AzureRmWebAppDeployment) se může nasadit do služby App Service pomocí nasazení webu.

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'

Nejčastější dotazy

Jaký je rozdíl mezi úkoly AzureWebApp a AzureRmWebAppDeployment úkoly?

Úloha webové aplikace Azure (AzureWebApp) je nejjednodušší způsob nasazení do webové aplikace Azure. Ve výchozím nastavení se vaše nasazení stane s kořenovou aplikací ve webové aplikaci Azure.

Úloha nasazení služby Aplikace Azure (AzureRmWebAppDeployment) dokáže zpracovat více vlastních scénářů, například:

Poznámka:

Transformace souborů a nahrazení proměnných jsou podporovány také samostatnou úlohou Transformace souborů pro použití v Azure Pipelines. Úlohu Transformace souborů můžete použít k použití transformací souborů a nahrazení proměnných u všech souborů konfigurace a parametrů.

Zobrazuje se mi zpráva o tom, že je zadaný neplatný balíček služby App Service nebo cesta ke složce.

V kanálech YAML může v závislosti na vašem kanálu dojít k neshodě mezi umístěním uloženého vytvořeného webového balíčku a umístěním úlohy nasazení, která ji hledá. Například úloha AzureWebApp vybere webový balíček pro nasazení. Například úloha AzureWebApp vypadá v $(System.DefaultWorkingDirectory)/**/*.zipsouboru . Pokud je webový balíček uložen jinde, upravte hodnotu package.

Zobrazuje se mi zpráva "Publikování pomocí možností webdeploy jsou podporovány pouze při použití agenta windows".

K této chybě dochází v úloze AzureRmWebAppDeployment při konfiguraci úlohy pro nasazení pomocí nasazení webu, ale váš agent není spuštěný ve Windows. Ověřte, že váš YAML má něco podobného jako následující kód:

pool:
  vmImage: windows-latest

Nasazení webu nefunguje, když zakážem základní ověřování

Informace o řešení potíží s získáním ověřování Microsoft Entra ID pro práci s AzureRmWebAppDeployment úlohou najdete v tématu Nejde mi nasadit web do služby Aplikace Azure pomocí ověřování Microsoft Entra ID z agenta Windows

Další kroky

  • Přizpůsobte si kanál Azure DevOps.