Opdracht - Promoveren naar de testfase
Uw release-pijplijn heeft nog steeds twee fasen, maar ze zijn nu anders dan voorheen. De fasen zijn Build en Dev. Elke wijziging die u naar GitHub pusht, activeert de build fase die moet worden uitgevoerd. De Dev-fase wordt alleen uitgevoerd wanneer de wijziging zich in de release vertakking bevindt. Hier voegt u de testfase toe aan de pijplijn.
Houd er rekening mee dat het team heeft besloten om een geplande trigger te gebruiken om de build van de Dev-fase te promoten naar de Test-fase elke ochtend om 3:00 uur. Om de geplande trigger in te stellen:
- Definieer het schema in uw build-configuratie.
- Definieer de testfase, die een voorwaarde bevat waarmee de fase alleen wordt uitgevoerd als de buildreden is gemarkeerd als
Schedule
.
Voor leerdoeleinden definieert u hier het schema en laat u de build rechtstreeks gaan van Dev naar Test. Deze installatie voorkomt dat u moet wachten totdat de planning is geactiveerd. Nadat u deze module hebt voltooid, kunt u experimenteren met verschillende cron-expressies om de test fase alleen op het geplande tijdstip uit te voeren.
Bevorder wijzigingen naar de testfase
Hier wijzigt u de pijplijnconfiguratie om de build te implementeren in de fase Test.
Wijzig in Visual Studio Code azure-pipelines.yml als volgt:
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'
In de sectie
schedules
wordt één cron-expressie gedefinieerd. U kunt meer dan één expressie definiëren in uw configuratie. Met de expressie wordt de pijplijn elke dag geactiveerd voor de releasebranch om 3:00 uur. De vlagalways
is ingesteld opfalse
, zodat de pijplijn alleen wordt uitgevoerd wanneer de releasebranch wijzigingen bevat van de vorige uitvoering.De
Test
stage definieert een voorwaarde die alleen wordt uitgevoerd wanneer de buildreden gelijk is aanSchedule
. (De ingebouwde variabeleBuild.Reason
definieert de buildreden.) Als deze voorwaarde onwaar is, wordt de fase overgeslagen, maar worden de eerdere fasen nog steeds uitgevoerd.Notitie
Deze voorwaarde wordt weergegeven voor leerdoeleinden. Er is een aantekening gemaakt om de wijziging door te voeren van Dev naar Test zonder te wachten totdat het rooster geactiveerd wordt.
Voeg vanuit de geïntegreerde terminal azure-pipelines.ymltoe aan de index. Voer vervolgens de wijziging door en push deze naar GitHub.
Tip
Voordat u deze Git-opdrachten uitvoert, slaat u azure-pipelines.ymlop.
git add azure-pipelines.yml git commit -m "Deploy to the Test stage" git push origin release
Ga in Azure Pipelines naar de build. Traceer het buildproces terwijl het wordt uitgevoerd.
Nadat de build is voltooid, selecteert u de knop Vorige om terug te keren naar de overzichtspagina.
U ziet dat de implementatie is voltooid.
Ga in een webbrowser naar de URL die is gekoppeld aan het App Service-exemplaar voor uw Test-omgeving.
Als u nog steeds het browsertabblad hebt geopend, vernieuwt u de pagina. Als u de URL niet meer weet, zoekt u deze in Azure Portal op de App Service-details pagina.
U ziet dat de Space Game-website is uitgerold naar App Service en actief is.
Als optionele stap selecteert u in Azure Pipelines Omgevingen. Selecteer vervolgens de testomgeving.
Azure Pipelines registreert uw implementatiegeschiedenis. In de geschiedenis kunt u wijzigingen in de omgeving terug traceren naar codedoorvoeringen en werkitems.
Andy en Mara voegen de testfase toe aan de pijplijn. Ze tonen de resultaten aan Amita.
Amita: ik vind dat wijzigingen zijn gebouwd en geïmplementeerd, zodat ik ze elke ochtend kan testen. Maar ik zie niet hoe ik kan bepalen wanneer wijzigingen binnenkomen bij staging.
Mara: Ja, het implementeren via automatisering bespaart veel tijd. Houd er rekening mee dat we alleen de geplande trigger hebben opgenomen. Laten we een releasegoedkeuring voor je toevoegen wanneer we de staging omgeving voor Tim instellen. Op die manier worden wijzigingen alleen verplaatst naar fasering wanneer u klaar bent.