Ćwiczenie — promowanie do środowiska testowego

Ukończone

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 :

  1. W obszarze Azure Pipelines wybierz pozycję Środowiska.

    Zrzut ekranu usługi Azure Pipelines przedstawiający lokalizację opcji menu Środowiska.

  2. Wybierz pozycję Nowe środowisko.

  3. W obszarze Nazwa wprowadź staging.

  4. Pozostaw wartości domyślne pozostałych pól.

  5. Wybierz pozycję Utwórz.

  6. Na stronie środowiska testowego wybierz kartę Zatwierdzenia i kontrole.

  7. Wybierz pozycję Zatwierdzenia.

  8. W obszarze Osoby zatwierdzające wybierz pozycję Dodaj użytkowników i grupy, a następnie wybierz swoje konto.

  9. W obszarze Instrukcje dla osób zatwierdzających wprowadź zatwierdź tę zmianę, gdy będzie gotowa do wdrożenia na etap testowy.

  10. Wybierz pozycję Utwórz.

Wdrożyć zmiany do środowiska testowego

W tym miejscu modyfikujesz konfigurację potoku, aby wdrożyć kompilację na etapie Staging.

  1. 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.

  2. 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
    
  3. 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.

    Zrzut ekranu usługi Azure Pipelines przedstawiający etap przejściowy, który wymaga ręcznego zatwierdzania.

    Możesz skonfigurować usługę Azure DevOps, aby wysyłać powiadomienia e-mail, gdy kompilacja wymaga zatwierdzenia. Oto przykład:

    Zrzut ekranu przedstawiający część powiadomienia e-mail zatwierdzenia kompilacji.

  4. Wybierz Przejrzyj>Zatwierdź.

    W praktyce, aby sprawdzić, czy spełniają one twoje wymagania, należy sprawdzić zmiany.

  5. 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.

    Zrzut ekranu przeglądarki internetowej pokazujący witrynę Space Game w środowisku testowym.

  6. 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.

    Zrzut ekranu usługi Azure Pipelines przedstawiający historię wdrażania. Historia przedstawia jedno pomyślne wdrożenie.

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.