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
- Ett GitHub-konto där du kan skapa en lagringsplats. Skapa ett konto kostnadsfritt.
- En Azure DevOps-organisation och ett projekt. Skapa ett kostnadsfritt konto.
- En möjlighet att köra pipelines på Microsoft-hanterade agenter. Du kan antingen köpa ett parallellt jobb eller begära en kostnadsfri nivå.
- Grundläggande kunskaper om YAML och Azure Pipelines. Mer information finns i Skapa din första pipeline.
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.
- 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'