Ćwiczenie — implementowanie niebieskiego zielonego wzorca wdrażania
W obszarze Tworzenie potoku wieloetapowego przy użyciu usługi Azure Pipelines utworzyliśmy podstawowy potok wdrażania, który wdraża aplikację internetową w celu aplikacja systemu Azure Service na tych etapach: tworzenie, testowanie i przemieszczanie.
W tym miejscu dodasz do tego przepływu pracy, stosując wzorzec wdrożenia niebieski-zielony podczas przemieszczania.
W tym celu wykonasz następujące czynności:
- Dodaj miejsce wdrożenia do wystąpienia usługi App Service, które odpowiada przejściu przejściowemu.
- Dodaj zadanie do potoku, aby zamienić miejsca wdrożenia.
Dodawanie miejsca wdrożenia
W tym miejscu dodasz miejsce wdrożenia do wystąpienia usługi App Service, które odpowiada przejściu przejściowemu.
Domyślnie każde wystąpienie usługi App Service udostępnia domyślne miejsce o nazwie produkcja. Wdrożono w miejscu produkcyjnym podczas konfigurowania potoku w poprzedniej sekcji.
Wystąpienie usługi App Service może mieć wiele miejsc. W tym miejscu dodasz drugie miejsce wdrożenia do wystąpienia usługi App Service, które odpowiada przejściu przejściowemu. Miejsce wdrożenia nosi nazwę swap.
Aby dodać miejsce:
Przejdź do witryny Azure Portal i zaloguj się.
W menu wybierz pozycję Cloud Shell. Po wyświetleniu monitu wybierz środowisko powłoki Bash .
Uruchom następujące polecenie, aby uzyskać nazwę wystąpienia usługi App Service odpowiadającą przejściu przejściowemu i zapisać wynik w zmiennej powłoki Bash o nazwie
staging
.staging=$(az webapp list \ --resource-group tailspin-space-game-rg \ --query "[?contains(@.name, 'tailspin-space-game-web-staging')].{name: name}" \ --output tsv)
Argument
--query
używa języka JMESPath, który jest językiem zapytań dla formatu JSON. Argument wybiera wystąpienie usługi App Service, któregoname
pole zawiera "tailspin-space-space-game-web-aging".Wydrukuj zmienną,
staging
aby sprawdzić, czy otrzymasz poprawną nazwę.echo $staging
Poniżej przedstawiono przykładowe dane wyjściowe:
tailspin-space-game-web-staging-1234
Uruchom następujące polecenie, aby dodać miejsce o nazwie swap do środowiska przejściowego .
az webapp deployment slot create \ --name $staging \ --resource-group tailspin-space-game-rg \ --slot swap
Uruchom następujące polecenie, aby wyświetlić listę nazwy hosta miejsca wdrożenia.
az webapp deployment slot list \ --name $staging \ --resource-group tailspin-space-game-rg \ --query [].hostNames \ --output tsv
Wynik przypomina następujące dane wyjściowe:
tailspin-space-game-web-staging-25391-swap.azurewebsites.net
Zanotuj tę nazwę hosta na później.
Opcjonalnie przejdź do witryny w przeglądarce. Zostanie wyświetlona domyślna strona główna, ponieważ kod nie został jeszcze wdrożony w tym miejscu.
Domyślnie miejsce wdrożenia jest dostępne z Internetu. W praktyce można skonfigurować sieć wirtualną platformy Azure, która umieszcza miejsce wymiany w sieci, która nie jest routingiem z Internetu, ale tylko twój zespół może uzyskać dostęp. Miejsce produkcyjne pozostanie dostępne z Internetu.
Wymiana miejsc wdrożenia w środowisku przejściowym
W tym miejscu użyjesz zadania AzureAppServiceManage@0 , aby zamienić miejsca wdrożenia w środowisku przejściowym .
To zadanie służy również do uruchamiania, zatrzymywania lub usuwania miejsca. Możesz też użyć go do zainstalowania rozszerzeń lokacji lub włączenia ciągłego monitorowania w usłudze App Service.
W programie Visual Studio Code zmodyfikuj azure-pipelines.yml przy użyciu tego kodu:
Napiwek
Możesz zastąpić cały plik lub po prostu zaktualizować wyróżnioną część.
trigger: - '*' variables: buildConfiguration: 'Release' stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop - stage: 'Dev' displayName: 'Deploy to the dev environment' dependsOn: Build jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: dev variables: - group: Release strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Test' displayName: 'Deploy to the test environment' dependsOn: Dev jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: test variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' appName: '$(WebAppNameTest)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Staging' displayName: 'Deploy to the staging environment' dependsOn: Test jobs: - deployment: Deploy pool: vmImage: 'ubuntu-20.04' environment: staging variables: - group: 'Release' strategy: runOnce: deploy: steps: - download: current artifact: drop - task: AzureWebApp@1 displayName: 'Azure App Service Deploy: website' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' deployToSlotOrASE: 'true' resourceGroupName: 'tailspin-space-game-rg' slotName: 'swap' appName: '$(WebAppNameStaging)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - task: AzureAppServiceManage@0 displayName: 'Swap deployment slots' inputs: azureSubscription: 'Resource Manager - Tailspin - Space Game' resourceGroupName: 'tailspin-space-game-rg' webAppName: '$(WebAppNameStaging)' sourceSlot: 'swap' targetSlot: 'production' action: 'Swap Slots'
Zwróć uwagę na następujące zmiany:
- Zadanie
AzureWebApp@1
określa teraz następujące wartości:deployToSlotOrASE
, gdy jest ustawiona natrue
, jest wdrażana w istniejącym miejscu wdrożenia.resourceGroupName
określa nazwę grupy zasobów. Ta wartość jest wymagana, gdydeployToSlotOrASE
wartość totrue
.slotName
określa nazwę miejsca wdrożenia. W tym miejscu wdrożysz w miejscu o nazwie swap.
- Nowe zadanie
AzureAppServiceManage@0
, zamienia miejsca wdrożenia.sourceSlot
itargetSlot
określ miejsca do zamiany.action
określa akcję do wykonania. Pamiętaj, że to zadanie służy do uruchamiania, zatrzymywania lub usuwania miejsca. W tym miejscu "Miejsca zamiany" określa zamianę miejsc źródłowych i docelowych.
Ta konfiguracja zawsze jest wdrażana w miejscu zamiany. Następnie zamienia miejsca produkcyjne i zamieniane . Proces zamiany zapewnia, że środowisko produkcyjne wskazuje na nowsze wdrożenie.
- Zadanie
W zintegrowanym terminalu dodaj azure-pipelines.yml do indeksu. Zatwierdź zmiany, a następnie wypchnij gałąź do usługi GitHub.
Napiwek
Zapisz azure-pipelines.yml przed uruchomieniem tych poleceń usługi Git.
git add azure-pipelines.yml git commit -m "Swap deployment slots" git push origin blue-green
W usłudze Azure Pipelines prześledzić kompilację za pomocą każdego z kroków.
Uwaga
Jeśli wystąpi następujący błąd, ...'staging' slot did not respond to http ping. (CODE: 417)
spróbuj ponownie uruchomić usługę aplikacji. Jeśli problem będzie się powtarzać, zresetuj zamianę automatyczną dla miejsca.
Opcjonalnie w przeglądarce przejdź do adresu URL odpowiadającego każdemu etapowi.
Mimo że nie wprowadzono jeszcze zmian w witrynie internetowej, zobaczysz, że witryna internetowa Space Game została pomyślnie wdrożona w każdym środowisku usługi App Service.