Oefening - Promoveren naar staging-omgeving

Voltooid

Uw release-pijplijn heeft nu drie fasen: Build, Deven Test. Je en het Tailspin-team hebben nog een laatste fase om uit te voeren: Staging.

In dit gedeelte gaat u het volgende doen:

  • Maak de testomgeving aan in Azure Pipelines en wijs uzelf toe als goedkeurder.
  • Definieer de Faseringsfase, die alleen wordt uitgevoerd nadat een fiatteur de resultaten van de testfase controleert.

De stagingomgeving maken

Hier maakt u een omgeving in Azure Pipelines voor Staging. Voor leerdoeleinden wijst u uzelf toe als goedkeurder. In de praktijk wijst u de gebruikers toe die wijzigingen moeten goedkeuren voordat deze wijzigingen naar de volgende fase worden verplaatst. Voor het Tailspin-team keurt Amita wijzigingen goed, zodat ze kunnen worden gepromoveerd van Test naar Staging.

Eerder in deze module hebt u environment instellingen opgegeven voor zowel Dev als Test fasen. Hier volgt een voorbeeld voor de fase Dev.

- stage: 'Deploy'
  displayName: 'Deploy the web application'
  dependsOn: Build
  jobs:
  - deployment: Deploy
    pool:
      vmImage: 'ubuntu-20.04'
    environment: dev
    variables:
    - group: Release

U kunt een omgeving definiëren via Azure Pipelines met specifieke criteria voor uw release. Deze criteria kunnen de pijplijnen bevatten die zijn geautoriseerd voor implementatie in de omgeving. U kunt ook de menselijke goedkeuringen opgeven die nodig zijn om de release van de ene fase naar de volgende te promoten. Hier geeft u deze goedkeuringen op.

De stagingomgeving creëren:

  1. Vanuit Azure Pipelines selecteert u Omgevingen.

    Een schermopname van Azure Pipelines met de locatie van de menuoptie Omgevingen.

  2. Selecteer Nieuwe omgeving.

  3. Voer onder Naamfaseringsin.

  4. Laat de resterende velden op de standaardwaarden staan.

  5. Selecteer en maak.

  6. Open de vervolgkeuzelijst op de pagina fasering omgeving en selecteer vervolgens Goedkeuringen en controles.

    Een schermopname van Azure Pipelines, waarop de locatie van het menu-item voor goedkeuringen en controles te zien is.

  7. Selecteer Goedkeuringen.

  8. Selecteer onder goedkeurdersGebruikers en groepen toevoegenen selecteer vervolgens uw account.

  9. Voer onder Instructies voor goedkeurders, Deze wijziging goedkeuren wanneer deze gereed is voor de testfase.

  10. Selecteer Maakaan.

Wijzigingen naar de stagingomgeving promoveren

Hier wijzigt u de pijplijnconfiguratie om de build te implementeren in de Staging fase.

  1. Wijzig in Visual Studio Code azure-pipelines.yml als volgt:

    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'
    

    Met deze code wordt de Staging fase toegevoegd. De stage wordt geïmplementeerd in de stagingomgeving, inclusief een releasegoedkeuring.

    Tip

    U hebt waarschijnlijk gemerkt dat alle drie uw implementatiefasen vergelijkbare stappen volgen. U kunt sjablonen gebruiken om algemene buildtaken één keer te definiëren en ze meerdere keren opnieuw te gebruiken. U hebt deze techniek al gebruikt in de module Een build-pijplijn opzetten met Azure Pipelines. Voor leerdoeleinden herhalen we de stappen in elke fase.

  2. Voeg vanuit de geïntegreerde terminal azure-pipelines.yml toe aan de index. Voer vervolgens de wijziging door en push deze naar GitHub.

    Fooi

    Voordat u deze Git-opdrachten uitvoert, slaat u azure-pipelines.ymlop.

    git add azure-pipelines.yml
    git commit -m "Deploy to Staging"
    git push origin release
    
  3. Ga in Azure Pipelines naar de build. Traceer de build terwijl deze wordt uitgevoerd.

    Wanneer de build Stagingbereikt, ziet u dat de pijplijn wacht tot alle controles zijn geslaagd. In dit geval is er één controle, namelijk de handmatige goedkeuring van de release.

    Een schermopname van Azure Pipelines met de fase Fasering, waarvoor handmatige goedkeuring is vereist.

    U kunt Azure DevOps configureren om u een e-mailmelding te sturen wanneer goedkeuring is vereist voor de build. Hier volgt een voorbeeld:

    Een schermopname van een deel van een e-mailmelding voor goedkeuring van een build.

  4. Selecteer Controleren>goedkeuren.

    In de praktijk controleert u de veranderingen om te verifiëren of deze voldoen aan uw vereisten.

  5. Nadat de build is voltooid, opent u een webbrowser. Ga naar de URL die is gekoppeld aan het exemplaar van de App Service voor uw stagingomgeving .

    Als u nog steeds het browsertabblad hebt geopend, vernieuwt u de pagina. Als u de URL niet meer weet, zoekt u deze in Azure Portal op de App Service-details pagina.

    U ziet dat de Space Game-website is geïmplementeerd in App Service en in bedrijf is.

    Een schermopname van de webbrowser met de Space Game-website in de faseringsomgeving.

  6. Als een optionele stap selecteert u in Azure Pipelines Omgevingen. Selecteer vervolgens de faseringsomgeving.

    Azure Pipelines registreert uw implementatiegeschiedenis, waarmee u wijzigingen in de omgeving kunt traceren naar codedoorvoeringen en werkitems.

    Een schermopname van Azure Pipelines met de implementatiegeschiedenis. In de geschiedenis ziet u één geslaagde implementatie.

Het Tailspin-team verzamelt om hun voortgang te bespreken. Amita keurt wijzigingen in de Test fase goed terwijl de anderen kijken.

Tim: Om je de waarheid te vertellen, was ik in eerste instantie een beetje nerveus over geautomatiseerde release-pijplijnen. Maar ik vind dit echt leuk nu ik het zie werken. Elke fase kan een eigen omgeving, bijbehorende tests en goedkeurders hebben. De pijplijn automatiseert veel dingen die we handmatig moesten doen. Maar we hebben nog steeds controle waar we het nodig hebben.

Amita: Ik kan me voorstellen dat we iets doen dat vergelijkbaar is met het promoten van wijzigingen van Staging tot Productie. Over gesproken... wanneer voegen we een productieomgeving toe?

Andy: Zo meteen. Ik denk dat we hier nog een paar stukjes moeten invullen voordat we dat toevoegen.