Kontinuierliche Integration als Begriff bezieht sich auf zwei unterschiedliche Ideen.
Der erste ist ein Workflow: Anstatt dass jeder in einem Team an seiner eigenen Niederlassung arbeitet und dann nach ein paar Wochen Programmierung versucht, seine Änderungen in der Hauptlinie zusammenzuführen, werden diese Änderungen (fast) kontinuierlich integriert. Dadurch können Probleme frühzeitig auftreten und inkompatible Änderungen vermieden werden. Dies setzt jedoch voraus, dass wir leicht prüfen können, ob eine Änderung „funktioniert“.
Hier kommt die zweite Idee ins Spiel, die sich als weitaus populärer herausstellte. Ein CI-Server ist eine saubere Umgebung, in der die Änderungen so schnell wie möglich getestet werden. Die saubere Umgebung ist notwendig, damit der Build reproduzierbar ist. Wenn es einmal funktioniert, sollte es immer funktionieren. Dadurch werden Probleme vermieden, die jedoch auf meinem Computer aufgetreten sind. Ein CI-Server ist insbesondere dann nützlich, wenn Ihre Software auf verschiedenen Systemen oder in verschiedenen Konfigurationen ausgeführt wird und Sie sicherstellen müssen, dass alles funktioniert.
Das Fehlen eines Build-Schritts ist unerheblich. CI ist jedoch nur sinnvoll, wenn Sie über eine Testsuite verfügen. Diese Testsuite muss automatisch sein und darf keine Fehler aufweisen. Wenn die Tests fehlschlagen, sollte der entsprechende Entwickler eine Benachrichtigung erhalten, damit er das von ihm eingeführte Problem beheben kann („Abbruch des Builds“, auch wenn kein Build als Kompilierung vorhanden ist).
Es stellt sich heraus, dass ein solcher Server nicht nur zum Testen nützlich ist. Tatsächlich ist die meiste CI-Software wirklich mies, wenn es darum geht, Tests in verschiedenen Konfigurationen auszuführen, aber alle Arten von Jobs gut zu verwalten. ZB kann es zusätzlich zu "kontinuierlichen" Unit-Tests einen vollständigen Test als nächtliches Build geben. Die Software kann mit mehreren Python-Versionen und verschiedenen Bibliotheksversionen getestet werden. Eine Website könnte auf tote Links getestet werden. Wir können statische Analysen, Stilprüfungen, Testabdeckungstools usw. über den Code ausführen. Dokumentation kann generiert werden. Wenn alle Testsuiten bestanden sind, kann der Paketierungsprozess gestartet werden, sodass Sie bereit sind, Ihre Software freizugeben. Dies ist in einer agilen Umgebung nützlich, in der Sie jederzeit ein implementierbares (und demo-fähiges) Produkt benötigen. Mit dem Aufkommen von Web-Apps entsteht auch die Idee einer kontinuierlichen Bereitstellung: Wenn alle Tests bestanden sind, können wir die Änderungen automatisch in die Produktion übernehmen. Dies setzt natürlich voraus, dass Sie sich in Ihrer Testsuite wirklich sicher sind (wenn nicht, haben Sie größere Probleme).