Ö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 du skickar till GitHub utlöser byggprocessen fasen att köras. Dev-fasen körs endast när ändringen finns i versionsgrenen. Här lägger du till steget Test i pipelinen.

Kom ihåg att teamet bestämde sig för att använda en schemalagd utlösare för att höja upp bygget från Dev-fasen till Test-fasen 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.

Här definierar du schemat i utbildningssyfte, men låter bygget gå 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 Test-fasen vid den schemalagda tiden.

Främja ändringar till teststeget

Här ändrar du pipelinekonfigurationen för att distribuera bygget till Test-fasen.

  1. Ändra azure-pipelines.yml enligt följande 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 för att möjliggöra att ändringen går från Dev till Test utan att vänta på att schemat ska aktiveras.

  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

    Innan du kör dessa Git-kommandon sparar du azure-pipelines.yml.

    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 din Test-miljö.

    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å App Service-information sidan.

    Du ser att webbplatsen Space Game är distribuerad till App Service och är igång.

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

  6. Som ett valfritt steg i Azure Pipelines väljer du Miljöer. 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 Test-fasen 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 mellanlagring.

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 Staging miljön för Tim. På så sätt flyttas ändringarna till Staging bara när du är redo.