Best Practices der Softwareentwicklung: CI/CD bei Cloudwharf

Marco Zander

6 min read

In diesem Blogpost geht es darum, was CI/CD (Continuous Integration und Continuous Deployment) ist und wie es uns dabei hilft exzellente Lösungen zu entwickeln. Dabei verwenden wir Beispiele aus unserem Entwicklungsprozess für Apps für den Salesforce-AppExchange.

Wir streben stets danach, unseren Kund:innen die besten Lösungen zu bieten, die ihr Unternehmen benötigt, und bauen so Vertrauen in unser Unternehmen als Team von Hightech-Produktentwickler:innen auf.

Dr.-Ing. Konstantin Teplinskiy CEO & FOUNDER

Und als zusätzliches Highlight erfahrt ihr, wie Continuous Integration mit dem panischen Gefühl zusammenhängt, wenn ihr merkt, dass ihr eure Schlüssel verloren habt 😱🔓 – und die Erleichterung, die ihr verspürt, wenn ihr euch daran erinnert, dass ihr dieses *Kling* noch im Garten eurer Freundin gehört habt.

Inhaltsverzeichnis

Was ist CI/CD?

Zunächst die technische Version: CI/CD steht für Continuous Integration (CI) und Continuous Deployment (CD). Es handelt sich um eine Reihe von Praktiken, die darauf abzielen, den Softwareentwicklungs- und Deploymentprozess zu automatisieren und zu optimieren.

Unterschied zwischen CI und CD

Obwohl CI und CD oft zusammen genannt werden, gibt es wesentliche Unterschiede:

CI (Continuous Integration)

Continuous Integration konzentriert sich auf das Integrieren von Codeänderungen und das Durchführen automatisierter Tests. Das Hauptziel ist es, Integrationsprobleme frühzeitig zu erkennen und zu beheben. Anstatt wenige große Veränderungen am Code vorzunehmen (siehe Big Bang Integration unten), integriert CI kontinuierlich kleine Änderungen in die Software. Dies erleichtert es, Probleme zu identifizieren und zu beheben, die bei der Softwareentwicklung unvermeidlich auftreten.

Eine Metapher: CI als Wissen, wo ihr eure Schlüssel verloren habt: Stellt euch vor, ihr kommt nach einem schönen Besuch bei einer Freundin nach Hause. Als ihr eure Tür erreicht, merkt ihr, dass eure Schlüssel fehlen. 😱😰 Panik setzt ein, aber dann erinnert ihr euch an das deutliche *Kling*, das ihr kurz nach dem Verlassen des Hauses eurer Freundin gehört habt – und das ihr in dem Moment nicht zuordnen konntet. Erleichterung durchströmt euch, denn anstatt jeden Schritt vom Haus eurer Freundin bis zu eurem Haus zurückzuverfolgen, wisst ihr genau, wo ihr suchen müsst – direkt vor ihrem Haus. Ähnlich hilft CI dabei, durch das kontinuierliche Integrieren kleinerer Codeänderungen Probleme schnell zu identifizieren und zu beheben, was Zeit spart und Frustrationen reduziert.

CI vs. Big Bang Integration – Warum Continuous Integration?

Eine weitere Möglichkeit, CI zu verstehen, besteht darin, es mit Big Bang Integration zu vergleichen.

Während Big Bang Integration mit einer großen Änderung normalerweise zu Ineffizienzen führt, hilft Continuous Integration mit kleinen Code-Commits, Fehler zu entdecken.

Big Bang Integration: Wenn ihr an den verschiedenen Teilen eines komplexen Systems wie Software individuell arbeitet und sie dann Tage, Wochen oder sogar Monate später wieder zusammenführt, spricht man von Big Bang Integration. Dies funktioniert normalerweise nicht gut und führt zu extremen Ineffizienzen.

Continuous Integration: CI versucht genau das zu verhindern. Eine Funktion wird implementiert, getestet und so schnell wie möglich in ein laufendes System integriert. Der Entwicklungsfortschritt wird daher kontinuierlich integriert.

Ein Salesforce-spezifisches Beispiel: Um dies zu veranschaulichen, betrachten wir ein häufiges Szenario in der Salesforce-Entwicklung: Stellt euch vor, ihr habt ein neues Feld zu einem Seitenlayout hinzugefügt. Während CI wird diese Änderung kontinuierlich in den gemeinsamen Codebestand integriert. Wenn ihr jedoch vergesst, dieses Feld während des Deployments (der Bereitstellung) abzurufen, aber trotzdem das Layout einschließt, werden CI-Tools diesen Unterschied feststellen und euch auf das fehlende Feld hinweisen. Dies ist ein einfaches, aber kraftvolles Beispiel dafür, wie CI sicherstellt, dass kleine, inkrementelle Änderungen korrekt integriert werden und das Risiko von Fehlern in späteren Phasen minimiert wird.

