Blog

Continuous Integration: Was es ist, warum es wichtig ist und Tools für den Einstieg

"Continuous Integration is a software development practice where members of a team integrate their work frequently .... Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible." Martin Fowler auf martinfowler.com

Also, was ist dieses "CI" über das jeder spricht?

Lassen Sie uns die Definition von Continuous Integration von Martin Fowler auf eine tiefere Verständnisebene bringen: Continuous Integration (CI) ist ein Tool, das in der Integrationsphase der Softwareentwicklung verwendet wird - wie der Name vermuten lässt. "Integration" bedeutet in diesem Zusammenhang, dass Software-Teile wie Legos zusammengefügt werden, um ein komplexes und funktionierendes Ganzes zu schaffen, das in einem einzigen Produkt oder Prozess resultiert.

CI baut auf einem Versionskontrollsystem (wie z. B. Git) auf, sodass für den Anfang ein „Repository“ erforderlich ist. Hier werden Änderungen und Versionen der Software nachverfolgt (weitere Informationen finden Sie im Wikipedia-Artikel zur Versionsverwaltung und / oder in diesem 10-minütigen Video auf YouTube: Git Tutorial für Anfänger | Praxis Beispiel).

CI erstellt und testet Ihr "Mutterschiff" (in Form des Repositorys, in dem sich Ihre Software befindet) jedes Mal, wenn Änderungen oder Ergänzungen vorgenommen werden. Es gibt Ihnen dann Feedback, ob alles in Ordnung ist (Build und Tests erfolgreich) oder ob es Fehler gibt, was normalerweise der Fall ist ;) So erfahren Sie, ob die Teile, die Sie gerade zusammengesteckt haben, zueinander passen und genau so funktionieren wie erwartet. Dieser Aspekt ist besonders dann sinnvoll, wenn man bedenkt, dass in der Regel nicht nur ein, sondern mehrere Softwareentwickler gleichzeitig an einem Projekt arbeiten.

Und was ist nun mit dem "continuous" in CI? Früher war es so, dass Entwickler große Software-Teile geschrieben haben, die nur etwa einmal am Tag integriert wurden (vielleicht haben Sie schon von nightly oder daily builds gehört), oder sogar noch seltener. Jetzt ist es so, dass die Änderungen bzw. die neuen Software-Teile häufig(er) und in sehr kleinen Schritten integriert werden: zum Beispiel jedes Mal, wenn eine bestimmte Funktion geschrieben oder ein neues Feature hinzugefügt wurde.

Worin unterscheidet sich CI von Continuous Delivery und Continuous Deployment?

Das Entwickeln von Software bedeutet, dass sie irgendwann irgendwo landet, z. Bei einem Kunden, im App Store, im Internet, etc. Die Bereitstellung von Software für Andere (außerhalb des Unternehmens) wird im Allgemeinen als Deployment bezeichnet.

Continuous Delivery bedeutet, dass wir die neueste funktionsfähige und getestete Version unserer Software auf Anfrage für jeden verfügbar machen. Dies ist so, als würde man eine Kopie des Mutterschiffs erstellen und auf den Produktions- / Deployment-Server übertragen. Innerhalb von Sekunden kann der Kunde die neueste Version der Software abrufen. Im Gegensatz dazu ist Continuous Deployment die Automatisierung dieses Bereitstellungsprozesses, sodass keine manuelle Arbeit mehr erforderlich ist und die Software bereits während der Entwicklung automatisch bereitgestellt wird: häufig und in kleinen Schritten.

Was ist die Motivation für den Einsatz von CI-Tools?

