Cvičení – zvýšení úrovně do testovací fáze

Dokončeno

Váš kanál verze má stále dvě fáze, ale teď se liší od dřív. Fáze jsou Build a Dev. Každá změna, kterou nasdílíte do GitHubu , aktivuje spuštění fáze sestavení . Fáze vývoje se spustí pouze v případech, kdy je změna ve větvi vydané verze . Tady přidáte testovací fázi do kanálu.

Vzpomeňte si, že se tým rozhodl použít naplánovaný trigger k povýšení buildu z fáze vývoje na testovací fázi v 3:00 ráno. Nastavení naplánované aktivační události:

  • Definujte plán v konfiguraci sestavení.
  • Definujte testovací fázi, která zahrnuje podmínku, která spouští fázi pouze v případě, že je důvod sestavení označený jako Schedule.

Pro účely výuky zde definujete plán, ale umožníte sestavení přejít přímo z vývoje na testování. Toto nastavení zabrání nutnosti čekat na aktivaci plánu. Po dokončení tohoto modulu zkuste experimentovat s různými výrazy cron, abyste spustili testovací fázi pouze v naplánovaném čase.

Zvýšení úrovně změn do fáze testování

Tady upravíte konfiguraci kanálu tak, aby nasadil sestavení do testovací fáze.

  1. V editoru Visual Studio Code upravte azure-pipelines.yml následujícím způsobem:

    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'
    

    Oddíl schedules definuje jeden výraz cron. V konfiguraci můžete definovat více než jeden výraz. Výraz aktivuje spuštění kanálu ve větvi vydané verze každý den v 3:00. Příznak always je nastavený tak false , aby se kanál spustil pouze v případech, kdy větev vydané verze obsahuje změny z předchozího spuštění.

    Fáze Test definuje podmínku, která spouští fázi pouze tehdy Schedule, když se důvod sestavení rovná . (Předdefinovaná proměnná Build.Reason definuje důvod sestavení.) Pokud je tato podmínka nepravda, fáze se přeskočí, ale předchozí fáze se budou dál spouštět.

    Poznámka:

    Tato podmínka se zobrazuje pro účely výuky. Je to komentář, který umožňuje, aby změna přešla z vývoje na testování , aniž byste čekali na aktivaci plánu.

  2. Z integrovaného terminálu přidejte do indexu azure-pipelines.yml. Pak změnu potvrďte a nasdílejte ji do GitHubu.

    Tip

    Před spuštěním těchto příkazů Git uložte azure-pipelines.yml.

    git add azure-pipelines.yml
    git commit -m "Deploy to the Test stage"
    git push origin release
    
  3. V Azure Pipelines přejděte na build. Trasujte sestavení při spuštění.

  4. Až se sestavení dokončí, vraťte se na stránku souhrnu a vyberte tlačítko Zpět.

    A screenshot of Azure Pipelines showing three completed stages: Build, Dev, and Test.

    Uvidíte, že nasazení bylo úspěšně dokončeno.

  5. Ve webovém prohlížeči přejděte na adresu URL přidruženou k instanci služby App Service pro vaše testovací prostředí.

    Pokud máte pořád otevřenou kartu prohlížeče, aktualizujte stránku. Pokud si adresu URL nepamatujete, najděte ji na webu Azure Portal na stránce podrobností služby App Service.

    Uvidíte, že web Space Game je nasazený do služby App Service a je spuštěný.

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

  6. Jako volitelný krok vyberte v Azure Pipelines prostředí. Pak vyberte testovací prostředí.

    Azure Pipelines zaznamenává historii nasazení. V historii můžete trasovat změny v prostředí zpět na potvrzení kódu a pracovní položky.

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

Andy a Mara přidají do kanálu testovací fázi. Zobrazují výsledky Amitě.

Amita: Líbí se mi, že se změny sestaví a nasadí, aby je bylo možné otestovat každé ráno. Ale nevidím, jak můžu řídit, kdy se změny objeví v přípravné fázi.

Mara: Nasazení prostřednictvím automatizace šetří spoustu času. Nezapomeňte, že jsme zahrnuli pouze naplánovanou aktivační událost. Při nastavování přípravného prostředí pro Tima přidáme schválení vydané verze. Tímto způsobem se změny přesunou do přípravného prostředí jenom v případě, že jste připravení.