Cvičení – zvýšení úrovně do přípravného prostředí

Dokončeno

Kanál verze teď má tři fáze: sestavení, vývoj a testování. Vy a tým Tailspin máte ještě jednu fázi implementace: příprava.

V této části:

  • Vytvořte pracovní prostředí ve službě Azure Pipelines a přiřaďte se jako schvalovatel.
  • Definujte přípravnou fázi, která se spustí až poté, co schvalovatel ověří výsledky fáze testování.

Vytvoření přípravného prostředí

Tady vytvoříte prostředí v Azure Pipelines pro přípravu. Pro účely výuky přiřadíte sami sebe jako schvalovatele. V praxi byste uživatelům, kteří musí schválit změny, přiřadili dříve, než se tyto změny přesunou do další fáze. Pro tým Tailspin schválí Amita změny, aby je bylo možné zvýšit z testovacího do přípravného prostředí.

Dříve v tomto modulu jste zadali environment nastavení pro fáze vývoje i testování . Tady je příklad vývojové fáze.

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

Prostředí můžete definovat prostřednictvím Azure Pipelines, které obsahují konkrétní kritéria pro vaši verzi. Tato kritéria můžou zahrnovat kanály, které mají oprávnění k nasazení do prostředí. Můžete také určit schválení člověka, která jsou potřebná k povýšení uvolnění z jedné fáze na další. Tady zadáte tato schválení.

Vytvoření přípravného prostředí:

  1. V Azure Pipelines vyberte Prostředí.

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

  2. Vyberte Nové prostředí.

  3. V části Název zadejte přípravný příkaz.

  4. Zbývající pole ponechte na výchozích hodnotách.

  5. Vyberte Vytvořit.

  6. Na stránce přípravnéhoprostředí otevřete rozevírací seznam a pak vyberte Schválení a kontroly.

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

  7. Vyberte Schválení.

  8. V části Schvalovatelé vyberte Přidat uživatele a skupiny a pak vyberte svůj účet.

  9. V části Pokyny pro schvalovatele zadejte Schválit tuto změnu, až bude připravená k přípravě.

  10. Vyberte Vytvořit.

Zvýšení úrovně změn do přípravného prostředí

Tady upravíte konfiguraci kanálu a nasadíte sestavení do přípravné 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'
    
    - 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'
    

    Tento kód přidá přípravnou fázi. Fáze se nasadí do přípravného prostředí, které zahrnuje schválení vydané verze.

    Tip

    Pravděpodobně jste si všimli, že všechny tři fáze nasazení se řídí podobným postupem. Pomocí šablon můžete jednou definovat běžné úlohy sestavení a opakovaně je opakovaně používat. Tuto techniku jste už použili v modulu Vytvoření kanálu buildu s modulem Azure Pipelines . Pro účely výuky zopakujeme kroky v jednotlivých fázích.

  2. Z integrovaného terminálu přidejte do indexu azure-pipelines.yml . Pak změnu potvrďte a nasdílíte 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 Staging"
    git push origin release
    
  3. V Azure Pipelines přejděte na build. Trasujte sestavení při spuštění.

    Když sestavení dosáhne přípravného prostředí, uvidíte, že kanál čeká na to, aby všechny kontroly prošly. V tomto případě existuje jedna kontrola – ruční schválení vydané verze.

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

    Azure DevOps můžete nakonfigurovat tak, aby vám poslal e-mailové oznámení, když sestavení vyžaduje schválení. Tady je příklad:

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

  4. Vyberte Zkontrolovat>schválení.

    V praxi ověříte, že splňují vaše požadavky, zkontrolujete změny.

  5. Po dokončení sestavení otevřete webový prohlížeč. Přejděte na adresu URL přidruženou k instanci služby App Service pro vaše přípravné 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 běží.

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

  6. Jako volitelný krok vyberte v Azure Pipelines prostředí. Pak vyberte přípravné prostředí.

    Azure Pipelines zaznamenává historii nasazení, která umožňuje trasovat změny v prostředí zpět do potvrzení kódu a pracovních položek.

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

Tým Tailspin se shromáždí, aby prodiskutovali svůj pokrok. Amita schválí změny ve fázi testování , zatímco ostatní sledují.

Tim: Abych ti řekl pravdu, byl jsem zpočátku trochu nervózní ohledně automatizovaných kanálů vydávání. Ale teď se mi to líbí, když vidím, že to funguje. Každá fáze může mít vlastní prostředí, přidružené testy a schvalovatele. Kanál automatizuje mnoho věcí, které jsme museli udělat ručně. Ale pořád máme kontrolu nad tím, kde ho potřebujeme.

Amita: Mohl bych si představit, že děláme něco podobného, abychom podpořili změny z přípravnéhodo produkčního prostředí. Když mluvíme o... kdy přidáme produkční prostředí?

Andy: Za chvíli. Myslím, že ještě musíme nejdřív vyplnit několik částí, než to přidáme.