Es ist an dieser Stelle klar, dass CI ein hilfreiches Tool für die Softwareentwicklung ist, und dem man heutzutage nicht mehr wirklich aus dem Weg gehen kann. Lassen Sie uns jedoch die konkreten Vorteile für die Verwendung von CI-Tools zusammenfassen. Die folgenden Punkte sind ein Auszug aus und eine (sehr) kurze Version von Benefits of Continous Integration auf martinfowler.com.

  • Bugs: "Continuous Integration beseitigt Bugs nicht, erleichtert aber das Auffinden und Entfernen erheblich." So arbeiten Sie effizienter.
  • Überblick: Historisch gesehen gab es in Softwareprojekten viele Unsicherheiten und Unbekannte. Mit CI versetzen Sie sich selbst in die Lage, immer Bescheid zu wissen "wo Sie sind, was funktioniert, was nicht, was die ausstehenden Fehler in Ihrem System sind."
  • Barrieren abbauen: "Continuous Integration hilft, die Barrieren zwischen den Kunden und der Entwicklung abzubauen - Barrieren, von denen ich glaube, dass sie die größten Hindernisse für eine erfolgreiche Softwareentwicklung sind."

Unterm Strich lassen sich die Vorteile von Continuous Integration zusammenfassen in ein gemindertes Risiko, weniger Zeitaufwand und weniger Kosten. Abgesehen von diesen Vorteilen auf Unternehmensebene haben Sie auch einen persönlichen Vorteil: Deployment in all seinen Facetten ist ein spannendes Thema, das jedoch häufig gefürchtet wird. CI zwingt Sie dazu, dies oft zu tun, so dass Sie damit vertraut werden und die Scheu verlieren. Ganz nach dem Motto: Wenn man vor irgendetwas Angst hat, sollte man es öfter machen.

Continuous Integration: Nachteile

Wenn es Vorteile gibt, gibt es mit Sicherheit auch Nachteile. Was sollte man bei der Abwägung von Continuous Integration-Tools mit in die Gleichung einbeziehen?

  • Wartungsaufwand: Der CI-Server muss wie jeder andere Server gewartet und gemanaged werden. Das ist mit etwas Overhead verbunden.
  • Serverabhängigkeit: Wenn der CI-Server ausfällt, dann fällt alles aus. Daher sollte der Serverwartung und -sicherheit ein hohes Maß an Aufmerksamkeit gewidmet werden.
  • Einführung: Wenn Sie in einer Gruppe oder Organisation arbeiten und versuchen, CI einzuführen, kann es einige Zeit und Mühe kosten, es in Ihrer Unternehmenskultur zu verankern. Das Wichtigste ist, alle Entwickler ins Boot zu holen und dafür zu sorgen, dass dort auch alle bleiben.

Continuous Integration-Tools: Eine Auswahl

Bei INWT verwenden wir derzeit je nach Projekt zwei verschiedene CI-Tools, nämlich Jenkins und Travis CI. Beides wird hier kurz vorgestellt. Natürlich gibt es eine Vielzahl weiterer Tools, die möglicherweise besser zu Ihren Anforderungen passen. Weiter unten finden Sie eine verlinkte Liste mit weiteren CI-Tools (die natürlich keinen Anspruch auf Vollständigkeit erhebt).

Jenkins

Jenkins ist derzeit der führende Open Source-Automatisierungsserver und in Java programmiert. Es wird unter der MIT-Lizenz vertrieben. Jenkins ist absolut kostenlos und sehr flexibel, da es die Verwendung einer großen Auswahl an Versionskontrollsystemen ermöglicht und mehr als 1.500 Plugins bietet.

Travis CI

Travis CI ist auch ein Open Source-Automatisierungsserver, der unter MIT vertrieben wird und in Ruby programmiert ist. Travis CI ist kostenlos für Open Source-Projekte und lizenziert für Unternehmen und private Projekte. Projekte müssen GitHub als Versionskontrollsystem verwenden, um Travis CI als Continuous Integration-Plattform verwenden zu können.

Weitere CI-Tools

  • Bamboo
  • Buildbot
  • CircleCI
  • Codeship
  • GitLab CI
  • GoCD
  • integrity
  • TeamCity

Wie geht es weiter?

Unser nächster Blog-Artikel befasst sich mit Jenkins, gibt Ihnen einen Rundgang und führt in die wesentlichen Aspekte der Benutzeroberfläche ein. Sobald Sie mit dieser Umgebung vertraut sind, verfügen Sie über ausreichende Kenntnisse, um ihre ersten CI Projekte zu meistern.