Continuous Integration

Schneller zum Ziel: Unser Qualitätsmanagement sprintet mit. 

Continuous Integration gehört zu den agilen Softwareentwicklungsmethoden und beruht stark auf dem Prinzip des interaktiven Arbeitens. Im Kern geht es darum, Software inkrementell auszuliefern und kurze Feedbackschleifen mit dem Kunden zu etablieren, um Projekte schnell und effizient voranzubringen und qualitativ hochwertige Software zu erstellen.

Mit Continuous Integration zum Continuous Relaunch

Der Trend hin zur kontinuierlichen Website-Optimierung (Continuous Relaunch) anstelle eines alle fünf Jahre stattfindenden Big Bang Relaunchs unterstützt die Notwendigkeit von Continuous Integration zusätzlich. Sollen nämlich kontinuierlich kleine Verbesserungen an einem Webprojekt umgesetzt werden, verkürzt dieser Prozess die Entwicklung dahingehend, dass Fehler schnell identifiziert und beseitigt werden können, wie beispielsweise solche, die durch Interdependenzen des Codes auftreten. 

Um eine kontinuierliche Auslieferung zu gewährleisten, müssen die folgenden drei Punkte gewährleistet sein: 

  1. Reibungsloses und automatisiertes Deployment der Software (Continuous Deployment)
  2. Kontinuierliches Testen der (Entwicklungs-)Umgebung, damit keine gegenseitigen Abhängigkeiten von Code/Features auftreten
  3. Integration des Kunden in den Feedback-Prozess


punkt.de Infrastruktur

Continuous Deployment als Grundlage für Continuous Integration

Die Entwicklungskette beginnt bei uns auf den Rechnern der Entwickler. Um zu gewährleisten, dass die Software in der Art, wie sie von uns programmiert wurde, auch auf den Servern Ihres Projektes läuft, haben unsere Entwickler immer eine virtualisierte Umgebung des Projektes auf ihren Arbeitsgeräten. Dies hat einerseits den Vorteil, dass eine exakte Umgebung abgebildet wird - und so Abhängigkeiten vermieden werden. Einmal erstellt, kann diese Umgebung andererseits schnell zwischen verschiedenen Personen ausgetauscht werden. 

Selbstverständlich setzen wir Versionierungssysteme zum verteilten Arbeiten ein. Dabei setzen wir auf die Open Source-Lösung Gitlab, die den Code für Ihr Projekt verwaltet. Von dort aus wird der Code automatisch an einen Integrationsserver weitergereicht, der automatisiert bestimmte kleinere Test-Szenarien durchführt und den Code anschließend je nach Einstellung auf das Test- oder auf das Produktiv-System deployen kann. Durch diesen Prozess und den hohen Automatisierungsgrad in unserer Infrastruktur sind wir in der Lage auch große Projekte innerhalb kurzer Zeit auf komplexe Infrastrukturen zu deployen. 

Beim Deutsche Post Projekt konnten wir so eine Menge Zeit sparen. Zu Beginn der Zusammenarbeit war das Deployment nicht nur zeitaufwendig - fünf Personen waren circa sieben Stunden beschäftigt -, sondern auch fehleranfällig, weil nicht automatisiert getestet wurde. Dank unserer Continuous Integration-Infrastruktur benötigt eine Person heute nur noch circa 30 Minuten. Dabei wird hauptsächlich der Prozess überwacht und die Dokumentation für den aktuellen Release angefertigt

Testing ist das A und O

Um Software schnell und automatisiert zu deployen, ist es unerlässlich, dass sie zu jedem Zeitpunkt während des Projektes automatisiert getestet werden kann. Um das Testing auf verschiedenen Ebenen durchführen zu können, setzen wir auf unterschiedliche Technologien. 

 

Von den klassischen Unit-Tests, die zwar hochfunktional, aber oft zu gekapselt sind, über funktionale Tests mit Behat bis hin zu Last- und Performance-Tests mit Gatling setzen wir unterschiedliche Arten von Tests ein. Sogar Pagespeed und Y-Slow werden von uns kontinuierlich mit GTmetrix getestet. So können wir bei Bedarf eingreifen - und Sie beruhigt schlafen.

 

Bei umfangreichen Webprojekten ist die Anzahl der Tests meist relativ hoch, was dazu führt, dass das Testen entsprechend viel Zeit benötigen würde, wenn alle Tests zur selben Zeit durchgeführt werden würden. Unsere Lösung: Zur richtigen Zeit das richtige Testen.

 

Die Commit-Stage wird bei jedem Code Commit ausgelöst und überprüft den Codestyles und semantische Fehler.
Ist die Commit-Stage erfolgreich durchgelaufen, folgen die funktionalen Tests auf der Functional-Stage.

 

Es gibt aber auch bestimmte Stages, die so lange laufen oder so viel Last auf dem System benötigen, dass diese zu bestimmten Zeiten ausgelöst werden. Die beiden Stages, die wir hauptsächlich benutzen, sind die Acceptance-Stage und die Load-Stage. Die Acceptance-Stage führt umfangreiche Tests in Oberfläche und Funktionalität durch und benötigt dadurch so viel Zeit, dass sie in den meisten Projekten nachts durchgeführt wird. Auch die Load-Stage muss meist nachts betrieben werden, da hierbei oftmals auch angeschlossene Systeme getestet werden und diese tagsüber die Last für ihren eigentlichen Zweck benötigen. 

Vorteile einer Continuous Integration Infrastruktur

Sie erhalten von uns eine stabile und sichere Software, die ohne hohe Kosten immer aktuell gehalten wird. Ganz gleich, ob Sie ein Intranet-Portal für Ihre Mitarbeiter oder Ihre Corporate Website ausliefern wollen, wir ermöglichen es Ihnen, ohne lange Wartungszeiträume und ausgiebige Planungen auf Ihrer Seite neue Features oder Fehlerbehebungen auszurollen.

 

Zusätzlich erhalten Sie vollen Zugriff auf unser Testsystem, auf dem Sie jederzeit Änderungen an Ihrem System nachvollziehen können. Dadurch behalten Sie den Überblick über alle Entwicklungen und müssen nicht bis zum nächsten Review (der vielleicht erst in vier bis sechs Wochen stattfindet) warten, um festzustellen, dass die Software in die falsche Richtung entwickelt wurde.

Sie benötigen Hilfe beim Implementieren?

Gerne helfen wir Ihnen auch Ihre Softwareentwicklung mithilfe von Continuous Integration zu optimieren. In der Academy bieten wir verschiedenen Workshops zum Thema Continuous Integration an.  Schauen Sie dort und sprechen Sie uns persönlich an. Wir finden die passende Lösung für Sie. 
 


Offene Fragen zu Continuous Integration?

Sollten Sie weitere Fragen zum Verständnis von Continuous Integration haben, kontaktieren Sie uns gerne. 

Case Studies
Neueste Blogbeiträge
$success = $this -> getConnected();
Mihriban Dalmis, Entwicklung bei punkt.de
Arbeiten bei punkt.de