Entwicklungsprozess mit Bitbucket Pipelines

Ein Artikel von Jasmin Fluri, Consultant, Diso AG

Software beeinflusst die Welt schneller als jede andere industrielle Innovation. Kein Wunder, dass sich dieses Tempo auch auf die Entwicklungs-Prozesse auswirkt. Continuous Delivery wird in der Softwareentwicklung schon fast als Norm angesehen, wenn es darum geht, die Software auf den entsprechenden Systemen zu installieren. Bisher war es stets eine Herausforderung, die verschiedenen Tools miteinander zu integrieren, damit eine erfolgreiche Delivery Pipeline aufgesetzt werden konnte.
Seit Oktober 2016 ist nun Bitbucket Pipelines auch für die Bitbucket Cloud verfügbar. Für uns ist dies eine Vereinfachung unserer Delivery Pipeline, da unser Source Code Repository und die Konfiguration der Continuous Integration und der Continuous Delivery sich am gleichen Ort befinden.

Neben der Funktionalität des Source Code Managements, welches wir mit GIT verwenden, wurde Bitbucket um eine Continuous Integration / Continuous Delivery Pipeline erweitert.

Bitbucket Pipelines folgt der DevOps Praktik „Configuration as Code“, was bedeutet, dass die komplette Konfiguration der Continuous Integration und der Continuous Delivery im Source Code der Applikation abgelegt ist.  Dies hat den Vorteil, dass es nicht mehr möglich ist, Konfigurationen anzupassen, ohne dass die Source im Repository verändert und über die Pipeline ausgeliefert wird. So wird sichergestellt, dass jederzeit die korrekte Konfiguration in einer Applikation hinterlegt ist.

Bild: Diso DevOps Prozesse enthalten die Delivery Pipeline mit Build, Test, Release, Deploy & Monitor

Configuration as Code

Die vier Prinzipien von Configuration as Code:

  • Die Konfiguration der Umgebungen sind automatisiert

  • Alles wird in der Version Control gepflegt

  • Keep it as simple as possible

  • Die Konfiguration wird beim Deployment getestet

Die Konfiguration von Bitbucket Pipelines wird über ein YAML-File pro Repository vorgenommen. Dieses muss zwingend den Namen bitbucket-pipelines.yml tragen, damit es von Pipelines als Konfigurationsfile erkannt wird.

Im YAML-File kann angegeben werden, welche Tasks nach einem PUSH in einem spezifischen Branch ausgeführt werden. Dies ermöglicht, dass unterschiedliche Pipelines für unterschiedliche Branches definiert werden. In folgendem Code-Beispiel ist eine Default Pipeline definiert, welche für alle Branches gilt, die nicht unter Branches spezifisch aufgelistet sind. Der Master Branch und der Develop Branch haben dann separate Pipelines konfiguriert. Eine solche Unterscheidung ermöglicht es uns, das Continuous Delivery nur von spezifischen Branches aus anzustossen. So wird auf dem Develop Branch nur eine Continuous Integration durchgeführt und erst wenn der Code auf den Master Branch gemerged wird, werden die Änderungen installiert.

Bitbucket Pipelines setzt beim Builden der Applikationen auf die Container-Technologie Docker. Sofern in der Konfiguration im YAML-File nichts anderes spezifiziert wurde, wird das Bitbucket Default-Docker-Image verwendet. Jedoch kann jedes Docker Image angegeben werden, welches entweder auf dem eigenen Nexus abgelegt ist oder auf dem Dockerhub zur Verfügung steht.

In der Bitbucket Dashboard Overview eines Repositories wird bei einer konfigurierten Pipeline jeweils der Status der gebuildeten Branches angegeben. So sieht man auf den ersten Blick, ob die Builds auf allen Branches erfolgreich durchgelaufen sind.

Bild: Branch Status angezeigt in Bitbucket

Zukünftig sollen wichtige Features zu Bitbucket Pipelines hinzukommen. So könnten Releases durch eine JIRA Integration direkt aus JIRA heraus erstellt und mittels eines Triggers installiert werden. Die neusten verfügbaren Features für Bitbucket Pipelines findet man jeweils unter Bitbucket What’s New.

Diso AG – Der Daten- und Cloud-Experte

Die Diso AG ist ein renommierter IT-Dienstleister und langjähriger Oracle-Vertriebspartner in der Schweiz mit Schwerpunkten in den Bereichen Datenbanken und Cloud-Lösungen. Diso bietet ihren Kunden beispielsweise die Oracle Plattform as a Service-Lösung und die dazugehörige Datenmigration an. Kunden profitieren des Weiteren vom Komplettlösungsangebot im Sinne von Planung, Integration, Support inklusive Betrieb und Überwachung von IT-Infrastrukturen und Datenbanksystemen.
Im Bereich Software-Engineering entwickelt Diso massgeschneiderte IT und Software-Lösungen für unternehmensspezifische Anwendungen, wann immer sinnvoll mit einem mobile-first Ansatz. Zudem ist Diso Spezialist wenn es um die Software-basierte Optimierung von Performance geht. Auf die Kompetenz des traditionsreichen IT-Dienstleisters und Mittelständlers vertrauen bereits namhafte Kunden aus den Schwerpunktbranchen Banken, Versicherungen Detailhandel und öffentliche Verwaltung.
Die Diso designt wandlungsfähige IT-Systeme, entwickelt massgeschneiderte Software und ermöglicht die performante Verwendung und Auswertung von Informationen.

Über den Autor:

Jasmin Fluri arbeitet bei der Diso AG als Database Consultant im Bereich Big Data, Data Mining, Oracle und DevOps. Während ihres Bachelorstudiums in Wirtschaftsinformatik an der Berner Fachhochschule mit Vertiefung in eBusiness & eGovernment setzte sie sich umfassend mit dem Thema DevOps und den automatisierten Prozessen in der Softwareentwicklung auseinander. Hierfür erhielt sie 2016 den Ehrenpreis für die beste Bachelor-Thesis. Seit einem Jahr unterrichtet sie unter anderem für die Diso AG als Lehrbeauftragte an der Fachhochschule Nordwestschweiz im Studiengang Informatik die Module Software Construction und Code Review.