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?
11
Antworten:
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.
quelle
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.
quelle
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.
quelle
Die kontinuierliche Integration hat zwei Aspekte.
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.
quelle
CI ist nützlich, wenn Sie:
Liste kann fortgesetzt werden ..
quelle