0Pricing
Cloud & IT Cert Prep · Lektion

Eine CI-Pipeline mit Azure Pipelines erstellen

Definieren Sie eine YAML-Pipeline, die bei Pull Requests ausgelöst wird, führen Sie Unit-Tests aus und erzeugen Sie ein Buildartefakt. Prüfen Sie anschließend Testergebnisse und Codeabdeckung im Portal.

Eine CI-Pipeline mit Azure Pipelines erstellen ist eine kostenlose Cloud & IT Cert Prep-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cloud & IT Cert Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cloud & IT Cert Prep-Kurs umfasst insgesamt 4 Lektionen.

Was ist Continuous Integration?

Continuous Integration (CI) bezeichnet die Praxis, Codeänderungen häufig in einen gemeinsamen Branch zu integrieren, wobei jede Zusammenführung automatisch einen Build und einen Testlauf auslöst. Ziel ist es, Integrationsfehler frühzeitig zu erkennen, bevor daraus große und schwer behebbare Probleme entstehen. Eine gute CI-Pipeline erstellt den Build, führt Komponententests aus, misst die Codeabdeckung, führt eine statische Analyse durch und erzeugt innerhalb weniger Minuten ein bereitstellbares Artefakt. Azure Pipelines stellt die Automatisierungsengine für diese Praxis bereit.

Struktur einer YAML-Pipeline

CI-Pipelines von Azure Pipelines werden in einer Datei azure-pipelines.yml im Stammverzeichnis Ihres Repositorys definiert. Die YAML-Datei legt Trigger (wann die Pipeline ausgeführt wird), einen Pool (welcher Agenttyp verwendet wird) sowie eine Hierarchie aus Stages, Jobs und Steps fest. Stages werden standardmäßig nacheinander ausgeführt. Jobs innerhalb einer Stage werden standardmäßig parallel ausgeführt. Steps innerhalb eines Jobs werden nacheinander ausgeführt. Diese Struktur ermöglicht eine sehr genaue Steuerung des Ausführungsablaufs der Pipeline.

# 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: []

Trigger konfigurieren

Azure Pipelines unterstützt mehrere Triggertypen. Branch-Trigger führen die Pipeline aus, wenn Code in angegebene Branches gepusht wird. Pull-Request-Trigger (PR-Trigger) werden ausgelöst, wenn ein PR für Zielbranches geöffnet oder aktualisiert wird – das ist entscheidend, um Code vor dem Zusammenführen zu überprüfen. Geplante Trigger werden zu einer festgelegten Zeit ausgeführt (z. B. für nächtliche Builds). Pipeline-Trigger verketten Pipelines miteinander. Geben Sie trigger: none an, um automatische Ausführungen zu deaktivieren und nur die manuelle Ausführung zuzulassen.

# 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

Steps: Skripts und Tasks

Pipeline-Steps sind entweder Skripts (Bash- oder PowerShell-Befehle) oder Tasks (vorgefertigte, parametrisierte Einheiten aus dem Azure-DevOps-Marketplace). Tasks wie NodeTool@0, DotNetCoreCLI@2 und Maven@3 kapseln gängige Buildvorgänge. Verwenden Sie für jeden Step displayName, damit die Pipelineprotokolle gut lesbar sind. Jeder Step wird der Reihe nach ausgeführt, und die Pipeline schlägt fehl, wenn ein Step mit einem Code ungleich null beendet wird, sofern Sie nicht continueOnError: true festlegen.

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'

Testergebnisse veröffentlichen

Veröffentlichen Sie die Ergebnisse nach der Testausführung mit dem Task PublishTestResults in Azure DevOps. Azure Pipelines analysiert JUnit-, NUnit-, XUnit- oder VSTest-Ergebnisdateien und zeigt in der Benutzeroberfläche des Pipelineausführung die Anzahl bestandener und fehlgeschlagener Tests, die Dauer des Testlaufs sowie Details zu einzelnen Tests an. Der Testverlauf wird über die Zeit erfasst, sodass Sie instabile Tests und Regressionen erkennen können. Das ist entscheidend für die teamweite Transparenz der Codequalität.

# 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

Codeabdeckung veröffentlichen

Veröffentlichen Sie Berichte zur Codeabdeckung, damit Azure Pipelines Prozentsätze und Trends der Abdeckung in der Pipelinebenutzeroberfläche anzeigt. Der Task PublishCodeCoverageResults akzeptiert Berichte im Cobertura- oder JaCoCo-Format. Kombinieren Sie dies mit Gates für die Branch-Abdeckung: Konfigurieren Sie einen Mindestschwellenwert und lassen Sie den Build fehlschlagen, wenn die Abdeckung darunter fällt. Trends der Abdeckung helfen dabei zu erkennen, wenn neuer Code ohne entsprechende Tests hinzugefügt wird.

# 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'

Pipelinevariablen und Variablengruppen

Speichern Sie die Pipelinekonfiguration in Variablen, die in YAML auf Pipeline-, Stage- oder Jobebene definiert werden. Verwenden Sie für vertrauliche Werte (API-Schlüssel, Kennwörter) geheime Variablen – legen Sie diese in der Pipelinesammlung (Benutzeroberfläche) oder in Variablengruppen fest und verweisen Sie in YAML darauf. Variablengruppen sind wiederverwendbare Sammlungen von Variablen, die von mehreren Pipelines gemeinsam verwendet werden. Verknüpfen Sie eine Variablengruppe mit Azure Key Vault, um Geheimnisse aus Key Vault automatisch mit Pipelinevariablen zu synchronisieren.

