Erlerne Continuous Deployment mit Bitbucket Pipelines

In dieser Anleitung erfährst du, wie du mit Bitbucket Pipelines eine Continuous-Deployment-Pipeline implementieren kannst.

Sten Pittet Sten Pittet

Bei der Softwareentwicklung, speziell der Anwendungsentwicklung, sind oft größere Kompromisse erforderlich. Soll die Anwendung schneller sein, musst du laut allgemeiner Überzeugung Abstriche bei der Qualität der Releases machen. Es gibt jedoch eine Entwicklungsmethode, mit der du Zeit einsparen und deine Releases beschleunigen kannst: Continuous Deployment.

Bei Continuous Deployment wird das Software-Deployment automatisiert und damit deutlich vereinfacht. Dein Entwicklerteam muss für Releases nicht mehr seine Arbeit unterbrechen und den Kontext wechseln. Stattdessen wird Code sofort nach Abschluss der Entwicklungsarbeit an die Kunden ausgeliefert.

In dieser Anleitung erfährst du, wie du mit Bitbucket Pipelines eine Continuous-Deployment-Pipeline implementieren kannst.

Vergleich zwischen Continuous Delivery und Continuous Deployment

Mit der Continuous Delivery stellst du sicher, dass dein Code jederzeit bereit für den Release ist, auch wenn du nicht jede Änderung für die Produktion bereitstellst. Es empfiehlt sich, deine Produktion so oft wie möglich upzudaten, um zu gewährleisten, dass der Umfang der Änderungen klein bleibt, aber letztendlich steuerst du den Rhythmus deines Releases.

Beim Continuous Deployment werden neue Änderungen, die in das Repository geschoben werden, automatisch in der Produktion bereitgestellt, wenn sie die Tests bestehen. Dies setzt deine Testkultur stärker in den Vordergrund (sprich: unter Druck), aber es ist eine großartige Möglichkeit, die Feedbackschleife mit deinen Kunden zu beschleunigen.

Ein Diagramm, das den Unterschied zwischen Continuous Deployment und Continuous Development zeigt | Atlassian CI/CD

Anforderungen

Zeit:

30 Minuten

Zielpublikum:

Du bist neu bei Continuous Deployment und/oder Bitbucket Pipelines

Voraussetzungen:

Kostenlos testen

Einrichtung einer Continuous Deployment-Pipeline

Das Continuous Deployment bietet Teams eine großartige Möglichkeit, die Entwicklung zu beschleunigen. Es beseitigt die Hindernisse beim Release-Genehmigungsprozess und ermöglicht es den Entwicklern, Feedback von Kunden zu erhalten, sobald sie mit ihrer Arbeit fertig sind. Probleme sind leichter zu identifizieren und zu beheben, und es gibt weniger Kontextwechsel, da es keine Release-Zeit mehr gibt.

Das Konfigurieren einer Continuous-Deployment-Pipeline mit Bitbucket Pipelines ist sehr einfach. Wir werden sehen, wie dies mit einer simplen "Hello World"‑Anwendung durchgeführt wird, die eine Staging-Umgebung und Akzeptanztests durchläuft, bevor sie automatisch für die Produktion veröffentlicht wird.

Die Quelle der "Hello World"‑App findest du im unten verlinkten Repository.

Vorbereitung des Deployments auf Heroku

Bevor wir beginnen, müssen wir ein paar Umgebungsvariablen hinzufügen, um unsere Anwendung auf Heroku bereitstellen zu können:

  • HEROKU_API_KEY: Du findest deinen API-Schlüssel in deinem Heroku-Konto.
  • HEROKU_STAGING: Name deiner Staging-Umgebung
  • HEROKU_PROD: Name deiner Produktionsumgebung

Gehe zu Pipelines > Umgebungsvariablen in deinen Repository-Einstellungen, um die Variablen hinzuzufügen.

Einrichtung von Umgebungsvariablen für das Deployment auf Heroku

Einrichtung von Umgebungsvariablen für das Deployment auf Heroku

In diesem Leitfaden verwenden wir Heroku. Sicherlich ist es möglich, dieses Beispiel an andere Hosting-Dienste anzupassen. Weitere Deployment-Leitfäden findest du in der Dokumentation.

Einrichtung der Pipeline

Unser Workflow ist ganz einfach:

  • Wir erstellen die Anwendung.
  • Wir testen den Build.
  • Wir stellen ihn in der Staging-Umgebung bereit.
  • Wir führen Akzeptanz-Tests in der Staging-Umgebung durch.
  • Bereitstellung in der Produktion.

