CI steht für continuous integration und CD für continuous deployment bzw. delivery, beides Schlüsseltätigkeiten im Bereich DevOps. Mit CI/CD ist die Automatisierung von Build-Prozessen (z.B. Kompilierung), Tests und Produktivsetzen gemeint, um die Lücke zwischen Entwicklung und einsatzfähigem Produkt zu verkleinern.

Continuous Integration

Bei der continuous integration (kontinuierliche Integration) sind Automatisierungs-Tools im Einsatz, die dem Software-Entwickler nach jedem Merge die Arbeit des Buildens und Testens abnehmen. D.h. nachdem eine Code-Änderung in das Versionssystem (z.B. Git) eingespielt wurde, wird der Code kompiliert und automatischen Tests unterzogen. Natürlich alles in der Testumgebung.

Bei diesem Vorgehen werden immer nur kleine Änderungen oder Ergänzungen programmiert. So werden nicht nur Fehler frühzeitig entdeckt, sondern alle Entwickler haben einen aktuellen Stand des Codes.

Continuous Delivery  bzw. Continuous Deployment

Bei beiden Versionen geht es darum, in kurzen Abständen kleinere Veränderungen bzw. Ergänzungen auszurollen. Bei Continuous Delivery ist noch ein Mensch im Loop, der das neue Release freigeben muss. Bei Continuous Development wird das Ganze auf die Spitze getrieben, die Freigabe für ein Release erfolgt automatisch. Fehler werden durch die automatischen Tests abgefangen. Die Software verändert sich dann in einem fast kontinuierlichen Prozess mit vielen kleinen Änderungen, ob täglich oder stündlich. Dieses Vorgehen setzt umfangreiche automatische Tests voraus und wird eher bei nicht-kritischen Applikationen verwendet.

In der Realität sind die Übergänge zwischen Continuous Delivery und Continuous Deployment fließend. Entscheidend ist an sich das Paradigma vieler kleiner Änderungen und automatisierter Tests.

Nachteile von CI/CD

Der Nutzen von CI/CD hängt individuelle vom Projekt ab. Automatische Tests erfordern einen recht großen Arbeitsaufwand, auf der anderen Seite gehören Tests zu den Best Practices in der Software-Entwicklung (unabhängig von CI/CD). Natürlich wird der Nutzen erheblich durch die Qualität der Tests und wie überprüfbar der Code wirklich ist beeinflusst.

Bei kleinen Projekten mit wenigen Entwicklern kann das CI/CD-Paradigma überflüssig sein. Bei sehr großen Teams kann es durch das kontinuierliche Verändern schwierig sein, Ziele zu tracken und bei großen Projekten kann die Build-Zeit erheblich sein und somit Warteschleifen erzeugen.