Cvičení – zvýšení úrovně do testovací fáze
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.
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říznakalways
je nastavený takfalse
, 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 tehdySchedule
, 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.
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
V Azure Pipelines přejděte na build. Trasujte sestavení při spuštění.
Až se sestavení dokončí, vraťte se na stránku souhrnu a vyberte tlačítko Zpět.
Uvidíte, že nasazení bylo úspěšně dokončeno.
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ý.
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.
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í.