Azure Fundamentals · Lektion

Opbygning af en CI-pipeline med Azure Pipelines

Definér en YAML-pipeline, der udløses af pull requests, kører enhedstests og producerer et build-artefakt, og gennemgå derefter testresultater og kodedækning i portalen.

Lektion 2 af 413 trin

Opbygning af en CI-pipeline med Azure Pipelines er en gratis Azure Fundamentals-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Azure Fundamentals, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Azure Fundamentals-kurset indeholder 4 lektioner i alt.

Hvad er kontinuerlig integration?

Kontinuerlig integration (CI) er en praksis, hvor kodeændringer ofte flettes ind i en delt gren, og hver fletning automatisk udløser en build og en testkørsel. Målet er at opdage integrationsfejl tidligt — før de vokser sammen til store problemer, der er svære at løse. En god CI-pipeline bygger koden, kører enhedstests, måler kodedækning, udfører statisk analyse og producerer et artefakt, der kan udrulles, på få minutter. Azure Pipelines leverer automatiseringsmotoren til denne praksis.

YAML-pipeline-struktur

Azure Pipelines' CI-pipelines defineres i en azure-pipelines.yml-fil i roden af dit repository. YAML-filen angiver udløsere (hvornår pipelinen skal køre), en agentpulje (hvilken type agent der skal bruges) og et hierarki af faser, jobs og trin. Faser kører som standard sekventielt. Jobs i en fase kører som standard parallelt. Trin i et job kører sekventielt. Denne struktur giver dig detaljeret kontrol over pipelineforløbet.

# azure-pipelines.yml skeleton
trigger:
  branches:
    include:
    - main
    - 'feature/*'
  paths:
    exclude:
    - docs/**
    - '*.md'

pool:
  vmImage: ubuntu-latest

variables:
  buildConfiguration: Release
  nodeVersion: '18.x'

stages:
- stage: CI
  displayName: 'Build and Test'
  jobs:
  - job: Build
    displayName: 'Build Application'
    steps: []

Konfiguration af udløsere

Azure Pipelines understøtter flere typer udløsere. Grenudløsere kører pipelinen, når kode pushes til angivne grene. Udløsere for pullanmodninger (PR-udløsere) kører, når en PR oprettes eller opdateres mod målgrene — det er afgørende for at validere kode før en fletning. Planlagte udløsere kører på et fast tidspunkt (f.eks. natlige builds). Pipelineudløsere kæder pipelines sammen. Angiv trigger: none for at deaktivere automatiske kørsler og kun tillade manuel kørsel.

# Branch trigger
trigger:
  branches:
    include: [main, develop]

# Pull request trigger
pr:
  branches:
    include: [main]
  autoCancel: true  # Cancel previous runs when PR is updated

# Scheduled trigger (nightly build at 02:00 UTC)
schedules:
- cron: '0 2 * * *'
  displayName: 'Nightly Build'
  branches:
    include: [main]
  always: true  # Run even if no new commits

Trin: scripts og opgaver

Pipeline-trin er enten scripts (bash- eller PowerShell-kommandoer) eller opgaver (forudbyggede, parameteriserede enheder fra Azure DevOps Marketplace). Opgaver som NodeTool@0, DotNetCoreCLI@2 og Maven@3 indkapsler almindelige build-handlinger. Brug displayName på hvert trin, så pipeline-loggene er nemme at læse. Hvert trin kører i rækkefølge, og pipelinen mislykkes, hvis et trin afsluttes med en kode, der ikke er nul, medmindre du angiver continueOnError: true.

steps:
- task: NodeTool@0
  displayName: 'Install Node.js 18'
  inputs:
    versionSpec: '18.x'

- script: npm ci
  displayName: 'Install dependencies (clean install)'

- script: npm run lint
  displayName: 'Run ESLint'

- script: npm run build
  displayName: 'Build production bundle'

- script: npm test -- --ci --coverage
  displayName: 'Run unit tests with coverage'

Udgivelse af testresultater

Når du har kørt tests, skal du udgive resultaterne til Azure DevOps ved hjælp af opgaven PublishTestResults. Azure Pipelines fortolker resultatfiler i formaterne JUnit, NUnit, XUnit eller VSTest og viser antal beståede og mislykkede tests, testkørslens varighed og detaljer om de enkelte tests i brugergrænsefladen for pipelinekørslen. Testhistorikken registreres over tid, så du kan opdage ustabile tests og regressioner. Det er afgørende for at synliggøre kodekvaliteten på tværs af teamet.

# Example: Node.js project with Jest tests
steps:
- script: npm test -- --ci --reporters=jest-junit
  displayName: 'Run tests with JUnit reporter'
  env:
    JEST_JUNIT_OUTPUT_DIR: '$(Agent.TempDirectory)/test-results'

- task: PublishTestResults@2
  displayName: 'Publish test results'
  inputs:
    testResultsFormat: JUnit
    testResultsFiles: '$(Agent.TempDirectory)/test-results/**/*.xml'
  condition: succeededOrFailed()  # Publish even if tests fail