Warum treten nach CI noch Fehler auf?

Trotz gründlicher Tests während CI können einige Fehler dennoch auftreten. Diese Fehler können entstehen durch:

  • Umgebungsunterschiede: Zum Beispiel kann eine Funktion in der Entwicklungsumgebung funktionieren, aber in der Staging- oder Produktionsumgebung aufgrund von Konfigurationsunterschieden fehlschlagen.
  • Randfälle, die nicht durch Tests abgedeckt sind: Automatisierte Tests können bestimmte Randfälle übersehen, was zu Problemen führt, wenn der Code in realen Szenarien verwendet wird.
  • Integrationskomplexitäten, die nur unter realen Bedingungen auftreten: Dies ist besonders häufig in Umgebungen, in denen mehrere Systeme oder Drittanbieter-APIs interagieren.

Für uns stammen die häufigsten Probleme aus API-Änderungen, die von Drittanbietern vorgenommen wurden, obwohl Salesforce-Updates gelegentlich ebenfalls Probleme verursachen können, obwohl dies ziemlich selten ist.

Aus vergangenen Fehlern lernen: Um unsere CI-Pipeline kontinuierlich zu verbessern, bemühen wir uns, Fehler, die während der ersten automatisierten Tests nicht erfasst wurden, in unsere zukünftigen Tests zu integrieren. Wir überprüfen und verbessern unsere CI-Pipeline etwa alle sechs Monate, um sicherzustellen, dass sie robust und effektiv bleibt.

Obwohl CI die meisten Probleme frühzeitig erkennt, garantiert es kein fehlerfreies Produkt, insbesondere da es nur alles bis zur Vor-Deployment-Testphase abdeckt (was bedeutet, dass die Software noch nicht die Kund:innen erreicht hat). Hier kommt Continuous Deployment ins Spiel.

CD (Continuous Deployment)

Continuous Deployment konzentriert sich auf die automatische Bereitstellung des Codes in der Produktionsumgebung. Das Prinzip ist dasselbe wie bei CI: Anstatt ein großes Deployment vorzunehmen, versucht ihr, den Deploymentprozess kontinuierlicher zu gestalten. Das Hauptziel ist es, sicherzustellen, dass der Code immer bereit ist, live zu gehen.

CI/CD-Pipelines helfen, die Unterschiede zwischen CI und CD zu verstehen.

Was sind CI/CD-Pipelines?

Code-Commit, automatisierte Tests, Build, Deployment (in Sandbox/Produktionsumgebungen) und dann Überwachung/Monitoring sind die Phasen der CI/CD-Pipeline.
adaptierte und vereinfachte Version basierend auf Broy, M., & Kuhrmann, M. (2021) und Kneuper, R. (2018)

Eine CI/CD-Pipeline ist eine automatisierte Abfolge von Schritten, die durchgeführt werden, um Software von der Entwicklung bis zur Produktion zu bringen. Diese Pipeline umfasst typischerweise:

  1. Code-Commit: Entwickler:innen übergeben den Code an ein Versionskontrollsystem.
  2. Automatisierte Tests: Der Code wird automatisch getestet, um sicherzustellen, dass er korrekt funktioniert.
  3. Build: Der Code wird kompiliert und in ein ausführbares Format gebracht.
  4. Deployment: Der Code wird in der Produktionsumgebung bereitgestellt.
  5. Überwachung: Nach dem Deployment wird die Anwendung überwacht, um sicherzustellen, dass sie ordnungsgemäß funktioniert.

CI/CD-Pipeline bei Cloudwharf: In unserer CI/CD-Pipeline folgen wir einem strukturierten Ansatz: Die gesamte Entwicklung erfolgt zunächst in einer Entwicklungssandbox. Sobald der Code hier validiert wurde, wird er in die Stagesandbox verschoben, um in einer Umgebung, die der Produktion ähnelt, weiter validiert zu werden. Hier können sowohl unser Team als auch unsere Kund:innen überprüfen, ob alles wie erwartet funktioniert. Schließlich wird der Code nach bestandenen Prüfungen in die Produktionsumgebung überführt. Dies stellt sicher, dass potenzielle Probleme so früh wie möglich identifiziert und behoben werden, wodurch das Risiko von Problemen in der Live-Umgebung minimiert wird.

Warum ist CI/CD wichtig?

