Optimieren und Überwachen deiner Pipelines
Früher in meiner Karriere war der Aufbau von Pipelines nicht die größte Herausforderung - eine schnelle und zuverlässige Pipeline zu haben schon. Eine gut optimierte Pipeline sorgt nicht nur für schnellere Builds, sondern verringert auch die Frustration im Team, senkt die Bereitstellungsrisiken und beschleunigt die Bereitstellung.
Ich verrate dir einige Tipps und Strategien, mit denen du deine Azure DevOps Pipelines schnell, organisiert und zuverlässig halten kannst.
Pipeline-Caching
Die Installation von Abhängigkeiten ist ein weiterer häufiger Engpass in der Pipeline. Egal ob du mit npm, .NET oder anderen Paketmanagern arbeitest, das wiederholte Herunterladen der gleichen Abhängigkeiten kann viel Zeit kosten. Das Zwischenspeichern von Abhängigkeiten und Artefakten zwischen den Läufen verkürzt die Ausführungszeit drastisch.
Hier erfährst du, wie du Abhängigkeiten in Azure Pipelines zwischenspeichern kannst.
Zuerst musst du die Paketmanager identifizieren, wie z.B.:
- Node.js (
node_modules) - NuGet-Pakete
- Python (
pipPakete) - Maven/Gradle-Abhängigkeiten
Azure Pipelines unterstützt Caching-Mechanismen, wie z. B. die Aufgabe Cache@2, mit der du Abhängigkeiten zwischen Pipeline-Läufen zwischenspeichern kannst.
Nehmen wir als Beispiel ein einfaches Caching für Node.js:
# This task is used to cache files to speed up your pipeline.
- task: Cache@2 # This is the task name for caching files in Azure Pipelines.
inputs:
# Key is used to identify the cache. It combines npm (package manager), operating system (OS), and package-lock.json files.
key: 'npm | "$(Agent.OS)" | package-lock.json'
# RestoreKeys is an optional value used when the specific cache key is not found. It helps to find a fallback cache.
restoreKeys: |
npm | "$(Agent.OS)"
# Path defines the location of files or folders to be cached.
# Here, we are caching the 'node_modules' directory to avoid reinstalling dependencies.
path: '$(Build.SourcesDirectory)/node_modules'
# CacheHitVar is a variable that stores whether the cache was successfully used (restored).
# This can be checked later in the pipeline to decide if tasks need to run.
cacheHitVar: 'NPM_CACHE_RESTORED'
Du kannst dann die Installation überspringen, wenn sie im Cache ist. Dies ist ein cleverer Check, bevor du die Installation von npm abschließt. Es ist eine effiziente bedingungsbasierte Logik.
Nehmen wir unten ein einfaches Beispiel:
# This step runs the command to install Node.js dependencies using npm.
- script: npm install # Installs packages listed in the package.json file.
# The condition checks whether the cache was restored successfully.
# This step will run if the cache is not restored ('NPM_CACHE_RESTORED' is not true).
condition: ne(variables.NPM_CACHE_RESTORED, 'true') # Run only if the cache is not restored.
Dieses Beispiel für einfaches Caching für eine Node.js-Anwendung speichert das Cache-Verzeichnis npm mit package-lock.json als Schlüssel. Wenn sich deine Abhängigkeiten nicht ändern, stellt es sie wieder her und spart so bei jedem Build Minuten.
Ich habe erlebt, dass Caching die Erstellungszeit drastisch reduziert, vor allem bei großen Projekten, aber nur, wenn die Cache-Schlüssel sorgfältig ausgewählt werden. In einem meiner letzten Projekte konnte ich so die Erstellungszeit einer Node.js-Anwendung um 55 % reduzieren.
Überwachung des Zustands der Pipeline
Eine erfolgreiche Pipeline besteht nicht nur aus grünen Häkchen, Sichtbarkeit und schnellem Feedback. Wenn etwas kaputt geht, soll dein Team sofort Bescheid wissen. Hier erfährst du, wie du den Problemen einen Schritt voraus bist.
Wie man Azure DevOps Dashboards einrichtet
Azure DevOps bietet integrierte Widgets zur Anzeige des Pipelinestatus, der letzten Läufe, der Fehlerraten und der durchschnittlichen Dauer.
- Zuerst navigierst du zu Dashboards unter deinem Projekt.

