Sdílet prostřednictvím


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

Azure DevOps Services | Azure DevOps Server 2022

Tento článek vysvětluje, jak pomocí Azure Pipelines automaticky vytvářet, testovat a nasazovat webovou aplikaci do služby Azure App Service. Můžete nastavit kanál kontinuální integrace a průběžného doručování (CI/CD), který se spustí při každém vrácení změny kódu do určené větve úložiště.

Kanály se skládají z fází, úloh a kroků. Krok je nejmenší stavební blok kanálu a může to být skript nebo úloha, což je předbalený skript. Další informace o klíčových konceptech a komponentách, které tvoří kanál, najdete v tématu Klíčové koncepty Azure Pipelines.

Úlohu Webové aplikace Azure v kanálu můžete použít k nasazení do služby App Service. Pro složitější scénáře, jako je použití parametrů XML v nasazeních, můžete použít úlohu nasazení služby Azure App Service .

Požadavky

Důležité

Během postupů GitHubu se může zobrazit výzva k vytvoření připojení ke službě GitHub nebo k přesměrování na GitHub, abyste se mohli přihlásit, nainstalovat aplikaci Azure Pipelines GitHub, autorizovat Službu Azure Pipelines nebo ověřit v organizacích GitHubu. Podle pokynů na obrazovce dokončete potřebné procesy. Další informace najdete v tématu Přístup k úložištím GitHub.

Vytvořit potrubí

Příklady kódu v této části jsou určené pro webovou aplikaci ASP.NET Core. Pokyny pro další architektury můžete přizpůsobit. Další informace o podpoře ekosystému Azure Pipelines najdete v příkladech ekosystému Azure Pipelines.

Definujte kanál vytvořením souboru YAML azure-pipelines.yml v úložišti kódu.

  1. V levé navigační nabídce projektu Azure DevOps vyberte Kanály.
  2. Na stránce Pipelines (Kanály ) vyberte New pipeline (Nový kanál) nebo Create pipeline (Vytvořit kanál , pokud je tento kanál v projektu prvním kanálem).
  3. Na obrazovce Kde je kód , vyberte umístění zdrojového kódu, a to buď Git Azure Repos , nebo GitHub. V případě potřeby se přihlaste k GitHubu.
  4. Na obrazovce Vybrat úložiště vyberte úložiště kódu.
  5. Na obrazovce Konfigurace kanálu vyberte Počáteční kanál.

Přidejte do kanálu úlohu .NET Core (DotNetCoreCLI@2) a sestavte a publikujte aplikaci.

  1. Na obrazovce Zkontrolovat kanál YAML odstraňte veškerý kód za řádkem steps: .
  2. Vyberte konec souboru a pak vpravo vyberte Zobrazit asistenta .
  3. V části Úlohy vyberte .NET Core.
  4. Na obrazovce konfigurace .NET Core v části Připojení k Azure Resource Manageru vyberte předplatné Azure a pak vyberte Autorizovat , abyste vytvořili požadované připojení služby.
  5. V části Příkaz vyberte publikovat.
  6. Ujistěte se, že jsou zaškrtnutá políčka Publikovat webové projekty a Zip publikované projekty , a pak vyberte Přidat.
  7. Úloha se zobrazí v kanálu YAML. Zkontrolujte kód YAML a zjistěte, co dělá. Až budete připraveni, vyberte Uložit a spustit a pak vyberte Uložit a spustit znovu.
  8. Na obrazovce Souhrn sestavení v části Úlohy vyberte odkaz Potřebné oprávnění . Na obrazovce Kontroly vyberte Povolit a pak znovu vyberte Povolit . Udělení oprávnění zde umožňuje používat připojení služby, které jste autorizovali pro všechna spuštění tohoto kanálu.

Kanál publikuje soubor ZIP nasazení jako artefakt Azure pro úlohu nasazení, která se použije v dalším kroku.

Přidání úlohy nasazení

Po úspěšném spuštění kanálu přidejte úlohu nasazení.

  1. Na obrazovce Souhrn spuštění kanálu vyberte ikonu Další akce v pravém horním rohu a pak vyberte Upravit kanál.
  2. Vyberte konec souboru YAML a vyberte Zobrazit asistenta , pokud se seznam úkolů nezobrazuje.
  3. V seznamu Úkolů vyhledejte a vyberte úlohu Webové aplikace Azure . Případně můžete použít úlohu nasazení služby Azure App Service .
  4. Na obrazovce konfigurace webové aplikace Azure v části Předplatné Azure vyberte stejné připojení služby, které jste nastavili pro předchozí krok. Toto připojení nemusíte znovu autorizovat.
  5. Jako typ aplikace vyberte Azure Web App v Linuxu nebo Azure Web Appu ve Windows v závislosti na vašem kódu.
  6. Jako název aplikace vyberte nebo zadejte název aplikace služby App Service.
  7. Vyberte Přidat.
  8. Vyberte Ověřit a uložit a pak vyberte Uložit.
  9. Vyberte Spustit a pak vyberte Spustit znovu.

