Im Kontext von Softwareentwicklung und CI/CD steht Konfigurationsmanagement für das Erfassen der Details einer bestimmten Infrastrukturkonfiguration, um erkennen zu können, wann Änderungen eingeführt wurden.
Eine CI/CD-Pipeline umfasst verschiedene Umgebungen für das Testen und Staging eines Softwareprodukts vor der Veröffentlichung. Damit die Pipeline und die Tests effektiv funktionieren, müssen die Vorproduktionsumgebungen die Produktionsumgebung so genau wie möglich nachbilden und zwischen den Testläufen konstant bleiben.
Um dies zu ermöglichen, werden oft physische oder virtuelle Maschinen zum Hosten dieser Umgebungen eingerichtet. Im Lauf der Zeit werden jedoch Patches angewendet, neue Pakete installiert oder Netzwerkeinstellungen geändert, um bestimmte Probleme zu beheben. Dadurch entfernen sich diese Server auf unterschiedliche Weise von der ursprünglichen Konfiguration.
Das Ergebnis ist eine Reihe von sogenannten Snowflake-Servern, die jeweils einzigartig konfiguriert sind. Noch schlimmer wird es, wenn die Details der einzelnen Änderungen nirgendwo aufgezeichnet sind. In diesem Fall ist es viel schwieriger, die Umgebung identisch zu reproduzieren, wenn der Server ausfällt oder repliziert werden muss, um Ihren Testprozess zu skalieren. Das Konfigurationsmanagement nimmt sich dieses Problems an.
Durch das Speichern der Konfigurationsdaten in Ihrer Versionsverwaltung erhalten Sie einen Überblick über alle Änderungen. Dadurch ist es einfacher, sie bei Problemen rückgängig zu machen oder auf andere Systeme einheitlich anzuwenden.
Wenn diese Konfigurationsdaten in einem strukturierten Format wie YAML oder XML gespeichert werden, können Sie beim Konfigurationsmanagement noch einen Schritt weitergehen und die Serverkonfiguration automatisieren.
Nachdem Änderungen in der Versionsverwaltung gespeichert wurden, werden sie automatisch auf die entsprechenden Umgebungen angewendet.
Wenn Ihre Infrastruktur als Code definiert ist, lassen sich virtuelle Maschinen automatisch löschen und neu anlegen, sodass Sie die Umgebungen in Ihrer CI/CD-Pipeline zwischen Deployments zurücksetzen können. Auf diese Weise können Sie eine große Anzahl von Systemen handhaben und bei steigendem Testbedarf Umgebungen problemlos replizieren.
Wenn Sie Ihre Software in Containern bereitstellen, werden dadurch einige Konfigurationselemente wie zum Beispiel Softwareabhängigkeiten in das Container-Image verlagert. Die Server, die Ihre Container hosten, müssen jedoch weiterhin konfiguriert werden. Die als Code definierte und automatisierte Erstellung dieser Umgebungen bietet daher weiterhin zahlreiche Vorteile.