Externe Datenbanken verwenden mit Pipelines

Ein Artikel von Valentina Lanz, Consultant, Diso AG

Source Code Management, Continuous Integration, Continuous Delivery – alles in einem Tool: Eine Delivery Pipeline. Atlassian liefert ab sofort mit Bitbucket Cloud das „Pipelines“ Feature, welches wir nutzen, um die Integrations- und Auslieferungs-Tasks zu automatisieren. Dieser Artikel erklärt, wie das Datenbanktesting mit Bitbucket Pipelines funktioniert.

Automatisiertes Sourcecode-Testing ist mit Bitbucket Pipelines trivial: Mittels der Docker-Technologie wird in der Pipeline ein Container erstellt. Der Source Code des Repositories wird anschliessend durch Maven oder andere Build-Tools gebuildet. Testing Frameworks übernehmen dann das Validieren von Daten und Funktions-Outputs. Der ganze Prozess kann in der Pipeline nachvollzogen werden und es wird aufgezeigt, ob der Build des Source Codes erfolgreich durchgelaufen ist, indem die Pipeline als passed oder failed gekennzeichnet wird. Soviel zu Daten aus dem Source Code. Wie verwenden wir jedoch Daten, die nicht aus dem Source Code stammen?

In unserem Fall verwenden wir als Datenbank einen Server, der nicht innerhalb unseres Netzwerks liegt und greifen von unseren lokalen Entwicklungsmaschinen durch SSH auf den Server zu. Ohne Tunnel auf die Datenbank würden alle Unit Tests, welche mit Datenbankdaten zu tun haben, in diesem Fall scheitern. Bitbucket Pipelines löst dieses Problem, indem im Hintergrund ein SSH Tunnelprozess gestartet wird, so dass die nächsten Pipeline-Instruktionen weiterfahren können. Von Seiten der Sicherheit her, ergibt dies jedoch ein Problem: Wo legen wir die Credentials für den Datenbankserver ab und wo wird dieser Tunnel erstellt?

Abb. 1: Start eines SSH Tunnelprozess im Hintergrund

Custom Docker Image

Bitbucket braucht Docker Containers, um Code auszuführen und zu testen. Das Docker Image, das dazu verwendet wird, ist by default das Default (Maven) Image von Docker. Man kann aber auch ein eigenes Docker Image angeben, welches entweder auf dem Docker Hub oder auf einem privaten Repository verfügbar ist. (How to)

Sichere Umgebungsvariablen

Es gibt auch die Möglichkeit, secure Variablen in Bitbucket abzulegen. Alle Variablen können
dann mit $ vom Pipelineskript benutzt werden. (How to)

Abb. 2: Ausschnitt aus der Atlassian Bitbucket Pipelines Dokumentation

Abb. 3: Sichere Umgebungsvariabeln in Bitbucket Pipelines hinterlegen

Die Secure Variables ermöglichen es, unsere Keyfiles in Textformat abzulegen und bei der
Pipeline Ausführung in den Container einzufügen.

Abb. 4: Keyfile Verwendung in einem SSH-Tunnelaufruf

Pipeline Aufruf

Beim Pipeline Aufruf können somit beide Techniken kombiniert verwendet werden, um unseren Tunnel innerhalb des Diso Docker Images zu erstellen:

Abb. 5: Auszug aus dem Diso Pipelines File

Diso AG – Der Schweizer 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:

Valentina Lanz arbeitet bei der Diso AG als Software Consultant im Bereich Javascript, Java, Docker und DevOps. Während ihres Bachelorstudiums in Informatik mit Vertiefung in IT Security an der Berner Fachhochschule konnte sie sich mit den Themen der Webapp- und Informationssicherheit befassen. Sie erhielt während dieser Zeit verschiedene Zertifikate, unter anderem das OSSTMM Professional Security Tester Zertifikat.