CI/CD ist aus mehreren Gründen entscheidend:

  • Schnellere Markteinführung: Mit CI/CD könnt ihr neue Funktionen und Updates schneller deployen, was euch einen Wettbewerbsvorteil verschafft.
  • Höhere Qualität: Automatisierte Tests und kontinuierliche Integration erkennen Fehler frühzeitig und verbessern die Qualität eurer Software.
  • Effizienz: CI/CD automatisiert viele manuelle Prozesse, erhöht die Effizienz und verkürzt Entwicklungszyklen.
  • Kontinuierliche Verbesserung: Regelmäßige Deployments ermöglichen kontinuierliches Feedback von Benutzer:innen, wodurch eure Produkte fortlaufend verbessert werden können.

Vorteile von CI/CD für ein Unternehmen

Die Implementierung von CI/CD bietet zahlreiche Vorteile:

  • Reduzierte Risiken: Durch kontinuierliche Tests und Deployments werden Fehler frühzeitig erkannt und schnell behoben.
  • Höhere Zuverlässigkeit: Automatisierte Prozesse reduzieren menschliche Fehler und erhöhen die Zuverlässigkeit der Software.
  • Schnellere Wiederherstellung: Im Falle eines Problems kann der Code schnell zurückgesetzt oder aktualisiert werden, wodurch die Ausfallzeit minimiert wird.
  • Bessere Zusammenarbeit: CI/CD fördert eine bessere Zusammenarbeit und Kommunikation zwischen den Teams, da alle auf derselben Grundlage arbeiten.

Wie Cloudwharf CI/CD nutzt und davon profitiert

Bei Cloudwharf haben wir CI/CD in unseren Entwicklungsprozess integriert. Hier sind einige spezifische Vorteile, die wir erleben:

  • Automatisierung von Routineaufgaben: Unsere Entwickler:innen können sich auf das Schreiben von Code konzentrieren, während die CI/CD-Pipeline automatisch Tests und Deployment übernimmt. Dies spart Zeit für die erfahrenen Entwickler:innen, da automatisierbare Überprüfungen wegfallen.
  • Selbstprüfung: Unser Teamleiter Sergey sagt, dass einer der Hauptvorteile auch darin besteht, dass Entwickler:innen ihren eigenen Code selbst überprüfen können.
  • Schnellere Deployments: Neue Funktionen und Updates werden so schnell wie möglich bereitgestellt, was uns hilft, schnell auf die Bedürfnisse unserer Kund:innen zu reagieren.
  • Hohe Qualität: Durch kontinuierliche Tests stellen wir sicher, dass unsere Software immer von höchster Qualität ist und die Erwartungen unserer Kund:innen erfüllt oder übertrifft.
  • Effizienteres Projektmanagement: CI/CD ermöglicht es uns, Projekte effizienter zu verwalten und abzuwickeln, was zu zufriedeneren Kund:innen und besseren Geschäftsergebnissen führt.

Durch die Implementierung von CI/CD bei Cloudwharf haben wir unsere Effizienz gesteigert, die Qualität unserer Produkte verbessert und unsere Kund:innen zufriedener gemacht. Wir sind überzeugt, dass CI/CD auch für eure Firma von großem Nutzen sein kann, um die Projektausführung zu optimieren und die Teamkommunikation zu verbessern. Wenn ihr plant, CI/CD in eurem Unternehmen zu implementieren: Hier der Rat von unserem Teamleiter Sergey:

Beginnt damit, die wichtigsten Prüfungen in eure Pipeline zu integrieren, selbst wenn ihr noch nie CI/CD verwendet habt. Baut diese Grundlagen schrittweise aus, indem ihr den Umfang und die Abdeckung eurer Tests im Laufe der Zeit incrementell erhöht.

Sergey Potapov Salesforce Platform Developer & Team-Lead

Ihr wollt mit uns zusammenarbeiten und von Continuous Integration und Deployment profitieren?

Kontaktiert uns noch heute!

Zusätzliche Ressourcen und Referenzen

  • Kneuper, R. (2018). Software processes and life cycle models. Springer.
  • Broy, M., & Kuhrmann, M. (2021). Einführung in die Softwaretechnik. Springer.
  • Pittet, S. Continuous integration vs. delivery vs. deployment. Atlassian, https://www.atlassian.com/continuous-delivery/ci-vs-ci-vs-cd, abgrufen am: 25. Juli 2024
Teilen:

Das könnte dir auch gefallen

Automatisiert euer Unternehmen
mit uns

Wir freuen uns über eure Nachricht und antworten euch in der Regel innerhalb eines Geschäftstages!