Ich habe ein bisschen über CI-Server wie Jenkins gelesen und frage mich: An welchem Punkt ist es nützlich?
Denn für ein kleines Projekt, bei dem Sie nur 5 Klassen und 10 Komponententests haben würden, besteht sicherlich keine wirkliche Notwendigkeit.
Hier haben wir ungefähr 1500 Komponententests und sie bestehen (auf alten Core 2 Duo-Workstations) in ungefähr 90 Sekunden (weil sie wirklich "Einheiten" testen und daher sehr schnell sind). Wir haben die Regel, dass wir keinen Code festschreiben können, wenn ein Test fehlschlägt.
Daher startet jeder Entwickler alle seine Tests, um eine Regression zu verhindern.
Da alle Entwickler immer den gesamten Test starten, werden Fehler aufgrund widersprüchlicher Änderungen festgestellt, sobald ein Entwickler die Änderung eines anderen (falls vorhanden) abruft.
Mir ist immer noch nicht ganz klar: Soll ich einen CI-Server wie Jenkins einrichten? Was würde es bringen?
Ist es nur nützlich für den Geschwindigkeitsgewinn? (in unserem Fall kein Problem)
Ist es nützlich, weil alte Builds neu erstellt werden können? (aber wir können dies mit Mercurial tun, indem wir alte Drehzahlen überprüfen)
Grundsätzlich verstehe ich, dass es nützlich sein kann, aber ich verstehe nicht genau warum.
Jede Erklärung unter Berücksichtigung der oben angesprochenen Punkte wäre sehr willkommen.
quelle
Sie brauchen CI wahrscheinlich noch nicht, aber ich denke, es wird nützlich sein, wenn Sie in die Testphase kommen. Jenkins ist in wenigen Stunden eingerichtet und vereinfacht Ihre Tests und hilft, dumme Fehler zu vermeiden (die besonders dann auftreten, wenn Sie sich schnell um die Produktion kümmern).
quelle
Für mich wird ein CI interessant, wenn Ihr Team mehr als 1 Mitglied hat.
Sie müssen aufhören, CI als "einen anderen PC zu betrachten, auf dem die Tests für mich ausgeführt werden". CI über einen definierten und automatisierten Buildprozess und ein Release-Management.
CI ist die einzige autorisierende Entität, die Ihre Softwareversion erstellt. Wenn es nicht auf dem CI aufbaut, ist es einfach nicht passiert.
Mit einem CI haben Sie Einschränkungen, um alles zu automatisieren, was Ihnen alle manuellen Optimierungen, Hacks und Verknüpfungen anzeigt, die Sie eingerichtet haben, und arbeiten einfach nicht mit einem CI und sollten in erster Linie vermieden werden.
Probleme, die es vermeidet:
Vorteile (einfach zu viele, um alle zu erwähnen):
quelle
Es gibt ein grundlegendes Problem bei der kontinuierlichen Integration (Continuous Integration, CI), das sich perfekt in Ihrer Frage widerspiegelt: CI-Praktiken sind schwer zu implementieren und zu verteidigen, da die Einrichtung von CI-Serversoftware nicht trivial ist und es auch nicht trivial ist, Ihre Projekte über ein CI zum Laufen zu bringen Server. Damit wird es schwierig zu erkennen, wo der Gewinn bei der Akzeptanz von CI überhaupt liegt.
Bei CI geht es vor allem um Einsicht und Qualität. Ein gutes CI bringt Sie Ihrem Projekt näher, gibt Ihnen ein angemessenes Feedback zu Qualitätsmetriken, Dokumentation, Einhaltung von Codierungsstandards usw. Es sollte Ihnen die Tools zur Verfügung stellen, mit denen Sie all dies einfach visualisieren und auf einen Blick erkennen und leicht erkennen können Verknüpfen Sie eine Reihe von Änderungen mit einem bestimmten Snapshot aller dieser Projektmetriken.
Es geht nicht nur darum, Unit-Tests durchzuführen. Ganz und gar nicht! Was mich zur Qualität bringt. CI nimmt Fehler an, vermeidet sie nicht und wirft sie nicht weg. Sie erhalten ganz einfach ein Tool, mit dem Sie frühzeitig Fehler machen können, anstatt später. Sie schreiben also zuvor getesteten Code nicht wirklich auf einen CI-Server. Obwohl Sie sich bemühen sollten, sauberen und nicht fehlerhaften Code festzuschreiben, verwenden Sie den CI-Server tatsächlich, um automatisch einen Integrations-Builder über Ihren Code auszuführen und zu beurteilen, ob alles richtig herausgekommen ist. Wenn ja, ordentlich! Wenn nicht, kein Problem - gute CI-Praktiken besagen, dass Ihre nächste Priorität nur darin bestehen sollte, das zu beheben, was kaputt gegangen ist. Worauf Sie bei einem guten CI-Server leicht hinweisen sollten.
Mit zunehmender Größe eines Teams wird die Integration des Codes aller natürlich schwieriger. Es sollte die Aufgabe eines zentralen CI-Servers sein, alle integrierten Teile zu testen und die Teammitglieder zu entlasten. Sie müssen also alle frühzeitig (und so sauber wie möglich) verpflichten und dann den Build-Status überwachen (normalerweise sind Benachrichtigungen vorgesehen). Und wieder, wenn etwas aufgrund des Commits eines Entwicklers kaputt geht, ist es sofort seine Verantwortung, dies zu beheben und diese automatisierten Builds sofort wieder in den OK-Status zu versetzen.
Sie sehen, meiner Meinung nach profitiert jedes einzelne Projekt von einer kontinuierlichen Integration. Die Sache ist, dass die Leute bis jetzt und aufgrund der unglaublichen Komplexität jedes einzelnen CI-Servers, den ich kenne, CI-Praktiken bei kleineren / einfacheren Projekten wirklich abgewehrt haben. Denn, komm schon, die Leute haben bessere Dinge zu tun, als Tage damit zu verbringen, eine hässliche, übermäßig komplexe, unterversorgte, aufgeblähte Software zu konfigurieren.
Ich hatte genau das gleiche Problem, und deshalb habe ich Cintient seit ungefähr einem Jahr in meiner Freizeit entwickelt. Meine Prämisse war es, die Installation, Konfiguration und Verwendung zu vereinfachen und die Qualitätsmetriken zu liefern, die bei allen anderen so gut wie fehlschlagen oder zu wenig liefern. Nach dieser langen Antwort kommt mein schamloser Plug, um auf den GitHub-Link für das Projekt hinzuweisen (der kostenlos und Open Source ist, natch). Es hat anscheinend auch einige schöne Screenshots. :-) https://github.com/matamouros/cintient
Hoffe ich habe dir geholfen.
(HINWEIS: Nach Bryan Oakleys Kommentar bearbeitet, weil ich mir mehr Zeit hätte nehmen sollen, um eine bessere Antwort zu finden. Ich denke auch, dass er Recht hatte.)
quelle