Kompletní kanál YAML by měl vypadat jako následující kód:

trigger:
- <branch-specification>

pool:
  vmImage: <agent-specification>

steps:
- task: DotNetCoreCLI@2
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    command: 'publish'
    publishWebProjects: true

- task: AzureWebApp@1
  inputs:
    azureSubscription: '<your-authorized-service-connection>'
    appType: 'webApp'
    appName: '<your-app-name>'
    package: '$(System.DefaultWorkingDirectory)/**/*.zip'
    deploymentMethod: 'auto'  
  • 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 souboru k balíčku nebo složce obsahující obsah služby App Service. Zástupné znaky jsou podporovány.

Examples

Následující části diskutují o vytváření různých druhů kanálů sestavení a verzí.

Nasazení do virtuální aplikace

Úloha Webové aplikace Azure se nasadí do kořenové aplikace ve webové aplikaci Azure. Nasazení do konkrétní virtuální aplikace můžete provést pomocí VirtualApplication vlastnosti úlohy nasazení služby Azure App Service .

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

VirtualApplication je název virtuální aplikace nakonfigurované na webu Azure Portal. Další informace najdete v tématu Konfigurace aplikace App Service na webu Azure Portal.

Nasazení do slotu

Následující příklad ukazuje, jak nasadit do testovacího slotu a poté přepnout na produkční slot:

- 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>'
    WebAppName: '<app-name>'
    ResourceGroupName: '<name of resource group>'
    SourceSlot: staging
    SwapWithProduction: true
  • azureSubscription: Vaše připojení ke službě Azure.
  • appType: Volitelný typ aplikace, jako webAppLinux je nasazení do webové aplikace v Linuxu.
  • appName: Název existující aplikace.
  • deployToSlotOrASE: boolean. Určuje, jestli se má nasadit do existujícího slotu nasazení nebo do služby App Service Environment.
  • resourceGroupName: Název skupiny prostředků, do které se má nasadit, vyžaduje se, pokud deployToSlotOrASE je true.
  • slotName: Název slotu, do který se má nasadit, vyžaduje se, pokud deployToSlotOrASE je true. Výchozí hodnota je production.
  • package: Cesta k souboru balíčku nebo složky obsahující obsah aplikace. Zástupné znaky jsou podporovány.
  • SourceSlot: Slot se odešle do produkčního prostředí, pokud SwapWithProduction je true.
  • SwapWithProduction: boolean. Určuje, jestli se má prohodit provoz zdrojového slotu s produkčním prostředím.

Nasazení do několika webových aplikací

Pomocí úloh v souboru YAML můžete nastavit nasazovací kanál. 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'

Podmíněné nasazení

K podmíněnému nasazení v YAML použijte jednu z následujících technik:

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

Následující příklad ukazuje, jak pomocí podmínek kroku nasadit pouze úspěšná 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 naleznete v tématu Zadání podmínek.

Nasazení pomocí nasazení webu

Úloha nasazení služby Azure App Service se dá nasadit do služby App Service pomocí nasazení webu.

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@5
  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 úlohami AzureWebApp a AzureRmWebAppDeployment?

Úkolem webové aplikace Azure je nejjednodušší způsob nasazení do webové aplikace Azure. Ve výchozím nastavení nasadíte kořenovou aplikaci do webové aplikace Azure.

Úloha nasazení služby Azure App Service může zpracovávat další vlastní scénáře, například:

Poznámka:

Samostatná úloha Transformace souborů podporuje také transformace souborů a nahrazení proměnných 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ů.

Proč se mi zobrazí zpráva "Je k dispozici neplatná cesta balíčku nebo složky služby App Service"?

V kanálech YAML může dojít k neshodě mezi umístěním, kde je uložený sestavený webový balíček, a umístěním, kde ji úloha nasazení hledá. Výchozí úloha AzureWebApp převezme webový balíček pro nasazení z $(System.DefaultWorkingDirectory)/**/*.zip. Pokud je webový balíček uložen jinde, upravte hodnotu parametru package .

Proč se mi zobrazí zpráva "Publikování pomocí možností webdeploy se podporuje jenom 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 parametr YAML vmImage určuje Windows.

pool:
  vmImage: windows-latest

Proč nasazení webu nefunguje, když zakážem základní ověřování?

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