- Klicken Sie dann auf Neues Dashboard oder verwende ein bestehendes.

- Du kannst Widgets hinzufügen wie: Geschichte bauen, Übersicht über die Release Pipeline, Testergebnisse Trendund mehr.

Diese Lernpfade sind wichtig, um Trends beim Bestehen und Nichtbestehen zu verfolgen, zu sehen, welche Umgebungen problematisch sind, und vieles mehr.
Konfigurieren von Warnungen für fehlgeschlagene Pipelines
- Gehe unten links in deinem Projekt auf Projekt-Einstellungen.

- Klick Benachrichtigungen.

- Dann klicken Sie auf Neues Abonnement.

Gehen wir von einem Szenario aus: Im Abschnitt Kategorie wählst du Build; im Abschnitt Vorlage wählst du "A build fails" und klickst auf Weiter.
Du hast eine Schnittstelle wie die folgende:

- Klicken Sie abschließend auf Fertigstellen.
- In den Benachrichtigungen Abschnitt kannst du die Build Beschreibung auf den "Ein Build schlägt fehl" überprüfen, die wir zuvor erstellt haben.

Ich habe einmal einen kritischen Einsatzfehler verpasst, weil keine Warnmeldungen eingerichtet waren. Seitdem habe ich für jeden Produktionseinsatz Teamwarnungen eingerichtet und konfiguriert. Auf diese Weise verpasse ich nie einen fehlerhaften Build oder eine Verzögerung in meinem Veröffentlichungszyklus.
Analyse der Pipeline-Leistung
Wir wissen, dass deine Pipeline, selbst wenn sie funktioniert, langsam sein kann und langsame Pipelines die Produktivität beeinträchtigen. Das frühzeitige Erkennen von Engpässen spart also später Ärger.
Pipeline-Metriken geben Aufschluss über die Leistung von Builds und Deployments. So kommst du an sie heran.
Zuerst musst du Folgendes aktivieren Analytics-Ansichten unter den Projekteinstellungen und eine Verbindung zu Power BI herstellen oder über die integrierten Diagramme erkunden.
Den Zustand der Pipeline überwachen
- Unter den Pipelines Abschnitt, gehen Sie zu Analytik.
- Sieh dir Kennzahlen wie die Durchlaufrate der Pipeline, die Durchlaufrate der Tests und die Dauer der Pipeline an.