Udgivelse af kodedækning

Udgiv rapporter om kodedækning, så Azure Pipelines viser dækningsprocenter og tendenser i pipelinebrugergrænsefladen. Opgaven PublishCodeCoverageResults accepterer rapporter i Cobertura- eller JaCoCo-format. Kombiner dette med porte for grendækning — konfigurer en minimumstærskel for dækningen, og lad buildet mislykkes, hvis dækningen falder under den. Tendenser i dækningen hjælper med at identificere, når der tilføjes ny kode uden tilsvarende tests.

# Jest + coverage
- script: npm test -- --ci --coverage --coverageReporters=cobertura
  displayName: 'Run tests with coverage'

- task: PublishCodeCoverageResults@1
  displayName: 'Publish code coverage'
  inputs:
    codeCoverageTool: Cobertura
    summaryFileLocation: '$(System.DefaultWorkingDirectory)/coverage/cobertura-coverage.xml'
    reportDirectory: '$(System.DefaultWorkingDirectory)/coverage'

Pipelinevariabler og variabelgrupper

Gem pipelinekonfiguration i variabler, der defineres på pipeline-, fase- eller jobniveau i YAML. Brug hemmelige variabler til følsomme værdier (API-nøgler og adgangskoder) — angiv dem i pipelinebiblioteket (brugergrænsefladen) eller i variabelgrupper, og referer til dem i YAML. Variabelgrupper er genanvendelige samlinger af variabler, der deles på tværs af flere pipelines. Knyt en variabelgruppe til Azure Key Vault for automatisk at synkronisere hemmeligheder fra Key Vault til pipelinevariabler.

# Reference a variable group in a pipeline
variables:
- group: 'Production-Secrets'  # Linked to Azure Key Vault
- name: buildConfiguration
  value: Release

# Use a variable
steps:
- script: echo 'Building $(buildConfiguration) configuration'
- script: az webapp deploy --src-path drop.zip
  env:
    AZURE_SUBSCRIPTION_ID: $(AZURE_SUBSCRIPTION_ID)  # From Key Vault
    APP_API_KEY: $(APP_API_KEY)  # Secret, not printed in logs

Artefakter: Pakning af buildoutput

Efter et vellykket build skal du pakke outputtet som et pipelineartefakt, så efterfølgende faser (f.eks. udrulning) kan få adgang til det. Brug PublishPipelineArtifact til at uploade filer fra buildagenten til Azure DevOps' artefaktlager. Brug DownloadPipelineArtifact i en senere fase eller et senere job til at hente artefaktet. Det afkobler buildjobbet fra udrulningsjobbene, som kan køre på andre agenter eller i andre faser.

# Publish build artifact
- task: PublishPipelineArtifact@1
  displayName: 'Publish build artifact'
  inputs:
    targetPath: '$(System.DefaultWorkingDirectory)/dist'
    artifactName: webapp-drop
    publishLocation: pipeline

# In a later deployment job, download the artifact
- task: DownloadPipelineArtifact@2
  inputs:
    artifactName: webapp-drop
    targetPath: '$(Pipeline.Workspace)/drop'

- script: ls -la $(Pipeline.Workspace)/drop

Parallelle jobs til hurtigere builds

Kør uafhængige opgaver parallelt ved at definere flere jobs i en fase. Du kan f.eks. køre enhedstests og sikkerhedsscanning samtidig i stedet for sekventielt. Parallelle jobs kræver separate buildminutter, men kan reducere den samlede pipelinevarighed markant. Brug egenskaben dependsOn til at få et job til at vente på, at et eller flere andre jobs afsluttes, før det starter, så der oprettes en afhængighedsgraf i en fase.

