Ćwiczenie — promowanie do środowiska testowego
Potok wydania ma teraz trzy etapy: Kompilowanie, tworzenie i testowanie. Ty i zespół Tailspin macie jeszcze jeden etap do wdrożenia: Staging.
W tej części wykonasz następujące elementy:
- Utwórz środowisko przejściowe w usłudze Azure Pipelines i przypisz sobie rolę osoby zatwierdzającej.
- Zdefiniuj etap przejściowy , który jest uruchamiany dopiero po zweryfikowaniu wyników etapu testu przez osoby zatwierdzające.
Tworzenie środowiska przejściowego
W tym miejscu utworzysz środowisko w usłudze Azure Pipelines na potrzeby etapu. W celach szkoleniowych przypiszesz sobie rolę osoby zatwierdzającej. W praktyce należy przypisać użytkowników, którzy są zobowiązani do zatwierdzenia zmian przed przejściem tych zmian do następnego etapu. W przypadku zespołu Tailspin Amita zatwierdza zmiany, aby mogły być promowane z testu na staging.
Wcześniej w tym module określono environment
ustawienia zarówno dla etapów tworzenia , jak i testowania . Oto przykład etapu deweloperskiego .
- stage: 'Deploy'
displayName: 'Deploy the web application'
dependsOn: Build
jobs:
- deployment: Deploy
pool:
vmImage: 'ubuntu-20.04'
environment: dev
variables:
- group: Release
Środowisko można zdefiniować za pomocą usługi Azure Pipelines, która zawiera określone kryteria wydania. Te kryteria mogą obejmować pipeline'y, które są uprawnione do wdrażania do środowiska. Można również określić zatwierdzenia przez ludzi, które są potrzebne, aby promować wydanie z jednego etapu do następnego. W tym miejscu należy określić te zatwierdzenia.
Aby utworzyć środowisko testowe :
W obszarze Azure Pipelines wybierz pozycję Środowiska.
Wybierz pozycję Nowe środowisko.
W obszarze Nazwa wprowadź staging.
Pozostaw wartości domyślne pozostałych pól.
Wybierz pozycję Utwórz.
Na stronie środowiska testowego wybierz kartę Zatwierdzenia i kontrole.
Wybierz pozycję Zatwierdzenia.
W obszarze Osoby zatwierdzające wybierz pozycję Dodaj użytkowników i grupy, a następnie wybierz swoje konto.
W obszarze Instrukcje dla osób zatwierdzających wprowadź zatwierdź tę zmianę, gdy będzie gotowa do wdrożenia na etap testowy.
Wybierz pozycję Utwórz.
Wdrożyć zmiany do środowiska testowego
W tym miejscu modyfikujesz konfigurację potoku, aby wdrożyć kompilację na etapie Staging.
W programie Visual Studio Code zmodyfikuj azure-pipelines.yml w następujący sposób:
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' schedules: - cron: '0 3 * * *' displayName: 'Deploy every day at 3 A.M.' branches: include: - release always: false 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 condition: | and ( succeeded(), eq(variables['Build.SourceBranchName'], variables['releaseBranchName']) ) 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 #condition: eq(variables['Build.Reason'], 'Schedule') 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' appName: '$(WebAppNameStaging)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
Ten kod dodaje etap Staging. Etap jest wdrażany do środowiska przejściowego , które obejmuje zatwierdzenie wydania.
Napiwek
Prawdopodobnie zauważyłeś, że wszystkie trzy etapy wdrażania obejmują podobne kroki. Szablony służą do definiowania typowych zadań kompilacji jednorazowo i wielokrotnego ich ponownego użycia. Ty już użyłeś tej techniki w module Tworzenie potoku kompilacji za pomocą usługi Azure Pipelines. W celach szkoleniowych powtarzamy kroki na każdym etapie.
W zintegrowanym terminalu dodaj azure-pipelines.yml do indeksu. Następnie zatwierdź zmianę i prześlij ją do GitHub.
Napiwek
Przed uruchomieniem tych poleceń git zapisz azure-pipelines.yml.
git add azure-pipelines.yml git commit -m "Deploy to Staging" git push origin release
W usłudze Azure Pipelines przejdź do kompilacji. Śledź kompilację podczas jej uruchamiania.
Gdy kompilacja osiągnie etap Staging, zobaczysz, że potok czeka na zatwierdzenie wszystkich sprawdzeń. W takim przypadku istnieje jedna kontrola — ręczne zatwierdzenie wydania.
Możesz skonfigurować usługę Azure DevOps, aby wysyłać powiadomienia e-mail, gdy kompilacja wymaga zatwierdzenia. Oto przykład:
Wybierz Przejrzyj>Zatwierdź.
W praktyce, aby sprawdzić, czy spełniają one twoje wymagania, należy sprawdzić zmiany.
Po zakończeniu kompilacji otwórz przeglądarkę internetową. Przejdź do adresu URL skojarzonego z wystąpieniem App Service dla środowiska staging .
Jeśli nadal masz otwartą kartę przeglądarki, odśwież stronę. Jeśli nie pamiętasz adresu URL, znajdź go w witrynie Azure Portal na stronie szczegółów usługi App Service .
Zobaczysz, że witryna internetowa Space Game jest wdrożona w usłudze App Service i działa.
Opcjonalnie w usłudze Azure Pipelines wybierz pozycję Środowiska. Następnie wybierz środowisko przejściowe .
Usługa Azure Pipelines rejestruje historię wdrożenia, co umożliwia śledzenie zmian w środowisku z powrotem do zatwierdzeń kodu i elementów roboczych.
Zespół Tailspin zbiera się w celu omówienia ich postępów. Amita zatwierdza zmiany na etapie testu , podczas gdy inni oglądają.
Tim: Szczerze mówiąc, na początku byłem trochę zdenerwowany automatycznymi procesami wydania. Ale teraz naprawdę mi się to podoba, gdy widzę, jak to działa. Każdy etap może mieć własne środowisko, skojarzone testy i osoby zatwierdzające. Pipeline automatyzuje wiele czynności, które musieliśmy wykonać ręcznie. Ale nadal mamy kontrolę nad tym, gdzie jej potrzebujemy.
Amita: Wyobrażam sobie, że robimy coś podobnego do promowania zmian ze Staging do Produkcji. Kiedy dodamy środowisko produkcyjne?
Andy: Wkrótce. Myślę, że najpierw musimy wypełnić tutaj kilka elementów, zanim to dodamy.