Wdrażanie w usłudze App Service przy użyciu usługi Azure Pipelines
Azure DevOps Services | Azure DevOps Server 2020 | Azure DevOps Server 2019
Uwaga
Od 1 czerwca 2024 r. wszystkie nowo utworzone aplikacje usługi App Service będą miały możliwość wygenerowania unikatowej domyślnej nazwy hosta przy użyciu konwencji <app-name>-<random-hash>.<region>.azurewebsites.net
nazewnictwa . Istniejące nazwy aplikacji pozostaną niezmienione.
Przykład: myapp-ds27dh7271aah175.westus-01.azurewebsites.net
Aby uzyskać więcej informacji, zapoznaj się z unikatową domyślną nazwą hosta zasobu usługi App Service.
Użyj usługi Azure Pipelines, aby automatycznie wdrożyć aplikację internetową w celu aplikacja systemu Azure Service w każdej pomyślnej kompilacji. Usługa Azure Pipelines umożliwia tworzenie, testowanie i wdrażanie za pomocą ciągłej integracji i ciągłego dostarczania (CD) przy użyciu usługi Azure DevOps.
Potoki YAML są definiowane przy użyciu pliku YAML w repozytorium. Krok jest najmniejszym blokiem konstrukcyjnym potoku i może być skryptem lub zadaniem (wstępnie spakowanym skryptem). Dowiedz się więcej o kluczowych pojęciach i składnikach tworzących potok.
Użyjesz zadania Azure Web App (AzureWebApp
) do wdrożenia w usłudze aplikacja systemu Azure Service w potoku. W przypadku bardziej skomplikowanych scenariuszy, takich jak konieczność używania parametrów XML we wdrożeniu, możesz użyć zadania wdrażania usługi aplikacja systemu Azure (AzureRmWebAppDeployment).
Wymagania wstępne
- Konto platformy Azure z aktywną subskrypcją. Utwórz konto bezpłatnie.
- Organizacja: Azure DevOps. Utwórz je bezpłatnie.
- Możliwość uruchamiania potoków na agentach hostowanych przez firmę Microsoft. Możesz kupić zadanie równoległe lub zażądać warstwy Bezpłatna.
- Działająca aplikacja usługi aplikacja systemu Azure Service z kodem hostowanym w usłudze GitHub lub Azure Repos.
- .NET: tworzenie aplikacji internetowej ASP.NET Core na platformie Azure
- ASP.NET: tworzenie aplikacji internetowej platformy ASP.NET Framework na platformie Azure
- JavaScript: tworzenie aplikacji internetowej Node.js w usłudze aplikacja systemu Azure
- Java: tworzenie aplikacji Java w usłudze aplikacja systemu Azure
- Python: tworzenie aplikacji języka Python w usłudze aplikacja systemu Azure Service
1. Tworzenie potoku dla stosu
W przykładach kodu w tej sekcji założono, że wdrażasz aplikację internetową ASP.NET. Możesz dostosować instrukcje dotyczące innych struktur.
Dowiedz się więcej o obsłudze ekosystemu usługi Azure Pipelines.
Zaloguj się do organizacji usługi Azure DevOps i przejdź do projektu.
Przejdź do obszaru Potoki, a następnie wybierz pozycję Nowy potok.
Po wyświetleniu monitu wybierz lokalizację kodu źródłowego: Azure Repos Git lub GitHub.
Być może nastąpi przekierowanie do usługi GitHub w celu zalogowania się. Jeśli tak, wprowadź poświadczenia usługi GitHub.
Po wyświetleniu listy repozytoriów wybierz repozytorium.
Możesz zostać przekierowany do usługi GitHub, aby zainstalować aplikację Azure Pipelines. Jeśli tak, wybierz pozycję Zatwierdź i zainstaluj.
Po wyświetleniu karty Konfigurowanie wybierz pozycję ASP.NET Core.
Gdy pojawi się nowy potok, przyjrzyj się kodowi YAML, aby zobaczyć, co robi. Gdy wszystko będzie gotowe, wybierz pozycję Zapisz i uruchom.
2. Dodaj zadanie wdrażania
Kliknij koniec pliku YAML, a następnie wybierz pozycję Pokaż asystenta.
Użyj asystenta zadań, aby dodać zadanie Aplikacji internetowej platformy Azure.
Alternatywnie możesz dodać zadanie wdrażania usługi aplikacja systemu Azure (AzureRmWebAppDeployment).
Wybierz subskrypcję platformy Azure. Pamiętaj, aby autoryzować połączenie. Autoryzacja tworzy wymagane połączenie z usługą.
Wybierz stos Typ aplikacji, Nazwa aplikacji i Środowisko uruchomieniowe na podstawie aplikacji usługi App Service. Kompletny kod YAML powinien wyglądać podobnie do poniższego kodu.
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: nazwa autoryzowanego połączenia usługi z subskrypcją platformy Azure.
- appName: nazwa istniejącej aplikacji.
- package: ścieżka pliku do pakietu lub folderu zawierającego zawartość usługi App Service. Obsługiwane są symbole wieloznaczne.
Przykład: wdrażanie aplikacji .NET
Aby wdrożyć pakiet internetowy .zip (na przykład z aplikacji internetowej ASP.NET) do aplikacji internetowej platformy Azure, użyj następującego fragmentu kodu, aby wdrożyć kompilację w aplikacji.
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: Twoja subskrypcja platformy Azure.
- appType: typ aplikacji internetowej.
- appName: nazwa istniejącej usługi app Service.
- package: ścieżka pliku do pakietu lub folderu zawierającego zawartość usługi App Service. Obsługiwane są symbole wieloznaczne.
Przykład: wdrażanie w aplikacji wirtualnej
Domyślnie wdrożenie odbywa się z aplikacją główną w aplikacji internetowej platformy Azure. Wdrożenie w określonej aplikacji wirtualnej można wdrożyć przy użyciu VirtualApplication
właściwości zadania wdrażania usługi aplikacja systemu Azure (AzureRmWebAppDeployment
):
- task: AzureRmWebAppDeployment@4
inputs:
VirtualApplication: '<name of virtual application>'
- VirtualApplication: nazwa aplikacji wirtualnej skonfigurowanej w witrynie Azure Portal. Aby uzyskać więcej informacji, zobacz Konfigurowanie aplikacji usługi App Service w witrynie Azure Portal .
Przykład: Wdrażanie w miejscu
W poniższym przykładzie pokazano, jak wdrożyć w miejscu przejściowym, a następnie zamienić na miejsce produkcyjne:
- 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: Twoja subskrypcja platformy Azure.
- appType: (opcjonalnie) Użyj
webAppLinux
polecenia , aby wdrożyć aplikację internetową w systemie Linux. - appName: nazwa istniejącej usługi app Service.
- deployToSlotOrASE: wartość logiczna. Wdróż w istniejącym miejscu wdrożenia lub środowisku usługi aplikacja systemu Azure.
- resourceGroupName: nazwa grupy zasobów. Wymagane, jeśli
deployToSlotOrASE
ma wartość true. - slotName: nazwa miejsca, które domyślnie ma wartość
production
. Wymagane, jeślideployToSlotOrASE
ma wartość true. - package: ścieżka pliku do pakietu lub folderu zawierającego zawartość usługi App Service. Obsługiwane są symbole wieloznaczne.
- SourceSlot: miejsce wysłane do środowiska produkcyjnego, gdy
SwapWithProduction
ma wartość true. - SwapWithProduction: wartość logiczna. Zamień ruch miejsca źródłowego na środowisko produkcyjne.
Przykład: Wdrażanie w wielu aplikacjach internetowych
Zadania w pliku YAML umożliwiają skonfigurowanie potoku wdrożeń. Za pomocą zadań można kontrolować kolejność wdrażania w wielu aplikacjach internetowych.
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'
Przykład: Tworzenie podstawień zmiennych
W przypadku większości stosów języków ustawienia aplikacji i parametry połączenia można ustawić jako zmienne środowiskowe w czasie wykonywania.
Istnieją jednak inne powody, dla których warto utworzyć podstawianie zmiennych w pliku Web.config. W tym przykładzie plik Web.config zawiera parametry połączenia o nazwie connectionString
. Przed wdrożeniem w każdej aplikacji internetowej można zmienić jej wartość. Można to zrobić, stosując przekształcenie Web.config lub zastępując zmienne w pliku Web.config.
Poniższy fragment kodu przedstawia przykład podstawianie zmiennych przy użyciu zadania aplikacja systemu 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
Przykład: wdrażanie warunkowe
Aby to zrobić w języku YAML, możesz użyć jednej z następujących technik:
- Izoluj kroki wdrażania do oddzielnego zadania i dodaj warunek do tego zadania.
- Dodaj warunek do kroku.
W poniższym przykładzie pokazano, jak używać warunków kroku do wdrażania tylko kompilacji pochodzących z gałęzi głównej:
- task: AzureWebApp@1
condition: and(succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main'))
inputs:
azureSubscription: '<service-connection-name>'
appName: '<app-name>'
Aby dowiedzieć się więcej na temat warunków, zobacz Określanie warunków.
Przykład: wdrażanie przy użyciu narzędzia Web Deploy
Zadanie wdrażania usługi aplikacja systemu Azure (AzureRmWebAppDeployment
) może zostać wdrożone w usłudze App Service przy użyciu narzędzia Web Deploy.
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'
Często zadawane pytania
Jaka jest różnica między zadaniami AzureWebApp
i AzureRmWebAppDeployment
?
Zadanie aplikacji internetowej platformy Azure (AzureWebApp
) to najprostszy sposób wdrażania w aplikacji internetowej platformy Azure. Domyślnie wdrożenie odbywa się z aplikacją główną w aplikacji internetowej platformy Azure.
Zadanie aplikacja systemu Azure Service Deploy (AzureRmWebAppDeployment
) może obsługiwać więcej scenariuszy niestandardowych, takich jak:
- Zmodyfikuj ustawienia konfiguracji wewnątrz pakietów internetowych i plików parametrów XML.
- Wdróż za pomocą narzędzia Web Deploy, jeśli używasz go do procesu wdrażania usług IIS.
- Wdrażanie w aplikacjach wirtualnych.
- Wdróż w innych typach aplikacji, takich jak aplikacje kontenera, aplikacje funkcji, zadania WebJob lub interfejs API i aplikacje mobilne.
Uwaga
Przekształcenia plików i podstawienie zmiennych są również obsługiwane przez oddzielne zadanie Przekształcanie plików do użycia w usłudze Azure Pipelines. Za pomocą zadania Przekształcanie plików można zastosować przekształcenia plików i podstawienia zmiennych w dowolnych plikach konfiguracji i parametrów.
Otrzymuję komunikat "Podano nieprawidłowy pakiet usługi App Service lub ścieżkę folderu".
W potokach YAML w zależności od potoku może występować niezgodność między miejscem zapisania utworzonego pakietu internetowego i miejscem, w którym szuka zadania wdrażania. Na przykład AzureWebApp
zadanie pobiera pakiet internetowy do wdrożenia. Na przykład zadanie AzureWebApp wygląda w pliku $(System.DefaultWorkingDirectory)/**/*.zip
. Jeśli pakiet internetowy jest zdeponowany w innym miejscu, zmodyfikuj wartość package
.
Otrzymuję komunikat "Publikowanie przy użyciu opcji webdeploy są obsługiwane tylko w przypadku korzystania z agenta systemu Windows".
Ten błąd występuje w zadaniu AzureRmWebAppDeployment podczas konfigurowania zadania do wdrożenia przy użyciu narzędzia Web Deploy, ale agent nie jest uruchomiony w systemie Windows. Sprawdź, czy kod YAML jest podobny do następującego:
pool:
vmImage: windows-latest
Narzędzie Web Deploy nie działa, gdy wyłączam uwierzytelnianie podstawowe
Aby uzyskać informacje dotyczące rozwiązywania problemów z uzyskiwaniem uwierzytelniania identyfikatora entra firmy Microsoft w celu pracy z AzureRmWebAppDeployment
zadaniem, zobacz Nie mogę wdrożyć w sieci Web w usłudze aplikacja systemu Azure przy użyciu uwierzytelniania identyfikatora Entra firmy Microsoft z mojego agenta systemu Windows