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
- Úč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: - 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>'
- 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:
- 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:
- 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.