Topics Ci cd Best Practices für kontinuierliche Integration

Best Practices für kontinuierliche Integration


Kontinuierliche Integration (CI) hilft Entwicklungsteams, produktiver zu sein und die Codequalität insgesamt zu verbessern. Die Implementierung von CI ist jedoch nur ein Schritt, um eine schnellere Bereitstellungen zu erreichen. Um dein CI-System bestmöglich zu nutzen, ist es wichtig, die Best Practices für kontinuierliche Integration in deinen Workflow einfließen zu lassen.

Best Practice für CI: früh committen, oft committen

In der Regel ist es viel einfacher, kleine Probleme zu beheben als große. Einer der größten Vorteile der kontinuierlichen Integration ist, dass Code in einem geteilten Repository mit anderen Änderungen, die gleichzeitig stattfinden, integriert wird. Wenn ein Entwicklungsteam Codeänderungen frühzeitig und häufig committet, sind Fehler leichter zu erkennen, da weniger Code zu überprüfen ist.

Durch das Testen in kleinen Chargen wird die Codequalität verbessert und Teams können effektiver iterieren.

Best Practice für CI: Lies die Dokumentation (und dann lies sie nochmal)

Systeme für kontinuierliche Integration machen die Dokumentation auf breiter Basis verfügbar. Diese Dokumentation ist weiterhin hilfreich, lange nachdem du CI in deinen Workflow integriert hast. GitLab verfügt über eine umfassende CI/CD-Dokumentation, die regelmäßig aktualisiert wird, um die neuesten Prozesse widerzuspiegeln.

Es kann hilfreich sein, auf die Dokumentation in READMEs oder in anderen zugänglichen Formaten zu verweisen. Ermutige deine Teammitglieder, zuerst die Dokumentation zu lesen, Links im Browser zu speichern, FAQs zu erstellen und diese Ressourcen beim Einarbeiten neuer Teammitglieder zu verwenden.

Best Practice für CI: Optimiere die Pipeline-Phasen

CI-Pipelines enthalten Jobs und Phasen: Jobs sind die Aktivitäten in einer bestimmten Phase. Sobald alle Jobs übergeben wurden, kommt der Code in die nächste Phase. Um deine CI-Pipelines perfekt zu nutzen, musst du die Phasen optimieren, sodass Fehler einfach erkannt und behoben werden können.

Phasen sind eine einfache Möglichkeit, ähnliche Jobs zu gruppieren. Es gibt aber vielleicht einige Jobs in deiner Pipieline, die sicher in einer früheren Phase ausgeführt werden können, ohne das Projekt zu gefährden, wenn sie fehlschlagen. Überlege, diese Jobs in einer früheren Phase auszuführen, um die CI-Pipelines zu beschleunigen.

Best Practice für CI: Erstelle Builds schnell und einfach

Nichts verlangsamt eine Pipeline so sehr wie Komplexität. Konzentriere dich darauf, dass deine Builds schnell bleiben. Hier ist wiederum der beste Weg, die Dinge so einfach wie möglich zu gestalten.

Jede Minute, die die Build-Zeit verkürzt wird, spart deinen Entwickler(inne)n bei jedem Commit eine Minute ein. Da CI häufige Commits erfordert, kann sich diese Zeit summieren. Martin Fowler spricht über die Richtlinie des zehnminütigen Builds, die die meisten modernen Projekte erreichen können. Da die kontinuierliche Integration häufige Commits erfordert, kann die Zeitersparnis bei Commit-Builds den Entwickler(inne)n viel Zeit zurückgeben.

Best Practice für CI: Nutze Fehlschläge, um Prozesse zu verbessern

Verbesserung ist ein Prozess. Wenn Teams ihre Reaktion auf Fehlschläge ändern, führt dies zu einem kulturellen Wandel, der kontinuierliche Verbesserungen mit sich bringt. Anstatt zu fragen, wer den Fehlschlag verursacht hat, frage was ihn verursacht hat. Das bedeutet, von einer Schuldzuweisungskultur zu einer Lernkultur überzugehen.

Wenn Teams häufige Commits durchführen, wird es viel einfacher, Probleme zu erkennen und zu lösen. Wenn es Muster in fehlgeschlagenen Builds gibt, schau dir die zugrunde liegenden Ursachen an. Gibt es Fehler, die nicht im Code liegen und unnötige Builds verursachen? Vielleicht solltest du einen `allow_failure“-Parameter einbauen. Suche nach Möglichkeiten, um dich ständig zu verbessern, Fehlschläge niemandem zuzuschreiben und nach Ursachen (und nicht nach Schuldigen) zu suchen.

Best Practice für CI: Die Testumgebung sollte die Produktion widerspiegeln

Bei der kontinuierlichen Integration löst jeder Commit ein Build aus. Diese Builds führen dann Tests durch, um festzustellen, ob etwas durch die von dir eingeführten Codeänderungen beschädigt wird. Die Testpyramide ist eine Möglichkeit für Entwickler(innen), darüber nachzudenken, wie man Tests ausbalanciert.  Umfassende Tests werden hauptsächlich als Schutzmaßnahme verwendet, wobei Unit-Tests am häufigsten verwendet werden, um Fehler zu identifizieren. Eine wichtige Sache, die du beim Testen beachten solltest, ist die Umgebung. Wenn die Test- und Produktivumgebungen übereinstimmen, bedeutet dies, dass sich die Entwickler(innen) auf die Ergebnisse verlassen und mit Zuversicht bereitstellen können.

In GitLab kansnt du mit Review Apps den neuen Code in einer produktionsähnlichen Live-Umgebung testen, um Codeänderungen zu visualisieren. Diese Funktion hilft Entwickler(inne)n, die Auswirkungen von Änderungen zu überprüfen.

Durch die kontinuierliche Integration können Entwickler(innen) schneller bereitstellen und schneller Feedback erhalten. Das beste System für die kontinuierliche Integration ist letztendlich das, das du tatsächlich verwendest. Finde die richtige CI für deine Anforderungen und setze dann diese Best Practices um, um das Beste aus deinem neuen CI-Workflow herauszuholen.

Erfahre mehr über Best Practices mit GitLab CI

Fazit

Wenn du diese Best Practices berücksichtigst, können deine Softwareentwicklungsteams und auch deine Plattform-Teams und Dev-Ops-Teams ihre Arbeit im Rahmen der kontinuierlichen Integration verbessern und in weiterer Folge die Entwicklungs- und Bereitstellungsprozesse optimieren. Da diese Praktiken immer mehr in deine Entwicklungsumgebung eingebettet werden, wird die Abstimmung zwischen den Zielen des Entwicklungsteams und der operativen Ausführung noch besser.

Denk daran, dass es auch beim stärksten System für kontinuierliche Integration nicht um die Tools geht, sondern darum, wie effektiv dein Team dieses Tool nutzt, um Verbesserungen umzusetzen und schnelle, zuverlässige Ergebnisse zu erzielen.

Bist du bereit?

Sieh dir an, was dein Team mit einer einheitlichen DevSecOps-Plattform erreichen könnte.