Zelfstudie: Een pijplijn met meerdere fases maken met Azure DevOps
Azure DevOps Services | Azure DevOps Server 2022 - Azure DevOps Server 2019
U kunt een Azure DevOps-pijplijn met meerdere fasen gebruiken om uw CI/CD-proces te verdelen in fasen die verschillende onderdelen van uw ontwikkelingscyclus vertegenwoordigen. Als u een pijplijn met meerdere fasen gebruikt, krijgt u meer inzicht in uw implementatieproces en kunt u eenvoudiger goedkeuringen en controles integreren.
In dit artikel maakt u twee App Service-exemplaren en bouwt u een YAML-pijplijn met drie fasen:
In een praktijkscenario hebt u mogelijk nog een fase voor de implementatie in productie, afhankelijk van uw DevOps-proces.
De voorbeeldcode in deze oefening is voor een .NET-webtoepassing voor een pretend space game die een leaderboard bevat om hoge scores weer te geven. U implementeert zowel in ontwikkelings- als faseringsexemplaren van Azure Web App voor Linux.
Vereisten
- Een GitHub-account waar u een opslagplaats kunt maken. Maak gratis een account.
- Een Azure-account met een actief abonnement. Gratis een account maken
- Een Azure DevOps-organisatie en -project. Maak gratis een account.
- Een mogelijkheid om pijplijnen uit te voeren op door Microsoft gehoste agents. U kunt een parallelle taak aanschaffen of u kunt een gratis laag aanvragen.
Het project fork
Fork de volgende voorbeeldopslagplaats op GitHub.
https://github.com/MicrosoftDocs/mslearn-tailspin-spacegame-web-deploy
De App Service-exemplaren maken
Voordat u uw pijplijn kunt implementeren, moet u eerst een App Service-exemplaar maken om te implementeren. U gebruikt Azure CLI om het exemplaar te maken.
Meld u aan bij het Azure-portaal.
Selecteer In het menu Cloud Shell en de Bash-ervaring .
Genereer een willekeurig getal dat de domeinnaam van uw web-app uniek maakt. Het voordeel van een unieke waarde is dat uw App Service-exemplaar geen naamconflict heeft met andere cursisten die deze zelfstudie voltooien.
webappsuffix=$RANDOM
Open een opdrachtprompt en gebruik een
az group create
opdracht om een resourcegroep te maken met de naam tailspin-space-game-rg die al uw App Service-exemplaren bevat. Werk delocation
waarde bij om uw dichtstbijzijnde regio te gebruiken.az group create --location eastus --name tailspin-space-game-rg
Gebruik de opdrachtprompt om een App Service-plan te maken.
az appservice plan create \ --name tailspin-space-game-asp \ --resource-group tailspin-space-game-rg \ --sku B1 \ --is-linux
Maak in de opdrachtprompt twee App Service-exemplaren, één voor elk exemplaar (Dev en Staging) met de
az webapp create
opdracht.az webapp create \ --name tailspin-space-game-web-dev-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|6.0" az webapp create \ --name tailspin-space-game-web-staging-$webappsuffix \ --resource-group tailspin-space-game-rg \ --plan tailspin-space-game-asp \ --runtime "DOTNET|6.0"
Geef met de opdrachtprompt beide App Service-exemplaren weer om te controleren of ze worden uitgevoerd met de
az webapp list
opdracht.az webapp list \ --resource-group tailspin-space-game-rg \ --query "[].{hostName: defaultHostName, state: state}" \ --output table
Kopieer de namen van de App Service-exemplaren die u wilt gebruiken als variabelen in de volgende sectie.
Uw Azure DevOps-project en -variabelen maken
Stel uw Azure DevOps-project en een build-pijplijn in. U voegt ook variabelen toe voor uw ontwikkel- en faseringsexemplaren.
Uw build-pijplijn:
- Bevat een trigger die wordt uitgevoerd wanneer er een codewijziging in vertakking is
- Definieert twee variabelen en
buildConfiguration
releaseBranchName
- Bevat een fase met de naam Build waarmee de webtoepassing wordt gebouwd
- Hiermee publiceert u een artefact dat u in een latere fase gaat gebruiken
De buildfase toevoegen
Meld u aan bij uw Azure DevOps-organisatie en ga naar uw project.
Ga naar Pijplijnen en selecteer vervolgens Nieuwe pijplijn of Pijplijn maken als u uw eerste pijplijn maakt.
Voer de stappen van de wizard uit door eerst GitHub te selecteren als de locatie van uw broncode.
U wordt mogelijk omgeleid naar GitHub om u aan te melden. Voer in dat geval uw GitHub-referenties in.
Wanneer u de lijst met opslagplaatsen ziet, selecteert u de opslagplaats.
U wordt mogelijk omgeleid naar GitHub om de Azure Pipelines-app te installeren. Als dat het zo is, selecteert u Goedkeuren en installeren.
Wanneer het tabblad Configureren wordt weergegeven, selecteert u Starter-pijplijn.
Vervang de inhoud van azure-pipelines.yml door deze code.
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' 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
Wanneer u klaar bent, selecteert u Opslaan en uitvoeren.
Exemplaarvariabelen toevoegen
Ga in Azure DevOps naar de pijplijnbibliotheek>.
Selecteer + Variabele groep.
Voeg onder Eigenschappen release toe voor de naam van de variabelegroep.
Maak twee variabelen om te verwijzen naar de hostnamen voor ontwikkeling en fasering. Vervang de waarde
1234
door de juiste waarde voor uw exemplaar.Variabelenaam Voorbeeldwaarde WebAppNameDev tailspin-space-game-web-dev-1234 WebAppNameStaging tailspin-space-game-web-staging-1234 Selecteer Opslaan om uw variabelen op te slaan.
De dev-fase toevoegen
Vervolgens gaat u uw pijplijn bijwerken om uw build te promoveren naar de Dev-fase .
Ga in Azure Pipelines naar Pipelines>Pipelines.
Selecteer Bewerken in het contextmenu om uw pijplijn te bewerken.
Werk azure-pipelines.yml bij om een dev-fase op te nemen. In de dev-fase doet uw pijplijn het volgende:
Uitvoeren wanneer de buildfase slaagt vanwege een voorwaarde
Een artefact downloaden van
drop
Implementeren naar Azure-app Service met een Azure Resource Manager-serviceverbinding
trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' 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: succeeded() 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: dev website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
Wijzig de
AzureWebApp@1
taak om uw abonnement te gebruiken.Selecteer Instellingen voor de taak.
Werk de
your-subscription
waarde voor azure-abonnement bij om uw eigen abonnement te gebruiken. Mogelijk moet u toegang autoriseren als onderdeel van dit proces. Als u een probleem ondervindt bij het autoriseren van uw resource in de YAML-editor, kunt u ook een serviceverbinding maken.Stel het app-type in op Web App in Linux.
Selecteer Toevoegen om de taak bij te werken.
Sla uw pijplijn op en voer deze uit.
De fase Fasering toevoegen
Ten slotte promoveert u de Dev-fase naar Fasering. In tegenstelling tot de Ontwikkelomgeving wilt u meer controle hebben in de faseringsomgeving, voegt u een handmatige goedkeuring toe.
Faseringsomgeving maken
Selecteer omgevingen in Azure Pipelines.
Selecteer Nieuwe omgeving.
Maak een nieuwe omgeving met de naamfasering en resource ingesteld op Geen.
Selecteer Goedkeuringen en controles op de pagina faseringsomgeving.
Selecteer Goedkeuringen.
Selecteer in Goedkeurders Gebruikers en groepen toevoegen en selecteer vervolgens uw account.
Schrijf in Instructies voor goedkeurders deze wijziging goedkeuren wanneer deze klaar is voor fasering.
Selecteer Opslaan.
Nieuwe fase toevoegen aan pijplijn
U voegt een nieuwe fase Staging
toe aan de pijplijn met een handmatige goedkeuring.
Bewerk uw pijplijnbestand en voeg de
Staging
sectie toe.trigger: - '*' variables: buildConfiguration: 'Release' releaseBranchName: 'release' 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: succeeded() 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: dev website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameDev)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip' - stage: 'Staging' displayName: 'Deploy to the staging environment' dependsOn: Dev 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: staging website' inputs: azureSubscription: 'your-subscription' appType: 'webAppLinux' appName: '$(WebAppNameStaging)' package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/*.zip'
Wijzig de
AzureWebApp@1
taak in de fase Fasering om uw abonnement te gebruiken.Selecteer Instellingen voor de taak.
Werk de
your-subscription
waarde voor azure-abonnement bij om uw eigen abonnement te gebruiken. Mogelijk moet u toegang autoriseren als onderdeel van dit proces.Stel het app-type in op Web App in Linux.
Selecteer Toevoegen om de taak bij te werken.
Ga naar de pijplijnuitvoering. Bekijk de build terwijl deze wordt uitgevoerd. Wanneer deze is bereikt
Staging
, wacht de pijplijn op handmatige goedkeuring van de release. U ontvangt ook een e-mailbericht met de goedkeuring van een pijplijn die in behandeling is.Controleer de goedkeuring en sta toe dat de pijplijn kan worden uitgevoerd.
Resources opschonen
Als u deze toepassing niet meer gaat gebruiken, verwijdert u de resourcegroep in Azure Portal en het project in Azure DevOps met de volgende stappen:
Uw resourcegroep opschonen:
Ga naar Azure Portal en meld u aan.
Selecteer Cloud Shell in de menubalk. Wanneer u hierom wordt gevraagd, selecteert u de Bash-ervaring .
Voer de volgende az group delete-opdracht uit om de resourcegroep te verwijderen die u hebt gebruikt.
tailspin-space-game-rg
az group delete --name tailspin-space-game-rg
Als u uw Azure DevOps-project, inclusief de build-pijplijn, wilt verwijderen, raadpleegt u Project verwijderen.