Ćwiczenie — podwyższanie poziomu do przemieszczania

Ukończone

Potok wydania ma teraz trzy etapy: Kompilowanie, tworzenie i testowanie. Ty i zespół Tailspin mają jeszcze jeden etap do wdrożenia: Przemieszczanie.

W tej części wykonasz następujące elementy:

  • Utwórz środowisko przejściowe w usłudze Azure Pipelines i przypisz się jako osoba zatwierdzająca.
  • 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 przemieszczania. 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 przejściowe.

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ć potoki, które są autoryzowane do wdrożenia w środowisku. Można również określić zatwierdzenia człowieka, które są potrzebne do podwyższenia poziomu wydania z jednego etapu do następnego. W tym miejscu należy określić te zatwierdzenia.

Aby utworzyć środowisko przejściowe :

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

    A screenshot of Azure Pipelines showing the location of the Environments menu option.

  2. Wybierz pozycję Nowe środowisko.

  3. W obszarze Nazwa wprowadź przemieszczanie.

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

  5. Wybierz pozycję Utwórz.

  6. Na stronie środowiska przejściowego otwórz listę rozwijaną, a następnie wybierz pozycję Zatwierdzenia i sprawdź.

    A screenshot of Azure Pipelines, showing the location of the approvals and checks menu item.

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

  10. Wybierz pozycję Utwórz.

Podwyższanie poziomu zmian do przemieszczania

W tym miejscu zmodyfikujesz konfigurację potoku, aby wdrożyć kompilację na etapie przejściowym.

  1. W programie Visual Studio Code zmodyfikuj plik 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 Przejściowy . Etap jest wdrażany w środowisku przejściowym , który obejmuje zatwierdzenie wydania.

    Napiwek

    Prawdopodobnie zauważyliśmy, że wszystkie trzy etapy wdrażania są zgodne z podobnymi krokami. Szablony służą do definiowania typowych zadań kompilacji jednorazowo i wielokrotnego ich ponownego użycia. Ta technika była już używana 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 plik azure-pipelines.yml do indeksu. Następnie zatwierdź zmianę i wypchnij ją do usługi GitHub.

    Napiwek

    Przed uruchomieniem tych poleceń usługi Git zapisz plik 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. Śledzenie kompilacji podczas jej uruchamiania.

    Gdy kompilacja osiągnie wartość Staging, zobaczysz, że potok czeka na wszystkie testy, które mają być przekazywane. W takim przypadku istnieje jedna kontrola — ręczne zatwierdzenie wydania.

    A screenshot of Azure Pipelines showing the Staging stage, which requires manual approval.

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

    A screenshot of a portion of a build approval email notification.

  4. Wybierz pozycję 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 usługi App Service dla środowiska przejściowego .

    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.

    A screenshot of web browser showing the Space Game website in the Staging environment.

  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.

    A screenshot of Azure Pipelines showing the deployment history. The history shows one successful deployment.

Zespół Tailspin zbiera się w celu omówienia ich postępów. Amita zatwierdza zmiany na etapie testu , podczas gdy inni oglądają.

Tim: Aby powiedzieć prawdę, na początku byłem trochę zdenerwowany automatycznymi potokami wydań. Ale naprawdę podoba mi się to teraz, że widzę to działa. Każdy etap może mieć własne środowisko, skojarzone testy i osoby zatwierdzające. Potok 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 z przemieszczania do produkcji. Mówienie o... kiedy dodajemy środowisko produkcyjne ?

Andy: Krótko. Myślę, że nadal musimy wypełnić kilka kawałków tutaj najpierw, zanim dodamy to.