Bygge en CI-pipeline med Azure Pipelines
Definer en YAML-pipeline som utløses ved pull requests, kjører enhetstester og produserer et build-artefakt, og gå deretter gjennom testresultater og kodedekning i portalen.
Bygge en CI-pipeline med Azure Pipelines er en gratis leksjon i Cloud & IT Cert Prep på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Cloud & IT Cert Prep, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Cloud & IT Cert Prep inneholder totalt 4 leksjoner.
Hva er kontinuerlig integrasjon
Kontinuerlig integrasjon (CI) er praksisen med å slå sammen kodeendringer til en delt gren ofte, der hver sammenslåing automatisk utløser en bygging og en testkjøring. Målet er å oppdage integrasjonsfeil tidlig — før de utvikler seg til store problemer som er vanskelige å løse. En god CI-pipeline bygger koden, kjører enhetstester, måler kodedekning, utfører statisk analyse og produserer et distribuerbart artefakt i løpet av noen minutter. Azure Pipelines tilbyr automatiseringsmotoren for denne praksisen.
Strukturen i en YAML-pipeline
CI-pipelines i Azure Pipelines defineres i filen azure-pipelines.yml i roten av repositoriet. YAML-filen angir utløsere (når pipelinen skal kjøre), en pool (hvilken agenttype som skal brukes) og et hierarki av stages, jobs og steps. Stages kjører sekvensielt som standard. Jobs i en stage kjører parallelt som standard. Steps i en job kjører sekvensielt. Denne strukturen gir Dem detaljert kontroll over pipelinens kjøringsflyt.
# 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: []Konfigurering av utløsere
Azure Pipelines støtter flere typer utløsere. Grenutløsere kjører pipelinen når kode sendes til angitte grener. Utløsere for pull requests (PR-utløsere) kjører når en PR opprettes eller oppdateres mot målgrener — noe som er avgjørende for å validere kode før den slås sammen. Planlagte utløsere kjører på et fast tidspunkt (for eksempel nattlige bygginger). Pipeline-utløsere kobler pipelines sammen. Angi trigger: none for å deaktivere automatiske kjøringer og bare tillate manuell kjøring.
# 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 commitsSteps: skript og oppgaver
Pipeline-steps er enten skript (bash- eller PowerShell-kommandoer) eller oppgaver (forhåndsbygde, parameteriserte enheter fra Azure DevOps Marketplace). Oppgaver som NodeTool@0, DotNetCoreCLI@2 og Maven@3 kapsler inn vanlige byggoperasjoner. Bruk displayName på hvert step for å få lesbare pipelinelogger. Hvert step kjører i rekkefølge, og pipelinen mislykkes hvis et step avsluttes med en kode som ikke er null, med mindre De angir 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'Publisering av testresultater
Etter at testene er kjørt, publiserer De resultatene til Azure DevOps ved hjelp av oppgaven PublishTestResults. Azure Pipelines tolker resultatfiler i formatene JUnit, NUnit, XUnit eller VSTest og viser antall beståtte og mislykkede tester, varigheten av testkjøringen og detaljer om de enkelte testene i brukergrensesnittet for pipelinekjøringen. Testhistorikken følges over tid, slik at De kan oppdage ustabile tester og regresjoner. Dette er avgjørende for å ha oversikt over kodekvaliteten i hele 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 failPublisering av kodedekning
Publiser rapporter om kodedekning, slik at Azure Pipelines viser dekningsprosenter og trender i pipelinegrensesnittet. Oppgaven PublishCodeCoverageResults godtar rapporter i Cobertura- eller JaCoCo-format. Kombiner dette med kontrollporter for grendekning — konfigurer en minstegrense for dekning, og la byggingen mislykkes hvis dekningen synker under denne grensen. Trender for kodedekning gjør det enklere å oppdage når det legges til ny kode uten tilsvarende tester.
# 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
Lagre pipelinekonfigurasjon i variabler som defineres på pipeline-, stage- eller jobbnivå i YAML. For sensitive verdier (API-nøkler og passord) bruker De hemmelige variabler — angi dem i pipelinebiblioteket (brukergrensesnittet) eller i variabelgrupper, og referer til dem i YAML. Variabelgrupper er gjenbrukbare samlinger av variabler som deles av flere pipelines. Koble en variabelgruppe til Azure Key Vault for automatisk å synkronisere hemmeligheter 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 logsArtefakter: pakking av byggresultatet
Etter en vellykket bygging pakker De resultatet i et pipelineartefakt, slik at etterfølgende stages (for eksempel distribusjon) får tilgang til det. Bruk PublishPipelineArtifact til å laste opp filer fra byggagenten til Azure DevOps-lagringen for artefakter. I en senere stage eller job bruker De DownloadPipelineArtifact for å hente artefaktet. Dette frikobler byggjobben fra distribusjonsjobbene, som kan kjøre på andre agenter eller i andre stages.
# 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)/dropParallelle jobber for raskere bygginger
Kjør uavhengige oppgaver parallelt ved å definere flere jobs i en stage. Kjør for eksempel enhetstester og sikkerhetsskanning samtidig i stedet for sekvensielt. Parallelle jobber krever separate byggeminutter, men kan redusere den totale pipelinevarigheten betydelig. Bruk egenskapen dependsOn for å få en job til å vente på at én eller flere andre jobber fullføres før den starter, slik at De oppretter en avhengighetsgraf i en stage.
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 buildByggvalidering med grenpolicyer
Koble CI-pipelinen til en grenpolicy i Azure Repos, slik at den kjører automatisk som en byggvalideringskontroll på pull requests som er rettet mot main. Sammenslåing blokkeres til pipelinen er bestått. Kombiner flere kontroller: CI-pipelinen må være vellykket, minst to anmeldere må godkjenne, alle kommentarer må være løst, og et tilknyttet arbeidselement må finnes. Dette oppretter en kvalitetsport som gjør det umulig å slå sammen ødelagt kode 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 hoursTolke resultater fra pipelinekjøringen
Når en pipelinekjøring er fullført, går De gjennom resultatene i Azure DevOps-portalen. Fanen Summary viser samlet resultat, om kjøringen besto eller mislyktes, samt tidsbruk. Fanen Tests viser alle testresultater, med filtrering etter utfall. Fanen Code Coverage viser dekningsprosenten og fremhever linjer som ikke er dekket. Klikk på en jobb for å se loggresultatet trinn for trinn. Mislykkede pipelines viser steget som mislyktes, fremhevet i rødt, med fullstendig feilutdata for rask diagnostisering.
# 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 MyProjectKort kontroll
Test forståelsen Deres av konseptene i Microsoft Azure Fundamentals (AZ-900) fra denne leksjonen.
Oppsummering av leksjonen
I denne leksjonen lærte De at Azure Pipelines YAML definerer CI-pipelines med stages, jobs og steps for bygging, testing og oppretting av artefakter, at PR-utløsere og grenpolicyer håndhever kvalitetsporter som blokkerer sammenslåing av ødelagt kode, og at oppgavene PublishTestResults og PublishCodeCoverageResults synliggjør testkvaliteten i hele teamet. Deretter skal vi se nærmere på kontinuerlig distribusjon til Azure.
Lær deg Cloud & IT Cert Prep med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 150
- Leksjoner
- 600
Ofte stilte spørsmål
Er leksjonen «Bygge en CI-pipeline med Azure Pipelines» gratis?
Ja – hele teksten i «Bygge en CI-pipeline med Azure Pipelines» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Cloud & IT Cert Prep-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Cloud & IT Cert Prep inneholder totalt 4 leksjoner.
Hva lærer jeg i «Bygge en CI-pipeline med Azure Pipelines»?
Definer en YAML-pipeline som utløses ved pull requests, kjører enhetstester og produserer et build-artefakt, og gå deretter gjennom testresultater og kodedekning i portalen. Du øver på Cloud & IT Cert Prep med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Cloud & IT Cert Prep?
Ingen tidligere erfaring er nødvendig. Cloud & IT Cert Prep på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Bygge en CI-pipeline med Azure Pipelines»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Cloud & IT Cert Prep-leksjonen?
Ja. Alle Cloud & IT Cert Prep-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Oversikt over Azure DevOps Services
- Bygge en CI-pipeline med Azure Pipelines
- Kontinuerlig distribusjon til Azure
- GitHub Actions i Azure