Övning – Flytta upp till teststeget

Slutförd

Utgivningspipelinjen har fortfarande två steg, men de är nu annorlunda än tidigare. Stegen är Build och Dev. Varje ändring som du skickar till GitHub utlöser byggfasen som ska köras. Utvecklingssteget körs endast när ändringen finns i versionsgrenen. Här lägger du till teststeget i pipelinen.

Kom ihåg att teamet bestämde sig för att använda en schemalagd utlösare för att marknadsföra bygget från Dev-fasen till testfasen klockan 03.00 varje morgon. Så här konfigurerar du den schemalagda utlösaren:

  • Definiera schemat i byggkonfigurationen.
  • Definiera testfasen , som innehåller ett villkor att endast köra fasen om byggorsaken är markerad som Schedule.

I utbildningssyfte definierar du schemat här, men tillåter att bygget går direkt från Dev till Test. Med den här konfigurationen slipper du vänta tills schemat har utlösts. När du har slutfört den här modulen kan du prova att experimentera med olika cron-uttryck för att endast köra testfasen vid den schemalagda tiden.

Främja ändringar till teststeget

Här ändrar du pipelinekonfigurationen för att distribuera bygget till teststeget .

  1. Ändra azure-pipelines.yml på följande sätt i Visual Studio Code:

    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'
    

    Avsnittet schedules definierar ett cron-uttryck. Du kan definiera fler än ett uttryck i konfigurationen. Uttrycket triggar pipelinen för att köras mot versionsgrenen kl. 03.00 varje dag. Flaggan always är inställd på false så att pipelinen endast körs när utgivningsgrenen har ändringar från den föregående körningen.

    Test-fasen definierar ett villkor som endast kör fasen när byggorsaken är lika med Schedule. (Den inbyggda variabeln Build.Reason definierar byggorsaken.) Om det här villkoret är falskt hoppas fasen över, men de föregående stegen fortsätter att köras.

    Not

    Det här villkoret visas i utbildningssyfte. Det kommenteras så att ändringen kan gå från Dev till Test utan att vänta på att schemat utlöses.

  2. Från den integrerade terminalen till indexet lägger du till azure-pipelines.yml. Genomför sedan ändringen och push-överför den till GitHub.

    Tips

    Spara azure-pipelines.yml innan du kör de här Git-kommandona.

    git add azure-pipelines.yml
    git commit -m "Deploy to the Test stage"
    git push origin release
    
  3. I Azure Pipelines går du till versionen. Spåra bygget medan det körs.

  4. När bygget är klart går du tillbaka till sammanfattningssidan genom att välja bakåtknappen.

    En skärmbild av Azure Pipelines som visar tre slutförda steg: Build, Dev och Test.

    Du ser att distributionen har slutförts framgångsrikt.

  5. Från en webbläsare går du till url:en som är associerad med App Service-instansen för testmiljön .

    Om du fortfarande har webbläsarfliken öppen uppdaterar du sidan. Om du inte kommer ihåg URL:en hittar du den i Azure-portalen på sidan App Service-information .

    Du ser att Space Game-webbplatsen distribueras till App Service och att den körs.

    En skärmbild av en webbläsare som visar webbplatsen Space Game i testmiljön.

  6. Som ett valfritt steg väljer du Miljöer i Azure Pipelines. Välj sedan testmiljö .

    Azure Pipelines registrerar distributionshistoriken. I historiken kan du spåra ändringar i miljön tillbaka till kodbidrag och arbetsobjekt.

    En skärmbild av Azure Pipelines som visar distributionshistoriken. Historiken visar en lyckad distribution.

Andy och Mara lägger till teststeget i pipelinen. De visar resultaten för Amita.

Amita: Jag gillar att ändringar skapas och distribueras så att jag kan testa dem varje morgon. Men jag ser inte hur jag kan styra när ändringarna kommer till Staging.

Mara: Ja, distribution via automatisering sparar mycket tid. Kom ihåg att vi bara inkluderade den schemalagda utlösaren. Nu ska vi lägga till ett versionsgodkännande åt dig när vi konfigurerar mellanlagringsmiljön för Tim. På så sätt flyttas ändringarna endast till Förberedelsemiljö när du är redo.