Du wirst sehen, dass es sehr einfach ist, die entsprechende Pipeline-Konfiguration zu erstellen. Wir starten, indem wir unser automatisches Deployment zur Staging-Umgebung hinzufügen, um sicherzustellen, dass es bei jedem Push korrekt ausgeführt wird.

image: node:4.6.0   # Doing a full clone to be able to push back to Heroku. clone:   depth: full   pipelines:   branches:     main:       - step:           script: # Modify the commands below to build your repository.             - npm install             - npm test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_STAGING.git main 

Du wirst feststellen, dass wir einen kompletten Klon verwenden, um sicherzustellen, dass Heroku unseren Push nicht ablehnt. Dann verwenden wir auch eine Branch-spezifische Pipeline, um sicherzustellen, dass wir Staging nur für Änderungen bereitstellen, die auf den Main und nicht auf andere Branches übertragen werden. Du kannst diese Konfiguration auf Bitbucket übertragen, um sie in Aktion zu sehen.

Das automatische Deployment in der Staging-Umgebung ist abgeschlossen.


An diesem Punkt ist unsere Hello World-Anwendung in der Staging-Umgebung bereitgestellt.

Wir können nun zum nächsten Schritt übergehen und unsere Akzeptanztests hinzufügen. Diese stellen sicher, dass sich unsere Anwendung in einer produktionsähnlichen (Staging-) Umgebung wie erwartet verhält. Ziel ist es, Unsicherheiten aufgrund von Konfigurationsunterschieden zwischen der zum Testen des Builds verwendeten Umgebung und deiner Produktion zu beseitigen.

Wenn du dir den Code unserer App ansiehst, macht unser Test etwas extrem Einfaches, da er nur nach dem Vorhandensein der Zeichenfolge "Hello World" auf der Seite sucht. In einer realen Anwendung empfehlen wir Akzeptanztests, die viel weiter gehen und überprüfen, ob alle zugrunde liegenden Dienste, die von deiner Anwendung verwendet werden (Datenbank, Cache, Drittanbieter, usw.), korrekt funktionieren.

Also lass uns unseren Test direkt nach unserem Deployment in die Staging-Umgebung hinzufügen.

image: node:4.6.0   # Doing a full clone to be able to push back to Heroku. clone:   depth: full   pipelines:   branches:     main:       - step:           script: # Modify the commands below to build your repository.             - npm install             - HEROKU_STAGING=$HEROKU_STAGING npm test acceptance-test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_STAGING.git main             - npm test acceptance-test  

Nach der Push-Übermittlung dieser neuen Konfiguration an Bitbucket sehen wir, dass die Pipeline erfolgreich abgeschlossen wird.

Bitbucket Pipelines führt jetzt nach dem Deployment in der Staging-Umgebung Akzeptanztests durch.

Jetzt musst du am Ende nur noch unser Produktions-Deployment hinzufügen, um unsere Continuous-Deployment-Pipeline zu vervollständigen.

image: node:4.6.0   # Doing a full clone to be able to push back to Heroku. clone:   depth: full   pipelines:   branches:     main:       - step:           script: # Modify the commands below to build your repository.             - npm install             - npm test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_STAGING.git main             - HEROKU_STAGING=$HEROKU_STAGING npm test acceptance-test             - git push https://heroku:$HEROKU_API_KEY@git.heroku.com/$HEROKU_PROD.git main  

Ein letzter Push auf Bitbucket wird unsere Codeänderungen durch die gesamte Pipeline führen, den Code erstellen und testen, und stellt ihn dann für die Produktion bereit, nachdem erfolgreich überprüft wurde, dass die Staging-Umgebung funktioniert. In diesem Fall wurde die Startseite mit einer anderen Botschaft aktualisiert, um sicherzustellen, dass sie bis zur Produktion bereitgestellt wird.

Unsere neue Botschaft ging wie erwartet in Produktion!

Du kannst die Pipeline überprüfen, um sicherzustellen, dass sie alle verschiedenen Phasen korrekt durchlaufen hat.

Es wird überprüft, ob der Code die Pipeline durchlaufen hat.

Es ist sehr wichtig, dass du über eine gute Testsuite verfügst und Echtzeitüberwachung gegeben ist, bevor du Continuous Deployment für deine eigenen Repositorys implementierst. Ab diesem Zeitpunkt gehen Änderungen direkt in Produktion, sobald sie an den Haupt-Branch übermittelt werden. Umso wichtiger ist es, dass die erfolgskritischen Teile der Anwendung mit automatischen Tests überprüft werden. Zusätzlich benötigst du Überwachungstools zum Erkennen von Änderungen, die sich negativ auf die Produktionsinstanzen auswirken würden – sei es durch einen Komplettausfall oder eine Leistungsverschlechterung.

Die finale Quelle findest du im unten verlinkten Bitbucket Cloud-Repository.