stages:
- stage: CI
  jobs:
  - job: UnitTests
    displayName: 'Run unit tests'
    steps:
    - script: npm test

  - job: LintAndSecurity
    displayName: 'Lint and security scan'
    steps:
    - script: npm run lint
    - script: npm audit --audit-level=high

  - job: BuildArtifact
    displayName: 'Build and publish artifact'
    dependsOn: [UnitTests, LintAndSecurity]
    condition: succeeded('UnitTests') and succeeded('LintAndSecurity')
    steps:
    - script: npm run build

Buildvalidering med grenpolitikker

Knyt din CI-pipeline til en grenpolitik i Azure Repos, så den automatisk kører som en buildvalideringskontrol på pullanmodninger, der er rettet mod main. Fletning blokeres, indtil pipelinen er bestået. Kombiner flere kontroller: CI-pipelinen skal lykkes, mindst to reviewere skal godkende, alle kommentarer skal være løst, og der skal findes et tilknyttet arbejdselement. Det skaber en kvalitetsport, der gør det umuligt at flette fejlbehæftet kode ind i hovedgrenen.

# Add build validation via CLI
az repos policy build create \
  --blocking true \
  --branch main \
  --branch-match-type exact \
  --build-definition-id <pipeline-id> \
  --display-name 'CI Build Validation' \
  --enabled true \
  --project MyProject \
  --repository-id <repo-id> \
  --queue-on-source-update-only true \
  --manual-queue-only false \
  --valid-duration 720  # Pipeline result expires after 12 hours

Læsning af resultater fra pipelinekørsler

Når en pipelinekørsel er afsluttet, skal du gennemgå resultaterne i Azure DevOps-portalen. Fanen Oversigt viser det samlede resultat og tidsforbruget. Fanen Tests viser alle testresultater med filtrering efter resultat. Fanen Kodedækning viser dækningsprocenten og fremhæver linjer, der ikke er dækket. Klik på et job for at se logoutputtet trin for trin. Mislykkede pipelines viser det fejlslagne trin fremhævet med rødt sammen med det fulde fejloutput, så fejlen hurtigt kan diagnosticeres.

# View pipeline run results via CLI
az pipelines runs list \
  --pipeline-ids <pipeline-id> \
  --project MyProject \
  --query '[].{id:id, status:status, result:result, startTime:startTime}' \
  -o table

# View logs from a specific run
az pipelines runs logs list \
  --run-id <run-id> \
  --project MyProject

Hurtigt tjek

Test din forståelse af begreberne fra Microsoft Azure Fundamentals (AZ-900) i denne lektion.

Opsummering af lektionen

I denne lektion har du lært, at Azure Pipelines YAML definerer CI-pipelines med faser, jobs og trin til build, test og oprettelse af artefakter, at PR-udløsere og grenpolitikker håndhæver kvalitetsporte, der blokerer fletning af fejlbehæftet kode, og at opgaverne PublishTestResults og PublishCodeCoverageResults synliggør testkvaliteten på tværs af teamet. Som det næste ser vi på kontinuerlig udrulning til Azure.

Gratis at komme i gang

Lær Azure Fundamentals med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
30
Lektioner
120

Ofte stillede spørgsmål

Er lektionen “Opbygning af en CI-pipeline med Azure Pipelines” gratis?

Ja — hele teksten til “Opbygning af en CI-pipeline med Azure Pipelines” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Azure Fundamentals-kurset, skal du opgradere til CoddyKit PRO. Azure Fundamentals-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Opbygning af en CI-pipeline med Azure Pipelines”?

Definér en YAML-pipeline, der udløses af pull requests, kører enhedstests og producerer et build-artefakt, og gennemgå derefter testresultater og kodedækning i portalen. Du øver dig i Azure Fundamentals med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på Azure Fundamentals?

Der kræves ingen tidligere erfaring. Azure Fundamentals på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.

Hvor lang tid tager lektionen “Opbygning af en CI-pipeline med Azure Pipelines”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne Azure Fundamentals-lektion?

Ja. Alle Azure Fundamentals-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. Oversigt over Azure DevOps Services
  2. Opbygning af en CI-pipeline med Azure Pipelines
  3. Continuous deployment til Azure
  4. GitHub Actions i Azure
← Tilbage til Azure Fundamentals