Nasazení do služby App Service pomocí Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
Poznámka:
Od 1. června 2024 budou mít všechny nově vytvořené aplikace App Service možnost vygenerovat jedinečný výchozí název hostitele pomocí zásad <app-name>-<random-hash>.<region>.azurewebsites.net
vytváření názvů . Stávající názvy aplikací zůstanou beze změny.
Příklad: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Další podrobnosti najdete v tématu Jedinečný výchozí název hostitele pro prostředek služby App Service.
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
- Účet Azure s aktivním předplatným. Vytvoření účtu zdarma
- Organizace Azure DevOps. Vytvořte si ho zdarma.
- Možnost spouštět kanály na agentech hostovaných Microsoftem Můžete si buď koupit paralelní úlohu , nebo si můžete vyžádat úroveň Free.
- Funkční aplikace Aplikace Azure Service s kódem hostovaným na GitHubu nebo Azure Repos.
- .NET: Vytvoření webové aplikace ASP.NET Core v Azure
- ASP.NET: Vytvoření webové aplikace ASP.NET Framework v Azure
- JavaScript: Vytvoření webové aplikace Node.js ve službě Aplikace Azure Service
- Java: Vytvoření aplikace v Javě ve službě Aplikace Azure Service
- Python: Vytvoření aplikace v Pythonu ve službě Aplikace Azure Service
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.
Přihlaste se ke své organizaci Azure DevOps a přejděte k projektu.
Přejděte na Kanály a pak vyberte Nový kanál.
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.
Jakmile se zobrazí seznam úložišť, vyberte úložiště.
K instalaci aplikace Azure Pipelines můžete být přesměrováni na GitHub. Pokud ano, vyberte Schválit a nainstalovat.
Po zobrazení karty Konfigurovat vyberte ASP.NET Core.
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í
Klikněte na konec souboru YAML a pak vyberte Zobrazit asistenta.
Pomocí Pomocníka úloh přidejte úlohu Webové aplikace Azure.
Případně můžete přidat úlohu nasazení služby Aplikace Azure (AzureRmWebAppDeployment).
Zvolte své předplatné Azure. Ujistěte se, že připojení autorizujete . Autorizace vytvoří požadované připojení služby.
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: - 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:
- 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>'
- VirtualApplication: název virtuální aplikace nakonfigurované na webu Azure Portal. Další informace najdete v tématu Konfigurace aplikace App Service na webu Azure Portal .
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, pokuddeployToSlotOrASE
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:
- 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:
- Upravte nastavení konfigurace uvnitř webových balíčků a souborů parametrů XML.
- Nasaďte pomocí nasazení webu, pokud jste zvyklí na proces nasazení služby IIS.
- Nasazení do virtuálních aplikací
- Nasaďte je do jiných typů aplikací, jako jsou kontejnerové aplikace, aplikace funkcí, webové úlohy nebo aplikace API a mobilní aplikace.
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)/**/*.zip
souboru . 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.