Ich habe noch nie ein Continuous Integration System (CI) verwendet. Ich programmiere hauptsächlich in MATLAB, Python oder PHP. Keiner von beiden hat einen Build-Schritt und ich sehe nicht, wie ein CI für meine Arbeit verwendet werden könnte. Ein Freund von einem großen Projekt in einer großen Firma sagte mir, dass Sprache keine Rolle spielt.
Ich verstehe nicht, wie CI für mich von Nutzen wäre, wenn ich keinen Build-Schritt hätte. Ich kann mir CI als Testumgebung vorstellen, in der Unit-Tests durchgeführt werden. Vermisse ich etwas?
Antworten:
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).
quelle
Es stimmt, Sie brauchen kein spezielles CI-System, um Builds durchzuführen und zu überprüfen, ob diese korrekt sind, aber das ist nur ein Teil dessen, worum es bei CI geht.
Der Zweck von CI besteht darin, Fehler so schnell wie möglich zu erkennen, da die Fehlerbehebung in der Regel umso billiger ist, je früher ein Fehler erkannt wird. Zu diesem Zweck kann ein CI-System in dem Fall, in dem ein Erstellungsschritt nicht erforderlich ist, die Verwendung von Codeanalyse-Tools, die Bereitstellung in einer Testumgebung, Unit / Integration / Regression / andere Tests, die Sie automatisieren können, und alle anderen Schritte automatisieren Sie können automatisch ausführen, um nach Fehlern zu suchen.
quelle
Kontinuierliche Integration führt mehr als nur eine Kompilierung des Codes durch. Wenn das alles wäre, würden wir nicht annähernd so viele Werkzeuge dafür brauchen!
Einige andere Aufgaben, die mir spontan einfallen, die eine kontinuierliche Integrationspipeline häufig ausführt:
Wenn Sie im engeren Sinne ein Stück weiter an die Grenze der "kontinuierlichen Integration" gehen, können Sie auch Folgendes tun:
Der Punkt ist einfach der folgende: Es gibt Aufgaben, die Sie regelmäßig bei der Entwicklung von Software ausführen müssen, außer nur den Code zu schreiben. Indem Sie diese Aufgaben automatisieren und auf einem Server ausführen, erhalten Sie
Und wahrscheinlich auch einige andere Vorteile, die mir gar nicht in den Sinn kommen.
quelle
Möglicherweise müssen Sie die Lösungen nicht kompilieren, aber CI kann Ihnen trotzdem helfen, indem Sie die Konfigurationsdateien / Ordnerpfade usw. ändern und wenn Sie in einem Team sind, die Änderungen des Produktstatus fördern und bereitstellen
Angenommen, Sie stellen Ihren Python-Code auf 5 verschiedenen QA-Servern bereit und müssen auf verschiedene QA-Datenbanken verweisen. Anschließend führen Sie den automatisierten Testlauf (ausgelöst durch CI) aus, befördern den Build in die Produktion und stellen ihn dort mit den entsprechenden Konfigurationsänderungen für jeden Produktionsserver bereit .
quelle