Was ist Continuous Integration (CI) und wie ist es nützlich? [geschlossen]

11

Kann mir jemand das Konzept der kontinuierlichen Integration erklären, wie es auf leicht verständliche Weise funktioniert? Und warum sollte ein Unternehmen CI in seinen Workflow für die Codebereitstellung übernehmen? Ich bin Entwickler und meine Firma (hauptsächlich das Build-Team) verwendet Team City. Als Entwickler habe ich immer Code ausgecheckt, aktualisiert und in SVN festgeschrieben, musste mich aber nie wirklich um TeamCity oder CI im Allgemeinen kümmern. Ich möchte also verstehen, was der Nutzen von CI ist. Ist CI ein Teil der agilen Methoden?

Geek
quelle
1
Dieses Youtube-Video hat mich wirklich auf das Konzept gebracht: youtube.com/watch?v=4sANX9AhM8c
lwm
Martin Fowler hat einen ausgezeichneten Artikel zu diesem Thema.
Marco-Fiset

Antworten:

18

Kontinuierliche Integration auf den Punkt gebracht bedeutet, dass Sie Ihre Arbeit speichern, an das Dokumentenverwaltungssystem (in Ihrem Fall SVN) senden, alle Tests automatisch ausgeführt werden (sowohl Unit- als auch Integrations-, Funktions- usw. Tests) und die Anwendung kompiliert und vorbereitet wird zur Lieferung (dh ISO-Image wird erstellt). Die kontinuierliche Integration ist bei der kontinuierlichen Lieferung nicht dasselbe. Die Lieferung erfolgt immer noch zu unterschiedlichen Zeitpunkten. CI stellt sicher, dass das Produkt bei Bedarf geliefert werden kann, nicht mehr.

Immer wenn etwas schief geht, erhält das Team eine Benachrichtigung. Normalerweise werden zu diesem Zeitpunkt alle Arbeiten eingestellt und alle Anstrengungen konzentrieren sich darauf, sicherzustellen, dass das Produkt stabil ist. Es werden keine Pushs und Commits im Repository ausgeführt, solange das System nicht grün ist.

CI stellt sicher, dass sich das Produkt immer in einem stabilen Zustand befindet und möglicherweise jederzeit geliefert werden kann. Bitte beachten Sie, dass stabil nicht bedeutet, dass die Funktion vollständig ist. Es kann auch halb implementierte Funktionen geben, aber das System kann stabil sein.

CI ist normalerweise mit agilen Methoden verbunden, aber ich persönlich kenne die genaue Geschichte von CI nicht.

Patkos Csaba
quelle
1
Zum letzten Satz: Während CI oft mit Agile assoziiert wird, würde ich sehr argumentieren, dass nicht-agile Entwicklung (ja, das passiert immer noch ;-)) auch immens von gut implementiertem CI profitieren kann.
Joachim Sauer
@ Joachim richtig.
Patkos Csaba
@ Joachim Sauer: Ich würde sagen, dass CI etwas ist, das jedes Projekt agiler macht, als es ohne es wäre.
Michael Borgwardt
3

Kontinuierliche Integration bedeutet: Die Integration des Codes in ein Produkt, das tatsächlich ausgeführt wird und getestet werden kann, erfolgt ständig und nicht (wie zuvor) als separate Aktivität spät im Entwicklungslebenszyklus.

Der Erstellungsprozess der Anwendung muss vollständig automatisiert sein, eine automatisierte Testsuite und ein Server, der den aktuellen Status des Codes erstellt und die Testsuite darauf ausführt. Dies sollte täglich oder sogar nach jedem Einchecken des Codes geschehen.

Der Vorteil besteht darin, dass sofort Feedback zu Codeänderungen erfolgt, die zu Kompilierungsfehlern führen (z. B. weil der Entwickler nicht alle Änderungen eingecheckt hat oder eine Komponente verwendet, die nicht im Build-System vorhanden ist) oder zu Testfallfehlern. Dies erleichtert die Behebung solcher Fehler erheblich, da Sie wissen, welche Änderung sie verursacht hat, und die verantwortliche Person immer noch neue Erinnerungen an das hat, was sie getan hat.

