Einleitung
In der dynamischen Welt der Software-Entwicklung kann die richtige Implementierung von DevOps-Praktiken über Erfolg oder Misserfolg eines Projekts entscheiden. Microsoft Azure DevOps bietet ein beeindruckendes Arsenal an Tools, um die Continuous Integration und Continuous Deployment (CI/CD)-Pipeline effizient zu gestalten. In diesem Artikel sehen wir uns ein paar hilfreiche Grundlagen an.
YAML Templates und Repository Resourcen
YAML Templates bieten eine wiederverwendbare Struktur für Azure DevOps Pipelines, die es ermöglicht, Pipeline-Konfigurationen im Code zu verwalten In Kombination mit Repository Resources, können diese Templates einmalig definiert und dann in mehreren Projekten eingebunden werden. Dabei liegen die Templates in einem git Repository, die konkreten Projekte wiederum in anderen Repositories. So kann sichergestellt werden, dass alle Projekte konsistente und aktualisierte Pipeline-Konfigurationen verwenden.
resources:
repositories:
- repository: templates
type: git
endpoint: # Name der Service Connection in Azure DevOps
name: # Name des Repositories in dem die Templates liegen
ref: # Optional, git ref im Ziel-Repository
stages:
- template: templates/deploy-template.yml@templates
Automatisierung von Deployments durch Pipeline Resourcen
Azure DevOps ermöglicht die Automatisierung von Deployments durch Build Completion Triggers, die sicherstellen, dass Deployments nur dann durchgeführt werden, wenn der vorherige Build erfolgreich war. Pipeline Resourcen und ihre Trigger-Konfiguration erlauben dabei fein-granular zu entscheiden, wann die aktuelle Pipeline automatisiert gestartet werden soll.
Beispielsweise lässt sich so ein Deployment automatisch starten, sobald der Build einer Applikationskomponente erfolgreich war.
resources:
pipelines:
- pipeline: BuildPipeline
source: BuildPipeline
trigger:
branches:
include:
- main
stages:
# Deployment Stages
Mehrstufige Pipelines
Pipelines bilden mehrstufige Prozesse ab, wobei die Stufen (Stages) beispielsweise den Build einer konkreten Applikationskomponente oder das Deployment auf ein definiertes System darstellen. Durch das dependsOn-Attribut lassen sich komplexe Abhängigkeiten zwischen verschiedenen Stages einer Pipeline darstellen, was eine präzise Kontrolle über den Deployment-Fluss in verschiedenen Umgebungen ermöglicht.
stages:
- stage: deploy_to_staging
jobs:
- job: ...
- stage: deploy_to_environment_a
# Wird nur ausgeführt wenn "staging" erfolgreich deployed wurde
dependsOn: deploy_to_staging
condition: succeeded()
jobs:
- job: ...
- stage: deploy_to_environment_a
dependsOn: deploy_to_staging
condition: succeeded()
jobs:
- job: ...
Zusammenfassung und Ausblick
Azure DevOps bietet eine Vielzahl von funktionen, um moderne Softwareentwicklungsprozesse effizient und sicher zu gestalten. Die gezeigten Funktionen bilden die Grundlagen für ein nachhaltiges Design von automatisierten CI/CD-Pipelines.
Das ist aber noch lange nicht alles was durch Azure DevOps Pipelines möglich ist. In den nächsten Artikeln zum Thema schauen wir uns an, wie Deployments durch Freigaben abgesichert werden können, wie man idealerweise mit Secrets umgeht und wie man Pipelines nutzen kann um Deployments auf Kubernetes mit Helm zu automatisieren.