Wir wollen uns genauer ansehen, welche wichtigen Kennzahlen wir in der Analytik überwachen können und warum sie wichtig sind:
|
Metrisch |
Warum es wichtig ist |
|
Trends der Baudauer |
So kannst du Verlangsamungen im Laufe der Zeit leicht erkennen. |
|
Ausfallrate nach Branche |
Dies hilft, instabile Merkmale zu erkennen. |
|
Zeit in der Warteschlange |
Dies hilft, Engpässe bei den Agenten zu erkennen. |
Vor ein paar Monaten habe ich an der Pipeline eines Kunden gearbeitet, undwas dabei besonders auffiel, war die Time in Queue. Ich habe einmal festgestellt, dass mein Team und ich einen selbst gehosteten Agentenpool überlastet hatten und 40 % unserer Pipelinezeit damit verbracht haben, auf einen verfügbaren Runner zu warten. Niemand hat es kommen sehen, bis die Analysen es offensichtlich gemacht haben.
Wir könnten das beheben, indem wir zwei weitere selbst gehostete Agenten hinzufügen und die Last nach Auftragsart verteilen. Die Ergebnisse zeigten sich sofort: Die durchschnittliche Bauzeit für die Pipeline sank um etwa 35 %.
Überwachung anhand von Protokollen
Abgesehen von den Metriken sind die Timeline-Logs also Gold wert, vor allem bei lang laufenden Aufgaben. Im Laufe der Jahre habe ich in kritischen Schritten von Skripten immer wieder benutzerdefinierte Protokollmarkierungen eingefügt, um genaue Verzögerungen festzustellen.
Lass uns ein einfaches Beispiel nehmen:
# This step prints a message to the console in the pipeline logs.
# It helps to mark the start of the dependency installation process.
echo "=== START: Dependency Install ===" # Display a message indicating the beginning of dependency installation.Best Practices für Azure Pipelines
Nachdem wir uns nun mit den Kerndiensten von Azure Pipelines und vielen weiteren Diensten befasst haben, wollen wir uns nun ansehen, wie du das Beste aus ihnen herausholen kannst, indem du diese Best Practices befolgst.
Lass uns von der Leistung zur Struktur übergehen, denn eine schnelle Pipeline, die schwer zu pflegen ist, schadet jedem Team.
Organisieren von Pipelines für Teams
Wenn mehrere Teams oder Umgebungen Pipelines gemeinsam nutzen, wird es oft unübersichtlich. Du wirst Struktur brauchen. Eine riesige Pipeline für Entwicklungs-, Staging- und Produktionsumgebungen führt zu Chaos.
Um deine Pipeline zu organisieren, musst du sie in Umgebungen unterteilen. Schauen wir uns im Folgenden eine einfache Strukturan.
|
Umwelt |
Pipeline Name |
Auslöser |
|
Entwicklung |
|
Feature-Zweige (Läuft bei jedem Commit) |
|
Inszenierung |
|
Pull Requests → Staging (Manueller Trigger) |
|
Produktion |
|
Manuelle oder freigegebene Pipelines (Genehmigung erforderlich) |
Die wichtigsten Dinge, die du aus dieser einfachenStruktur verstehen kannst:
- Jede Datei wird aus gemeinsamen Vorlagen gezogen.
- Jede Datei verwendet umgebungsspezifische Variablen.
- Jede Datei steuert den Zugriff über Pipeline-Berechtigungen.
Die Erfahrung zeigt, dass diese Trennung das Debugging erleichtert und es jüngeren Entwicklern ermöglicht, in der Entwicklungsumgebung zu arbeiten, ohne die Produktionsumgebung zu gefährden.
Vorlagen und wiederverwendbaren Code verwenden
Bei DevOps geht es darum, manuelle Arbeitsabläufe zu reduzieren und die Automatisierung des gesamten Softwareentwicklungsprozesses zu verbessern.
YAML-Code ist fehleranfällig, wenn er zwischen Projekten kopiert und eingefügt wird. Azure DevOps bietet Pipeline-Vorlagen für die DRY-Einrichtung (Don't Repeat Yourself) über YAML-Pipelines. Du kannst die YAML-Pipeline-Vorlagen projektübergreifend wiederverwenden, deine Pipelines einheitlich gestalten und sogar die Bearbeitungszeit der Pipelines reduzieren.
Nehmen wir ein einfaches wiederverwendbares Build-Template als Beispiel.
Definiere zunächst deine Build-Vorlage, build-template.yml:
# Here we configure the platform and the build configuration.
parameters:
buildPlatform: 'Any CPU' # This specifies the build platform (e.g., Any CPU, x86, x64).
buildConfiguration: 'Release' # This specifies the build configuration (Release) to avoid warning.
# A pipeline is composed of steps (a series of tasks that will be executed)
steps:
- task: DotNetCoreCLI@2 # Task for running .NET Core commands in the pipeline.
inputs:
command: 'build' # This runs the 'build' command to compile the project(s).
projects: '**/*.csproj' # This specifies to build all .csproj files in the repository.
arguments: '--configuration ${{ parameters.buildConfiguration }}'
# This passes the build configuration parameter (e.g., Release or Debug) to the command.
Verwende deine Build-Vorlage in deiner Hauptpipeline:
# A pipeline job is a group of tasks. Here, the job is named 'Build'.
jobs:
- job: Build # The job name where the build process occurs.
# Steps define the tasks or actions the pipeline will perform.
steps:
- template: templates/build-template.yml # Reference an external YAML template for reusable steps.
Geheimnisse und Variablen verwalten
Bei der Arbeit an Projekten, insbesondere in kollaborativen Umgebungen, ist es üblich, sensible Informationen wie Datenbankverbindungsstrings, API-Schlüssel, Passwörter oder Token zu verwenden. Wenn diese Geheimnisse in deinem Code fest kodiert sind oder in Protokollen auftauchen, können sie leicht kompromittiert werden.
Sehen wir uns an, wie wir unsere Geheimnisse und Variablen mit Azure Pipelines Geheimnissen und Variablengruppen sicher verwalten können.
Schritt 1: Erstellen einer Variablengruppe
- Klicken Sie auf die Pipelines Registerkarte in der linken Seitenleiste.
- Klicken Sie im Abschnitt Pipelines auf Bibliothek.

- Erstelle eine Variablengruppe:
- Klicken Sie auf die Variablengruppen Registerkarte.

- Klicken Sie auf das Feld Variablengruppe hinzufügen Schaltfläche.
- Gib einen Namen für deine Variablengruppe ein (z. B.
MyAppSecrets).

Schritt 2: Hinzufügen von Geheimnissen zur Variablengruppe
- Variablen hinzufügen:
- In der Variablengruppe klickst du auf Hinzufügen um eine neue Variable zu erstellen.

- Gib den Namen der Variablen ein (z. B.
DB_CONNECTION_STRING). - Markiere das Kästchen mit der Aufschrift Diesen Wert geheim halten um sicherzustellen, dass er als Geheimnis behandelt wird.
- Gib den Wert der Variablen ein (z. B. den Verbindungsstring meiner Datenbank).

- Klicke auf Speichern um die Variable zu speichern.

Schritt 3: Geheimnisse in deiner Pipeline verwenden
Jetzt, wo du eine Variablengruppe mit Geheimnissen erstellt hast, kannst du diese Variablen in deiner Pipeline-YAML-Datei verwenden.
- Verweise auf die Variablengruppe: Füge die Variablengruppe zu deiner Pipeline-YAML-Datei hinzu:
variables:
- group: MyAppSecrets
- Nutze die Geheimnisse in deinen Schritten: Du kannst die Geheimnisse in deinen Pipelineschritten mit der Syntax
$(VariableName)referenzieren. Hier ist ein Beispiel dafür, wie duDB_CONNECTION_STRINGin einem Scriptschritt verwenden kannst:
# This defines the trigger for the pipeline.
# The pipeline runs automatically whenever changes are pushed to the 'main' branch.
trigger:
- main # Trigger the pipeline on changes to the 'main' branch.
# The pool specifies the environment where the pipeline will run.
# 'ubuntu-latest' means the pipeline will use the latest Ubuntu operating system image.
pool:
vmImage: 'ubuntu-latest' # Use the latest Ubuntu image provided by Azure Pipelines.
# Variables section defines reusable values for the pipeline.
# 'group: MyAppSecrets' links to a variable group that stores sensitive information like secrets.
variables:
- group: MyAppSecrets # Load secrets, such as database credentials, from a variable group.
# Steps define the tasks that the pipeline will execute one by one.
steps:
- script: |
echo "Connecting to the database..." # Print a message indicating the start of database connection.
echo "Connection String: $(DB_CONNECTION_STRING)" # Display the database connection string from the variable group.
displayName: 'Connect to Database' # A simple name for this step that appears in the pipeline logs.
Schritt 4: Betrieb der Pipeline
- Sobald du deine YAML-Datei gespeichert hast, gehst du zu den Pipelines und klicke auf Pipeline ausführen.
- Nachdem die Pipeline gelaufen ist, kannst du deine Logs überprüfen. Du wirst feststellen, dass der geheime Wert versteckt ist, damit deine sensiblen Informationen sicher sind.
Fazit
In diesem Tutorial gehen wir den gesamten Weg der Nutzung von Azure Pipelines durch - vom Einrichten deiner ersten Pipeline bis hin zum Aufbau, Testen, Bereitstellen, Überwachen und Optimieren.
Die Einführungsphase erfordert Übung. Fange einfach an, verbessere dich ständig und mit der Zeit wirst du Vertrauen und Sicherheit im Umgang mit CI/CD-Workflows gewinnen. Azure Pipelines gibt dir die Werkzeuge, du bringst die Iteration und das Lernen mit.
Mit konsequenter Arbeit kannst du deinen Entwicklungsprozess optimieren und sicher sein, dass du qualitativ hochwertige Software in großem Umfang bereitstellen kannst.
Um tiefer in Azure DevOps und Microsoft Azure einzutauchen, schaudir die folgenden Ressourcen an:
- Azure DevOps Tutorial - Dieses Tutorial führt dich durch Azure DevOps und macht CI/CD einfacher denn je.
- Microsoft Azure verstehen - Schaffe dir eine solide Grundlage in Microsoft Azure und nutze die Möglichkeiten des Cloud Computing.
- Microsoft Azure Grundlagen (AZ-900) - Mach dich mit diesem einsteigerfreundlichen Lernpfad, der alle wichtigen Azure-Grundlagen abdeckt, fit für die Prüfung.
- Die Architektur und Dienste von Microsoft Azure verstehen - Lerne, wie die Architektur und die Dienste von Azure zusammenarbeiten, um Cloud-Lösungen zu ermöglichen.
FAQs
Kann ich Azure Pipelines für Nicht-Azure-Projekte nutzen?
Ja, das kannst du. Azure Pipelines unterstützt die Bereitstellung in On-Premise- und verschiedenen Cloud-Umgebungen wie AWS, GCP und vielen mehr.
Welche Programmiersprachen werden von Azure Pipelines unterstützt?
Azure Pipelines unterstützt viele Programmiersprachen, darunter Node.js, Python, Java, .NET und viele mehr.
Was ist der Unterschied zwischen Azure Pipelines und GitHub Actions?
Azure Pipelines bietet eine tiefere Integration mit dem Azure-Ökosystem und robuste Deployment-Tools, während GitHub Actions ein einfacheres, GitHub-natives CI/CD-Erlebnis bietet. Beide unterstützen YAML-Workflows und containerisierte Bereitstellungen.
Kann ich Azure Pipelines mit Nicht-Microsoft-Technologien wie Python oder Java nutzen?
Ja, Azure Pipelines unterstützt alle wichtigen Plattformen und Sprachen, einschließlich Python, Java, Node.js und mehr. Du kannst Builds und Deployments für jeden Tech Stack mit YAML konfigurieren.
Ist die Nutzung von Azure Pipelines kostenlos?
Azure Pipelines bietet einen kostenlosen Tier mit 1.800 Minuten/Monat für öffentliche Projekte und begrenzte private Bauzeit. Zusätzliche Nutzung erfordert einen kostenpflichtigen Plan oder selbst gehostete Agenten.
Was sind Azure DevOps Service Connections, und warum sind sie wichtig?
Service Connections verbinden Azure Pipelines sicher mit externen Diensten wie Azure Web Apps oder Kubernetes-Clustern. Sie sind unverzichtbar für die automatisierte Bereitstellung und Verwaltung der Infrastruktur.
Wie ist Azure Pipelines im Vergleich zu Jenkins oder CircleCI?
Azure Pipelines bietet eine besser integrierte Erfahrung für Azure-Nutzer und eine bessere Unterstützung für Microsoft-Dienste. Jenkins ist besser anpassbar, erfordert aber mehr Einrichtungsaufwand; CircleCI zeichnet sich durch Geschwindigkeit und Parallelität aus.
Emmanuel Akor ist ein Cloud- und DevOps-Ingenieur, der sich mit der Nutzung von Cloud-Technologien und DevOps-Tools auskennt, um wirkungsvolle Projekte voranzutreiben. Emmanuel hat einen erstklassigen Abschluss in Informatik von der Babcock University und war früher Cloud Co-Lead bei GDSC. Als Technical Content Writer zeichnet er sich dadurch aus, dass er Wissen weitergibt und mit Teams zusammenarbeitet.

Wenn deine CI/CD-Pipeline ständig zusammenbricht oder sich langsam und schwerfällig anfühlt, bist du nicht allein. Ich hatte schon mit fehlgeschlagenen Builds, nicht passenden Umgebungen und Teamkollegen zu tun, die versehentlich meine Arbeit überschrieben haben. Azure Pipelines beseitigt diese Frustrationen mit einem in der Cloud gehosteten Dienst, mit dem fast jedes Projekt auf jeder Plattform erstellt, getestet und bereitgestellt werden kann.
Deshalb zeige ich dir in diesem Tutorial, wie du das machst:
Lass uns loslegen!
Was sind Azure Pipelines?
Azure Pipelines ist eine Cloud-basierte Lösung, die die Entwicklung, das Testen und die Bereitstellung von Anwendungen vereinfacht.
Es ist eine Komponente des Azure DevOps-Toolkits, das den gesamten Lebenszyklus der Softwareentwicklung unterstützt. Außerdem ist es eine flexible Option für Teams jeder Größe, da es verschiedene Plattformen und Programmiersprachen unterstützt. GitHub, Azure Repos und andere bekannte Versionskontrollsysteme sind darin integriert.
Zu den wichtigsten Funktionen von Azure Pipelines gehören:
Service
Zweck
Multiplattform-Unterstützung
Azure Pipelines automatisiert die Erstellung und Bereitstellung von Anwendungen für verschiedene Betriebssysteme, wie Linux, macOS und Windows.
Integration mit Versionskontrolle
Azure Pipelines verbinden sich mit deinen Code-Repositories wie Azure Repos, GitHub und anderen bekannten Versionskontrollsystemen.
YAML-basierte Pipeline-Konfiguration
Mit Azure Pipelines können wir unsere Build- und Deployment-Prozesse als Code definieren und so Versionskontrolle ermöglichen.
Kontinuierliche Integration und kontinuierliche Bereitstellung (CI/CD)
Azure Pipelines erleichtert den End-to-End-Prozess der Integration von Codeänderungen und der Bereitstellung von Anwendungen.
Meiner Erfahrung nach sind Azure Pipelines für alle hilfreich, die proper CI/CD in ihrem Team haben wollen. Sie ist flexibel, skalierbar und lässt sich gut mit anderen Azure-Diensten integrieren.
Azure Pipelines Architektur (Quelle: Microsoft).
Wenn du ein breiteres Verständnis von Azure DevOps über Pipelines hinaus suchst, ist dieses Azure DevOps-Tutorial waden gesamten CI/CD-Lebenszyklus von Anfang bis Ende durch.
Deine erste Azure Pipeline einrichten
Um mit der Azure Pipelines-Umgebung zu arbeiten, müssen wir zunächst alles so einrichten, dass ein durchgängiger Build-, Test- und Deployment-Prozess möglich ist.
Voraussetzungen
Bevor du mit der Erstellung deiner ersten Pipeline beginnst, solltest du sicherstellen, dass du die folgenden Punkte beachtet hast:
Wenn du dich über das Azure-Ökosystem informieren möchtest, empfehle ich dir den Kurs "Microsoft Azure verstehen".
Ein neues Projekt und Repository erstellen
Jetzt, wo dein Azure DevOps-Konto und deine Organisation eingerichtet sind, können wir unser erstes Projekt und Repository erstellen.
Für dieses Tutorial verwenden wir Azure Repos als Code-Repository. Wenn du gerade erst anfängst oder keinen bestimmten Grund hast, dich für TFVC zu entscheiden, rate ich dir, Git zu wählen.
Erstellen deiner ersten Pipeline
Es ist an der Zeit, unsere erste Pipeline zu erstellen. Befolge die folgenden Schritte:
Die Wahl zwischen YAML und dem klassischen Editor
Azure Pipelines bietet zwei Möglichkeiten, deine Pipelines zu definieren:
.yamloder.ymlDatei in deinem Quellcode-Repository definiert, was die Versionierung und bessere Zusammenarbeit ermöglicht.Aspekt
YAML Pipelines
Klassischer Editor
Versionskontrolle
YAML-Pipelines unterstützen die Versionskontrolle und werden im Quellcode-Repository gespeichert.
Der Classic Editor unterstützt keine Versionskontrolle. Es ist eine grafische Benutzeroberfläche (GUI).
Flexibilität
YAML-Pipelines bieten ein Höchstmaß an Flexibilität.
Der Classic Editor ist nur begrenzt flexibel.
Am besten für
YAML-Pipelines eignen sich am besten für langfristige, komplexe Arbeitsabläufe und Automatisierung.
Der Classic Editor eignet sich am besten für schnelle Einrichtungsarbeiten.
Meiner Erfahrung nach bieten YAML-Pipelines mehr Flexibilität und sind besser für Teams geeignet, dieInfrastructure as Code (IaC) Praktiken ermöglichen. Aber der Classic Editor ist perfekt für alle, die eine visuellere Herangehensweise bevorzugen.
Für eine langfristige Skalierbarkeit sind YAML-Pipelines jedoch dem klassischen Editor vorzuziehen.
Bauen mit Azure Pipelines
Jetzt wollen wir sehen, wie wir mit Azure Pipelines bauen können.
In diesem Abschnitt legen wir die Schritte fest, die Azure Pipelines unternimmt, um deinen Code zu erstellen, z. B. die Installation von Abhängigkeiten, die Kompilierung und die Durchführung von Tests. Wir werden diese Schritte in einer Konfigurationsdatei in unserem Quellcode-Repository mit YAML ausdrücken, einer einfachen, für Menschen lesbaren Methode, um Schritte in einem Rezept zu beschreiben.
YAML-Pipeline-Syntax
Hier ist ein einfaches Beispiel für eine YAML-Pipeline:
Lass uns den Code Schritt für Schritt aufschlüsseln:
trigger: Gibt den Zweig an, der die Pipeline auslöst (z. B.main).pool: Legt den Build-Agenten fest (z. B.ubuntu-latest).steps: Listet die auszuführenden Aufgaben auf, z. B. die Installation von Abhängigkeiten und die Ausführung eines Build-Skripts.Konfigurieren der Build-Schritte
Um deiner YAML-Pipeline Build-Schritte hinzuzufügen, musst du das "Skript" unter dem Abschnitt "Schritte" definieren.
Für eine einfache
Node.jsAnwendung zum Beispiel enthält unsereazure-pipelines.ymlDatei unten Code, den Azure DevOps automatisch erstellt hat.Werfen wir einen Blick auf den Build
stepsin der obigen YAML-Pipeline:NodeTool@0, um die Node.js-Version anzugeben.npm installaus, um die Projektabhängigkeiten zu installieren.npm run buildaus, um den Code zu kompilieren.Betrieb der Pipeline
Unsere Pipeline kann manuell ausgelöst oder so eingestellt werden, dass sie automatisch läuft, wenn Ereignisse wie Branch-Pushes eintreten.
mainzu verschieben und die Pipeline automatisch auszulösen. Hier ist ein Beispiel:Nachdem du deine Pipeline ausgeführt hast, kannst du die Protokolle einsehen und eventuelle Probleme beheben.
Um auf die Protokolle zuzugreifen, gehst du zur Zusammenfassung deines Pipeline-Laufs und wählst den entsprechenden Job oder die Aufgabe aus. Wie in der Abbildung unten kannst du jeden Job (Build, Push oder Update) auswählen, um die Rohprotokolle zu sehen.
Um häufige Probleme zu beheben, kannst du deine Pipeline auf häufige Probleme wie Zeitüberschreitungen, Ressourcenbeschränkungen oder Fehlkonfigurationen überprüfen.
Hinzufügen von Tests zu deiner Pipeline
Du fügst deiner Pipeline Tests hinzu, um die Qualität des Codes zu sichern und Probleme in der Entwicklung frühzeitig zu erkennen. In Azure Pipelines kannst du Unit-, Integrations- oder andere Tests integrieren, indem du Schritte in deiner Pipeline-Konfiguration hinzufügst.
Prüfschritte konfigurieren
Baue Testschritte in deine Pipeline ein, um die Codequalität zu gewährleisten. Du kannst beliebte Frameworks wie Jest, Mocha oder NUnit verwenden. Hier siehst du zum Beispiel, wie du mit Jest Unit-Tests hinzufügst:
Testergebnisse anzeigen
In Azure Pipelines gibt es eine integrierte Testberichterstattung. Du kannst die Veröffentlichung von Testergebnissen für eine einfachere Nachverfolgung einrichten und die Testergebnisse in den Pipeline-Protokollen einsehen. So geht's:
PublishTestResults@2, um die Ergebnisse anzuzeigen. Das macht den Lernpfad insgesamt einfacher. Zum Beispiel:Bereitstellen mit Azure Pipelines
In den Bereitstellungsschritten in deiner Azure-Pipeline-YAML-Datei kannst du deine Anwendung automatisch in verschiedenen Umgebungen bereitstellen, z. B. in der Test-, Staging- und Produktionsumgebung. In diesem Abschnitt gehen wir auf einige Möglichkeiten der Bereitstellung mit Azure Pipelines ein.
Bereitstellen in Azure Web Apps
Azure Web Apps ist ein Dienst im Azure Portal, mit dem du Webanwendungen in großem Umfang entwickeln, bereitstellen und verwalten kannst.
Für die Bereitstellung in Azure Web Apps musst du die beiden Dienste miteinander verknüpfen. So geht's:
Hier ist ein Beispiel für eine YAML-Bereitstellungspipeline für eine einfache
Node.jsApp für Azure App Service:Lass uns den obigen Code aufschlüsseln, damit du ihn für deinen Anwendungsfall anpassen kannst:
your-azure-subscriptiondurch den Namen der Serviceverbindung, die den Zugang zu deinem Azure-Abonnement ermöglicht.your-app-namedurch den tatsächlichen Namen deiner Web-App in Azure.$(Build.ArtifactStagingDirectory)durch das Verzeichnis, in dem das Web-App-Paket oder die Dateien für die Bereitstellung abgelegt werden sollen.$(Build.ArtifactStagingDirectory)- Diese Variable verweist auf den Ordner, in dem sich deine Build-Artefakte (deine App-Dateien) befinden, nachdem sie erstellt worden sind.Einrichten der kontinuierlichen Bereitstellung (CD)
Wenn unser Code alle Tests und Prüfungen bestanden hat, müssen wir als Nächstes unser Continuous Deployment einrichten. Befolge die unten beschriebenen Schritte.
Azure Release Pipeline Deployment Model (Quelle: Microsoft)
Meiner Erfahrung nach ist diese Phase notwendig, um die Stabilität in anspruchsvollen Entwicklungsumgebungen zu erhalten. Genehmigungen und Gates sorgen für Kontrolle und stellen sicher, dass nur qualitativ hochwertiger Code in die Produktion gelangt.
Bereitstellung in Kubernetes
Kubernetes macht es einfach, zuverlässige und skalierbare containerisierte Anwendungen zu betreiben. Mit dem Azure Kubernetes Service (AKS) erhältst du eine verwaltete Umgebung, die die Bereitstellung und den Betrieb vereinfacht. In diesem Abschnitt zeige ich dir, wie du deine Anwendung mithilfe von Azure Pipelines in AKS bereitstellst.
Bereite deinen AKS-Cluster vor
Du kannst einen AKS-Cluster über das Azure-Portal oder die CLI erstellen. Hier ist ein einfacher Bash CLI-Befehl zum Bereitstellen von Clustern:
Lasst uns den obigen Befehl aufschlüsseln:
--resource-group: Dies gibt die Azure-Ressourcengruppe an, in der der AKS-Cluster erstellt werden soll.--name: Dies bezieht sich auf den Namen deines AKS-Clusters.--node-count: Hier wird die Anzahl der Knoten im Cluster festgelegt (z. B. 3 in diesem Beispiel).--enable-addons monitoring: Das macht die Überwachung und Analyse mit Azure Monitor for Containers möglich.--generate-ssh-keys: Dadurch werden automatisch SSH-Schlüssel für den sicheren Zugang zum Knotenpunkt generiert, falls keine Angaben gemacht werden.Vergiss nicht,
unddurch die tatsächlichen Namen deiner Ressourcengruppe und deines Clusters zu ersetzen.Kubectl muss konfiguriert werden, nachdem dein AKS-Cluster eingerichtet wurde. Dadurch wird sichergestellt, dass dein Pipeline-Agent oder dein lokaler Computer
kubectlverwenden kann, um mit dem Cluster zu kommunizieren.Du kannst deine Azure-Aufgaben mit Hilfe der Kommandozeile beschleunigen, umols - dieser Azure CLI-Spickzettel ist eine praktische Referenz.
Erstelle eine YAML-Datei für die Bereitstellung
Nehmen wir als Beispiel eine einfache Deployment-YAML-Datei für das Deployment eines Docker-Images in Kubernetes:
Bereitstellen mit Azure Pipelines
Füge in deine YAML-Pipeline eine Aufgabe für die Verteilung an AKS ein.
Commit und push die YAML-Datei, um das Deployment auszulösen.
AKS vereinfacht die Container-Orchestrierung und erleichtert die Verwaltung von Skalierung, Updates und Rollbacks. Meiner Erfahrung nach ist es ein Muss für moderne Cloud-native Anwendungen.