# 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

Artefakte: Buildausgabe paketieren

Paketieren Sie die Ausgabe nach einem erfolgreichen Build als Pipelineartefakt, damit nachgelagerte Stages (z. B. für die Bereitstellung) darauf zugreifen können. Verwenden Sie PublishPipelineArtifact, um Dateien vom Build-Agent in den Azure-DevOps-Artefaktspeicher hochzuladen. Verwenden Sie in einer späteren Stage oder einem späteren Job DownloadPipelineArtifact, um das Artefakt abzurufen. Dadurch wird der Buildjob von den Bereitstellungsjobs entkoppelt, die auf anderen Agents oder in anderen Stages ausgeführt werden können.

# 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

Parallele Jobs für schnellere Builds

Führen Sie unabhängige Aufgaben parallel aus, indem Sie mehrere Jobs innerhalb einer Stage definieren. Führen Sie beispielsweise Komponententests und Sicherheitsscans gleichzeitig statt nacheinander aus. Parallele Jobs benötigen separate Buildminuten, können die Gesamtdauer der Pipeline jedoch deutlich verkürzen. Verwenden Sie die Eigenschaft dependsOn, damit ein Job vor dem Start auf den Abschluss eines oder mehrerer anderer Jobs wartet. So erstellen Sie innerhalb einer Stage einen Abhängigkeitsgraphen.

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

Buildvalidierung mit Branchrichtlinien

Verknüpfen Sie Ihre CI-Pipeline mit einer Branchrichtlinie in Azure Repos, damit sie bei Pull Requests für main automatisch als Buildvalidierungsprüfung ausgeführt wird. Das Zusammenführen ist blockiert, bis die Pipeline erfolgreich abgeschlossen wurde. Kombinieren Sie mehrere Prüfungen: Die CI-Pipeline muss erfolgreich sein, mindestens zwei Reviewer müssen genehmigen, alle Kommentare müssen aufgelöst sein, und ein verknüpftes Arbeitselement muss vorhanden sein. Dadurch entsteht ein Qualitätstor, das verhindert, dass fehlerhafter Code in den Main-Branch übernommen wird.

# 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

Ergebnisse von Pipelineausführungen lesen

Überprüfen Sie die Ergebnisse nach Abschluss einer Pipelineausführung im Azure-DevOps-Portal. Die Registerkarte Summary zeigt den Gesamtstatus und die Dauer an. Die Registerkarte Tests listet alle Testergebnisse auf und ermöglicht das Filtern nach Ergebnis. Die Registerkarte Code Coverage zeigt den Abdeckungsprozentsatz und hebt nicht abgedeckte Zeilen hervor. Klicken Sie auf einen beliebigen Job, um die schrittweise Protokollausgabe anzuzeigen. Bei fehlgeschlagenen Pipelines wird der fehlerhafte Step rot hervorgehoben und die vollständige Fehlerausgabe zur schnellen Diagnose angezeigt.

# 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

Kurze Überprüfung

Überprüfen Sie Ihr Verständnis der Konzepte aus Microsoft Azure Fundamentals (AZ-900), die in dieser Lektion behandelt wurden.

Zusammenfassung der Lektion

In dieser Lektion haben Sie gelernt: Azure-Pipelines-YAML definiert CI-Pipelines mit Stages, Jobs und Steps für Build, Tests und die Erstellung von Artefakten. PR-Trigger und Branchrichtlinien erzwingen Qualitätstore, die das Zusammenführen fehlerhaften Codes blockieren, und die Tasks PublishTestResults und PublishCodeCoverageResults machen die Testqualität im gesamten Team sichtbar. Als Nächstes sehen wir uns Continuous Deployment für Azure an.

Häufig gestellte Fragen

Ist die Lektion „Eine CI-Pipeline mit Azure Pipelines erstellen“ kostenlos?

Ja — der vollständige Text von „Eine CI-Pipeline mit Azure Pipelines erstellen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cloud & IT Cert Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cloud & IT Cert Prep-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Eine CI-Pipeline mit Azure Pipelines erstellen“?

Definieren Sie eine YAML-Pipeline, die bei Pull Requests ausgelöst wird, führen Sie Unit-Tests aus und erzeugen Sie ein Buildartefakt. Prüfen Sie anschließend Testergebnisse und Codeabdeckung im Port… Du übst Cloud & IT Cert Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Cloud & IT Cert Prep zu starten?

Keine Vorkenntnisse erforderlich. Cloud & IT Cert Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Eine CI-Pipeline mit Azure Pipelines erstellen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Cloud & IT Cert Prep-Lektion Code schreiben und ausführen?

Ja. Jede Cloud & IT Cert Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Überblick über Azure DevOps Services
  2. Eine CI-Pipeline mit Azure Pipelines erstellen
  3. Kontinuierliche Bereitstellung in Azure
  4. GitHub Actions in Azure
← Zurück zu Cloud & IT Cert Prep