Dela via


Skapa en pipeline med faser

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

I den här artikeln får du lära dig hur du skapar och kör en mer komplex YAML-pipeline med flera steg och villkor. Exempelpipelinen innehåller bygg-, test- och distributionssteg och har även valfria faser för alternativa distributioner och återställningar. Med flera steg kan du isolera olika delar av pipelinen, förbättra kvalitetskontroll och säkerhet, få bättre insyn i pipelinens förlopp och minska risken. Med återställningssteget kan du snabbt återgå till en stabil version om något går fel, vilket förbättrar tillförlitligheten och stabiliteten.

Den här koden fungerar för de flesta scenarier men innehåller inte språk- eller plattformsspecifika krav. Som ett nästa steg anpassar du pipelinen efter dina specifika implementeringsbehov.

Förutsättningar

1. Skapa byggfasen

I den Build fasen återställer du beroenden och kör enhetstester för att se till att koden är redo för testning och distribution. Om ditt program behöver kompilera källkoden gör du det i byggfasen.

trigger:
- main

pool:
  vmImage: 'ubuntu-latest'

stages:
- stage: Build
  displayName: 'Build Stage'
  jobs:
  - job: BuildJob
    displayName: 'Build Job'
    steps:
    - script: |
        echo "Restoring project dependencies..."
      displayName: 'Restore dependencies'
    - script: |
        echo "Running unit tests..."
      displayName: 'Run unit tests'

2. Lägg till teststeget

Test-fasen kör tester på projektet och publicerar vanligtvis testresultaten till Azure DevOps. Mer information om hur du publicerar testresultat finns i uppgiften Publicera testresultat.

Teststeget körs bara om byggsteget har slutförts framgångsrikt och steget inte kan hoppas över.

Eftersom isSkippable är inställt på falseär alternativet att hoppa över teststeget inte tillgängligt i Azure DevOps-användargränssnittet.

Skärmbild av fasen som inte kan hoppas över.

- stage: Test
  displayName: 'Test Stage'
  dependsOn: Build
  isSkippable: false
  jobs:
  - job: TestJob
    displayName: 'Test Job'
    steps:
    - script: |
        echo "Running unit tests..."
      displayName: 'Run unit tests'

3. Distribuera till mellanlagring

Den DeployToStaging fasen beror på vilken Test fas som ska köras. Det DeployStagingJobWithValidation jobbet kräver manuellt godkännande. Den manuella valideringsuppgiften pausar pipelinekörningen och väntar på en manuell interaktion. En användare måste verifiera fasen innan körningen fortsätter. Att ha ett manuellt godkännande i pipelinen lägger till en annan säkerhetsnivå, hjälper till att minska riskerna och ser till att alla ändringar granskas av lämpliga intressenter.

Poolen för det manuella godkännandet är server. Manuella valideringar körs endast på en serverpool.

- stage: DeployToStaging
  displayName: 'Deploy to Staging'
  dependsOn: Test
  jobs:
  - job: DeployStagingJob
    displayName: 'Deploy to Staging Job'
    pool:
      vmImage: 'ubuntu-latest'
    steps:
    - script: |
        echo "Build staging job..."
      displayName: 'Build and deploy to staging'

  - job: DeployStagingJobWithValidation
    pool: server
    timeoutInMinutes: 4320 # job times out in 3 days
    displayName: 'Deploy to Staging Job'
    steps:
    - task: ManualValidation@1
      timeoutInMinutes: 1440 # task times out in 1 day
      inputs:
        notifyUsers: user@example.com
        instructions: 'Please validate the stage configuration and resume'
        onTimeout: 'resume'

4. Distribuera till produktionsmiljö

I DeployToProduction-fasen distribueras programmet till produktionsmiljön, men bara om DeployToStaging-fasen lyckas och källgrenen antingen är main eller release.

Den manuella valideringsuppgiften här lägger till ett andra mänskligt valideringssteg för säkerhet och kvalitetskontroll. Vi använde också en manuell valideringsaktivitet i DeployToStaging-fasen.

- stage: DeployToProduction
  displayName: 'Deploy to Production'
  dependsOn: DeployToStaging
  lockBehavior: sequential
  condition: and(succeeded(), in(variables['Build.SourceBranch'], 'refs/heads/main', 'refs/heads/release'))
  jobs:
  - job: DeployProductionJob
    displayName: 'Deploy to Production Job'
    steps:
    - script: |
        echo "Deploying to production..."
        # Add your deployment commands here
      displayName: 'Run deployment commands'
  - job: waitForValidation
    displayName: Wait for external validation
    pool: server
    timeoutInMinutes: 4320 # job times out in 3 days
    steps:
    - task: ManualValidation@1
      timeoutInMinutes: 1440 # task times out in 1 day
      inputs:
        notifyUsers: user@example.com
        instructions: 'Please validate the build configuration and resume'
        onTimeout: 'resume'

5. Lägg till valfria alternativa produktions- och återställningssteg

Två valfria steg, DeployToAlternateProduction och Rollback, placeras manuellt i kö. I DeployToAlternateProduction-fasen kan du ha en produktionsmiljö för säkerhetskopiering redo om den primära miljön misslyckas. Detta förbättrar programmets övergripande tillförlitlighet och tillgänglighet. Du kanske också vill ha en alternativ distributionsmiljö för haveriberedskap eller testning och validering. Mer komplicerade distributionsstrategier finns i Distributionsjobb och Lägg till steg, beroenden och villkor.

Rollback-fasen ger ett säkerhetsnät för att återställa programmet till ett tidigare stabilt tillstånd om något går fel under eller efter en distribution. Detta kan bero på ett distributionsfel, bugg, efterlevnadskrav, haveriberedskap eller annat problem. En återställningsfas är nödvändig för att upprätthålla programmets stabilitet och tillförlitlighet.

- stage: DeployToAlternateProduction
  displayName: 'Deploy to Alternate Production'
  condition: succeeded()
  trigger: manual
  jobs:
  - job: DeployAlternateProductionJob
    displayName: 'Deploy to Alternate Production Job'
    steps:
    - script: |
        echo "Deploying to alternate production..."
        # Add your deployment commands here
      displayName: 'Run deployment commands'

- stage: Rollback
  displayName: 'Rollback Stage'
  trigger: manual
  jobs:
  - job: RollbackJob
    displayName: 'Rollback Job'
    steps:
    - script: |
        echo "Rolling back the deployment..."
        # Add your rollback commands here
      displayName: 'Run rollback commands'

Nästa steg