Continous Integration mit Talend
In der Startphase vieler Projekte ist der Integrationsaufwand von Codeänderungen überschaubar, weshalb dies oft manuell vom Entwickler oder Betriebsteam übernommen wird. Im Laufe des Projekts kann dieser jedoch sehr schnell ansteigen, sodass viel Zeit der eigentlichen Entwicklung dafür aufgebracht werden muss. An dieser Stelle kann Continous Integration (CI) Abhilfe schaffen und Projektteams als große Unterstützung dienen.
CI ist eine Praktik der Softwareentwicklung, die darauf abzielt, die Qualität, Zuverlässigkeit und Geschwindigkeit von Softwareprojekten zu verbessern. Es beinhaltet die automatische Integration von Code-Änderungen in ein gemeinsames Repository sowie die automatische Erstellung und Ausführung von Tests. Das Ziel von CI ist es, die Probleme frühzeitig zu erkennen und zu beheben, bevor sie sich zu größeren und kostspieligeren Problemen entwickeln. Um CI erfolgreich mit Talend zu implementieren, gibt es einige Voraussetzungen. Dazu gehören ein Versionskontrollsystem wie zum Beispiel GIT ein BuildServer, mit welchem die Talend Jobartefakte gebaut werden können, sowie ein Automatisierungswerkzeug wie Jenkins, mit welchem es möglich ist CI-Pipelines zu entwickeln. Schlussendlich ist eine automatisierte Integrationsumgebung erforderlich, auf welcher die Builds getestet werden.
Auf diese Kernelemente wird in diesem Blogbeitrag näher eingegangen. Die Thematik richtet sich an alle Entwicklerteams, welche mittels Talend Software entwickeln und bereitstellen und den manuellen Integrationsaufwand elegant umgehen möchten.
Was ist Continous Integration (CI)?
Durch die Verwendung von CI werden konventionelle Entwicklungsmethoden abgelöst, wodurch das Arbeiten in Teams vereinfacht werden soll. So sollen zum Beispiel Redundanzen im Code vermieden, die Beseitigung von Fehlern und Bugs im Code vereinfacht und ein zentraler Ort dafür benutzt werden. Beispielsweise wird neuer oder angepasster Code mehrerer Entwickler in bestimmten Intervallen in ein gemeinsames, zentrales repository gemerged. Es besteht die Möglichkeit solch einen CI Build automatisch anstoßen zu lassen, sobald ein commit ausgeführt wurde. Sollte der Quellcode durch die automatisch konfigurierten checks approved werden, dann wird er in das gemeinsame repository gemerged. Als zweite Möglichkeit kann zum Beispiel ein Nightly trigger konfiguriert werden, durch welchen jede Nacht diese Merges durchgeführt werden. Das folgende Bild veranschaulicht, welche Schritte Teil von Continous Integration sind
Quelle: https://www.talend.com/resources/building-ci-cd-pipeline-with-talend-azure-devops
Als nächstes wird eine Übersicht der wichtigsten Voraussetzungen für CI mit Talend gegeben.
Voraussetzungen für CI mit Talend
Bevor CI mit Talend umgesetzt werden kann, gilt es einige Voraussetzungen zu beachten. Diese sollten vorher unbedingt erfüllt werden.
Wichtige Voraussetzungen sind folgende:
- Installiertes Talend Studio zum Entwickeln von Talend Jobs
Installation guide: https://help.talend.com/r/en-US/7.3/installation-guide-open-studio-for-data-integration-windows/about-this-installation-guide - Installiertes TAC vorzugsweise auf mehreren Umgebungen (z.B. Entwicklungsumgebung, Integrationsumgebung und Produktivumgebung)
Installation guide: https://help.talend.com/r/en-US/7.3/installation-guide-real-time-big-data-platform-windows/installing-and-configuring-talend-administration-center - Talend GIT Projekt welches auf dem TAC der Entwicklungsumgebung konfiguriert ist
- Verknüpfung Talend Studio und TAC
- Installierter BuildServer
- B. RHEL
- Java, GIT, Maven
- Entsprechende User und Permissions auf der Linux Virtual Machine (VM)
- Konfiguration des BuildServers z.B. als Jenkins Slave falls Jenkins als CI Tool verwendet wird
- Installation der Talend CommandLine
- ci-maven-builder plugin
- Artifact Repository
Installation guide: https://help.talend.com/r/en-US/7.3/installation-guide-real-time-big-data-platform-windows/install-config-artifact-repo
Im nächsten Teil wird auf die Installation sowie Konfiguration des BuildServers eingegangen, da dieser einer der wichtigsten Bestandteile für CI mit Talend ist.
Aufsetzen eines Talend BuildServers
Der BuildServer wird benötigt, um den Talend Maven Build ausführen zu können. Von Talend wird ein Red Hat Enterprise Linux Server empfohlen. (https://help.talend.com/r/en-US/7.3/installation-guide-real-time-big-data-platform-mac/compatible-operating-systems). Folgenden Distributionen werden ebenfalls unterstützt:
- Rocky Linux, Ubuntu, Amazon Linux, SUSE
Als allererstes sollte der BuildServer aufgesetzt werden. Hier empfiehlt es sich auf eine Linux VM zurückzugreifen und diese entsprechend zu konfigurieren. In diesem Beispiel wird RHEL verwendet:
Die Partitionen, welche für den Maven Build verwendet werden, sollten mindestens 20GB Speicher zur Verfügung haben, damit es nicht zu Problemen kommt. Wenn genug Festplattenspeicher vorhanden ist, sollten 50GB allokiert werden, um auf der sicheren Seite zu sein.
Für die hier verwendete Partition wurden 50GB allokiert, 18GB sind mit der TalendCommandline Installation und allen Konfigurationen sowie einem ausgeführten Build aller Talend Jobartefakte bereits belegt.
Zur Installation der TalendCommanline unter Linux wird das linux64-installer.run File der entsprechenden Talend Version benötigt. Die options für den Command können über den Parameter –optionfile mitgegeben werden.
Die Installation kann zum Beispiel wie folgt aussehen:
Inhalt der install-parameter.txt:
Über den Parameter disable-components werden alle Komponenten bis auf die Talend Commandline deaktiviert, damit tatsächlich nur diese Komponente auf dem BuildServer installiert wird. Je nachdem in welchen Ordner die cmdline installiert wurde, sollte diese in diesem Pfad zu finden sein.
Nach erfolgreicher Installation der Cmdline kann das CI-Builder-Plugin wie folgt abgelegt werden:
Ob dies korrekt abgelegt wurde kann ebenfalls überprüft werden:
Wenn alles korrekt aufgesetzt und installiert wurde, dann kann der Talend-Maven-Build Befehl direkt auf der VM ausgeführt werden. Dieser muss natürlich noch entsprechend an die eigenen Parameter der Installation und des Projekts angepasst werden:
Sobald der Build-Befehl ohne Fehler durchgelaufen ist, wird eine Übersicht der erstellten Artefakte ausgegeben:
Weiterhin sieht man in der Abbildung den Status (siehe ab Build Success), die Gesamtzeit, welche zum Bauen der Artefakte benötigt wurde, den Zeitstempel und den verwendeten Arbeitsspeicher.
Eine Beschreibung der Maven Options kann in der Talend Doku eingesehen werden:
https://help.talend.com/r/en-US/7.3/software-dev-lifecycle-best-practices-guide/ci-mvn-options
Build Pipeline mit Jenkins
Jenkins ist ein sehr beliebtes Tool zum Aufsetzen von Pipelines, weshalb die Pipeline zum Ausführen des Maven Builds anhand dieses Tools erfolgt. Die Erstellung und Konfiguration einer Maven Build Pipeline ist mit Jenkins, durch die Zuhilfenahme des Maven Builder Plugins, sehr einfach. Für den Maven Build müssen so nur die Goals & Opts korrekt konfiguriert werden. Ein weiterer wichtiger Punkt ist die Konfiguration des korrekten GIT Repositories. In diesem Fall ist dies das talend-dev.git, welches die Talend Jobbeschreibungen enthält. Die Pipeline kann beliebig benannt werden, hier zum Beispiel talend-dev-maven-build:
Der Build Befehl, welcher zuvor im Kapitel auf dem BuildServer direkt ausgeführt wurde, wird im Jenkins innerhalb dieser Pipeline mit Hilfe des Maven Builder Plugins konfiguriert:
Anschließend kann die Pipeline gestartet werden. Der Talend Maven Build wird auf der konfigurierten Linux VM ausgeführt und der erfolgreiche Lauf wird im Jenkins mit einem grünen Häkchen im Build-Verlauf sichtbar. Darüber können auch weitere Details abgerufen werden:
Über den Maven Build werden die gebauten Artefakte auch auf das im Maven-Build hinterlegte Nexus Artifact Repository hochgeladen. In diesem Beispiel findet man die Artefakte im Nexus im entsprechenden Projektordner:
Die gebauten Talend Job Artefakte werden in dem jeweiligen Ordner passend zu dem Jobnamen abgelegt und können aus dem Nexus heruntergeladen werden. An dieser Stelle ist Continous Integration mit Talend fertig umgesetzt. In den einzelnen Schritten wie dem Bauen der Talend Jobs können natürlich über den Build noch weitere Code Checks verwendet werden. Das hängt einzeln von den Projektanforderungen ab.
Auf dem umgesetzten CI kann im Anschluss Continous Delivery (CD) aufgesetzt werden. Mittels CD werden die gebauten Artefakte auf den jeweiligen Umgebungen wie zum Beispiel der Integrationsumgebung oder Prod automatisch deployed.
Fazit
Continuous Integration (CI) ist eine wichtige Praxis in der Softwareentwicklung, die sicherstellt, dass Änderungen an einer Anwendung regelmäßig integriert und getestet werden. Diese zählt zu einem wichtigen Bestandteil des DevOps – Ansatzes, welcher eine enge Zusammenarbeit zwischen Entwicklern und Betriebsteams anstrebt.
Talend ist eine integrierte Plattform für Datenintegration und -management, die Unterstützung zur Umsetzung von CI zur Verfügung stellt. In diesem Blogbeitrag wurde auf die Voraussetzungen eingegangen, um dies mit Talend umsetzen zu können. Einer der wichtigsten Bestandteile ist der BuildServer auf welchem die Talend Jobartefakte gebaut und getestet werden. Es empfiehlt sich eine Linux-VM dafür zu verwenden. Neben dem hier gezeigten Tool Jenkins können auch beispielsweise AWS CodePipeline oder Microsoft Azure DevOps zur Umsetzung solcher Pipelines verwendet werden.
Klare Vorteile von Continous Integration mit Talend sind automatisierte und einheitliche Builds mit welchem Fehler frühzeitig im Entwicklungsprozess erkannt werden können. Dadurch lassen diese sich schneller beheben und Neuentwicklungen können somit fehlerfrei und rechtzeitig auf eine produktive Umgebung deployed werden.
Für alle Entwicklerteams, welche mittels Talend Software entwickeln und bereitstellen, ist CI somit eine Bereicherung. Auch für Betriebsteams ist CI ein großer Vorteil, da Buildprozesse einfacher beobachtet werden können.
PRODATO bringt bezüglich Talend und CI/CD langjährige Projekterfahrung mit sich und steht in Partnerschaften mit den entsprechenden Technologieherstellern.
Quellen:
https://www.talend.com/resources/what-is-continuous-integration/
https://help.talend.com/r/en-US/7.3/software-dev-lifecycle-best-practices-guide/ci-mvn-options