Ohne CI treten alle diese Fehler während der Integrationsphase gleichzeitig auf, was es äußerst schwierig macht, sie zu beheben.

Michael Borgwardt
quelle
2

Möglicherweise haben Sie einen bestimmten Stil in der Entwicklung: Sie checken aus, codieren, kompilieren, überprüfen, verfluchen, ändern, kompilieren, jubeln, verpflichten. Sie schreiben nur Arbeitscode fest, möglicherweise sogar weniger detailliert wie am Ende Ihres Arbeitstages oder wenn eine Funktion abgeschlossen ist. Sie überprüfen Ihre Abhängigkeiten, wenn Sie API-Bibliotheken importieren.

Wenn Sie gemeinsam mit anderen programmieren und gegenseitige Abhängigkeiten bestehen, ist eine kontinuierliche Integration sinnvoll. Einfach, weil Sie die Auswirkungen von Änderungen an Personen, die von Ihrem Code abhängen, nicht kennen und jedes Mal, wenn Sie Ihre Importe aktualisieren müssen, kein Signal erhalten.

Wenn einer von Ihnen eine Änderung vornimmt, sollten beide Projekte zusammen erstellt und getestet werden, dh gegen die API des anderen ausgeführt, mit der neuen Bibliothek erstellt und getestet werden usw. Solche Tests, Ihr Code und die eines anderen, werden als Integrationstests bezeichnet.

Warum kontinuierlich? Weil es einfacher ist, die Koordinierung der Integration an ein System zu delegieren, das einen sauberen Build testet, wenn sich eine der Codebasen ändert, als all dies für einen Menschen zu organisieren. Das System ist skalierbar.

bbaassssiiee
quelle
1

Die kontinuierliche Integration hat zwei Aspekte.

  1. Die Strategie zur Quellcodeverwaltung für die Entwicklung stellt sicher, dass Entwickler ihre laufende Arbeit kontinuierlich in stabilen Code anderer Entwickler integrieren können.
  2. Das automatische Erstellen und Testen von Quellcode, ausgelöst durch ein Commit für die Quellcodeverwaltung

Punkt 1 ist kritisch. Es ist der Schritt, die Zusammenführungen, die Entwickler tatsächlich durchführen, häufig und klein zu machen, was die Wahrscheinlichkeit erhöht, dass die Zusammenführungen erfolgreich sind.

Punkt 2 ist das Werkzeug und Framework, das erforderlich ist, damit Punkt 1 sicher ausgeführt werden kann, und um schnell Zusammenführungen zu identifizieren, die fehlgeschlagen sind, indem vorhandener Code beschädigt wurde.

Wie nützlich ist es?

Unglaublich. Als Entwickler, der an einem Projekt arbeitet, können Sie sich die meiste Zeit auf das konzentrieren, was Sie tun, und sich nicht um die gleichzeitige Arbeit des restlichen Teams kümmern. Wenn Ihre aktuelle Arbeit abgeschlossen ist, veröffentlichen Sie Ihre Änderungen im Rest des Teams und in den nächsten Stunden führen alle Ihre Änderungen in ihre aktuelle Arbeit ein.

Ohne sie führen Entwickler Big-Bang-Merges durch. Normalerweise dauert es mehrere Tage, bis sie alle Änderungen, die der Rest des Teams vorgenommen hat, auf einmal zusammengeführt haben. Wenn eine Zusammenführung merklich schlecht wird, ist der andere Entwickler wahrscheinlich zu einer anderen Arbeit übergegangen und beginnt, die feinen Details zu vergessen, um das Zusammenführungsproblem zu lösen. Schlimmer noch, ohne das kontinuierliche Erstellen und Testen können, solange der Code kompiliert wird, Zusammenführungsfehler im Code auftreten und werden erst erkannt, wenn Tests (oder Kunden) sie finden.

Michael Shaw
quelle
0

CI ist nützlich, wenn Sie:

  • Code-Kompilierung
  • Tatsächliche Testreihe
  • Berichte, die auf Ihrem Quellcode basieren (Codeabdeckung, Gewalt gegen Codestandards usw.)
  • Routine, die Sie regelmäßig ausführen, nachdem der Code erfolgreich kompiliert wurde

Liste kann fortgesetzt werden ..

Nikolay Fominyh
quelle