Delen via


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

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.

  1. Meld u aan bij het Azure-portaal.

  2. Selecteer In het menu Cloud Shell en de Bash-ervaring .

  3. 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    
    
  4. 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 de location waarde bij om uw dichtstbijzijnde regio te gebruiken.

    az group create --location eastus --name tailspin-space-game-rg
    
  5. 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
    
  6. 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"
    
  7. 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
    
  8. 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 buildConfigurationreleaseBranchName
  • 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

  1. Meld u aan bij uw Azure DevOps-organisatie en ga naar uw project.

  2. Ga naar Pijplijnen en selecteer vervolgens Nieuwe pijplijn of Pijplijn maken als u uw eerste pijplijn maakt.

  3. Voer de stappen van de wizard uit door eerst GitHub te selecteren als de locatie van uw broncode.

  4. U wordt mogelijk omgeleid naar GitHub om u aan te melden. Voer in dat geval uw GitHub-referenties in.

  5. Wanneer u de lijst met opslagplaatsen ziet, selecteert u de opslagplaats.

  6. U wordt mogelijk omgeleid naar GitHub om de Azure Pipelines-app te installeren. Als dat het zo is, selecteert u Goedkeuren en installeren.

  1. Wanneer het tabblad Configureren wordt weergegeven, selecteert u Starter-pijplijn.

  2. 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
    
  3. Wanneer u klaar bent, selecteert u Opslaan en uitvoeren.

Exemplaarvariabelen toevoegen

  1. Ga in Azure DevOps naar de pijplijnbibliotheek>.

  2. Selecteer + Variabele groep.

  3. Voeg onder Eigenschappen release toe voor de naam van de variabelegroep.

  4. 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
  5. 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 .

  1. Ga in Azure Pipelines naar Pipelines>Pipelines.

  2. Selecteer Bewerken in het contextmenu om uw pijplijn te bewerken.

    Schermopname van het menu-item Bewerken selecteren.

  3. 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'
      
  4. Wijzig de AzureWebApp@1 taak om uw abonnement te gebruiken.

    1. Selecteer Instellingen voor de taak.

      Schermopname van de optie Instellingen in de YAML-editortaak.

    2. 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.

      Schermopname van menu-item azure-abonnement.

    3. Stel het app-type in op Web App in Linux.

    4. Selecteer Toevoegen om de taak bij te werken.

  5. 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

  1. Selecteer omgevingen in Azure Pipelines.

  2. Selecteer Nieuwe omgeving.

  3. Maak een nieuwe omgeving met de naamfasering en resource ingesteld op Geen.

  4. Selecteer Goedkeuringen en controles op de pagina faseringsomgeving.

    Schermopname van de menuoptie goedkeuringen en controles.

  5. Selecteer Goedkeuringen.

  6. Selecteer in Goedkeurders Gebruikers en groepen toevoegen en selecteer vervolgens uw account.

  7. Schrijf in Instructies voor goedkeurders deze wijziging goedkeuren wanneer deze klaar is voor fasering.

  8. Selecteer Opslaan.

Nieuwe fase toevoegen aan pijplijn

U voegt een nieuwe fase Staging toe aan de pijplijn met een handmatige goedkeuring.

  1. 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'
    
  2. Wijzig de AzureWebApp@1 taak in de fase Fasering om uw abonnement te gebruiken.

    1. Selecteer Instellingen voor de taak.

      Schermopname van de optie Instellingen in de YAML-editortaak.

    2. 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.

      Schermopname van menu-item azure-abonnement.

    3. Stel het app-type in op Web App in Linux.

    4. Selecteer Toevoegen om de taak bij te werken.

  3. 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.

    Schermopname van wachten op goedkeuring van pijplijn.

  4. Controleer de goedkeuring en sta toe dat de pijplijn kan worden uitgevoerd.

    Schermopname van handmatige validatiecontrole.

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:

  1. Ga naar Azure Portal en meld u aan.

  2. Selecteer Cloud Shell in de menubalk. Wanneer u hierom wordt gevraagd, selecteert u de Bash-ervaring .

    Een schermopname van Azure Portal met het selecteren van het menu-item Cloud Shell.

  3. 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.