Azure Pipelines: Strukturierung und Templates

4 Minuten zum Lesen
Azure Pipelines: Strukturierung und Templates
Die strukturierte Ablage von Pipelines in Azure DevOps und GitHub ermöglicht eine einfache Versionierung und verbessert die Handhabung von Änderungen. Durch den Einsatz von Templates wird die Wiederverwendbarkeit gefördert und Prozesse wie Lizenz- und Sicherheitschecks integrierbar.

Eine durchdachte Ablage von Pipelines in der Versionsverwaltung ist wichtig für eine effiziente Entwicklung und das Deployment von Anwendungen. Mit YAML-Dateien in Azure DevOps und GitHub kannst du nicht nur Pipelines für einzelne Anwendungen erstellen, sondern auch Templates nutzen, die verschiedene Logiken abbilden, die wiederverwendet werden können. Dadurch wird der Build- und Deployment-Prozess einer Anwendung optimiert und gleichzeitig die Zugänglichkeit für andere Pipelines sichergestellt. Auch hängen Änderungen an der Pipeline direkt mit Änderungen am Code zusammen, was die Nachvollziehbarkeit und das Review der Änderungen verbessert.

Ablage von YAML-Pipelines

Wie bereits im Artikel zu Source Code: Empfohlene Ordner- und Dateistruktur beschrieben, ist eine klare Strukturierung der Ordner und Dateien in der Versionsverwaltung entscheidend. Dies gilt auch für die Ablage von YAML-Pipelines.

YAML-Pipelines befindet sich auf oberster Ordnerebene in einem Ordner namens eng. Dieser kann je nachdem dafür genutzt werden, um Pipelines abzulegen oder auch Skripte die von Pipelines oder Entwickler:innen genutzt werden. Wer hier nochmal Unterordner für pipelines und scripts benötigt, kann dies nach eigenem Geschmack anpassen.

Wer GitHub Actions nutzt, kann die YAML-Pipelines auch in .github/workflows ablegen. Dieser Ordner wird von GitHub automatisch erkannt und die Pipelines ausgeführt.

Eine weitere Aufteilung der Pipelines nach templates und Ordner je Applikation ist hilfreich für die Übersichtlichkeit.

eng/
  templates/
    build/
        dotnet.steps.yml
    deploy/
        azure/
            app-service.steps.yml
  app1/
    pipeline.yml
    build.yml
    deploy.yml
    deploy-env.yml

Aufteilen von Pipelines für Anwendungen

Die Aufteilung einer Pipeline für eine einzelne Anwendung in verschiedene Dateien ermöglicht eine bessere Übersichtlichkeit und auch eine Wiederverwendbarkeit, z.B. für das Deployment der Anwendung in eine bestimmte Umgebung.

Die pipeline.yml enthält die gesamte Pipeline, die beim Pushen auf den main-Branch ausgeführt wird. Diese kann auf die einzelnen Schritte in den Dateien build.yml, deploy.yml und deploy-env.yml verweisen.

deploy-env.yml beinhaltet dabei alles was nötig ist, um die Anwendung in einer bestimmten Umgebung zu deployen. So kann die Pipeline für das Deployment in die Testumgebung genutzt werden, aber auch für die Produktion, ohne dass die Schritte doppelt definiert werden müssen.

deploy.yml verwendet die deploy-env.yml, um die verschiedenen Environments vorzugeben, wie z.B. Dev, Staging und Production.

build.yml ist für das Kompilieren, Testen und Veröffentlichen der Anwendung verantwortlich. Das hier erzeugte Pipeline-Artefakt wird anschließend vom Deployment-Prozess verwendet.

Wer seine Pipeline für das Build und Deployment getrennt zur Pull Request Validation haben möchte, bei der nur das Kompilieren und Testen durchgeführt wird, kann dies in einer separaten Datei pipeline.pr.yml ablegen. Somit kann man eine separate Pipeline nur für PR Validations erstellen und hat hier eine saubere Trennung zu den Pipeline Runs, die auch ein Deployment ausführen.

Ablage und Namensgebung der Templates

Je nachdem, ob du ein Monorepo oder mehrere Repositories verwendest, empfiehlt es sich, Templates in einem zentralen Ordner wie /eng/templates/ abzulegen oder in einem separaten Repository zu verwalten, auf die verschiedene Teams Zugriff habnen. Dies sorgt dafür, dass unterschiedliche Teams ein einheitliches Vorgehen haben und Redundanzen vermieden werden.

Die Namensgebung der Template-Dateien sollte klar und verständlich sein und sich an den jeweiligen Aufgaben orientieren. Meist sollte sich der Kontext aus den Unterordnern ergeben. So beinhaltet das Template /build/dotnet.steps.yml die steps eines Pipeline-Jobs, welche nötig sind, um eine .NET-Anwendung zu kompilieren, aber auch statische Code-Analyzers und automatisierte Tests auszuführen und final das Kompilat als Pipeline-Artifakt zu veröffentlichen.

Das Suffix .steps.yml, .jobs.yml oder .stages.yml hilft dabei zu identifizieren, an welcher Stelle das Template in der eigenen Pipeline eingesetzt werden kann.

Governing Prozesse etablieren

Ein weiterer Vorteil von YAML-Pipelines ist die Möglichkeit, Governance-Prozesse zu integrieren. Dadurch kann sichergestellt werden, dass jede Pipeline beispielsweise eine Lizenz- und Schwachstellenprüfung durchführt.

Dies lässt sich direkt über die Templates umsetzen, indem die Prüfungen in die Templates eingebaut werden. So wird gewährleistet, dass jede Pipeline diese Prüfungen automatisch durchführt.

Über zusätzliche Checks ist es auch möglich zu prüfen, ob die Pipeline von einem bestimmten Template abgeleitet wurde. Dies ist jedoch schon ein sehr fortgeschrittener Ansatz.

Ein Beispiel kannst du dem Open Space Planner entnehmen. Hier gibt es projektspezifische Pipelines als auch Templates auf oberster Ebene.

Wie handhabst du die Strukturierung deiner Pipelines? Schau gerne bei uns auf LinkedIn vorbei und diskutiere mit.

Florian Bader

Florian Bader

Florian ist Solution Architect und Microsoft Most Valuable Professional für Azure IoT mit langjähriger Erfahrung im Bereich DevOps, Cloud und Digitalisierung. Er unterstützt Unternehmen dabei, effiziente und effektive Lösungen zu entwickeln, die ihre digitalen Projekte nachhaltig zum Erfolg führen.

Verwandte Beiträge

Entdecken Sie weitere Artikel, die ähnliche Themen behandeln und vertiefen Sie Ihr Wissen. Diese Beiträge wurden basierend auf gemeinsamen Tags und Veröffentlichungsdaten ausgewählt. Viel Spaß beim Weiterlesen!