Open Source im professionellen Einsatz
Linux-Magazin 10/2014
© Andrew Koh Kien Ting, 123RF

© Andrew Koh Kien Ting, 123RF

Perl-Skript hilft Builds und Tests zu automatisieren

Mit Automatik

Statt den Continuous-Integration-Server Jenkins im Browser mittels Mausklicks und Texteingaben für Builds zu konfigurieren, legen faule Tipper die nötigen Daten im Source-Control-System ab und lassen ein Perl-Skript die Handlangerarbeit tun.

519

Continuous Integration (CI) und die damit einhergehende Produktivitätssteigerung sind heute feste Größen in der Entwicklungsabteilung. Rein mit dem Code ins Source-Control-System, einen Pull-Request abgesetzt, schnell mal einen Mitstreiter drüberschauen lassen – schon erfasst das Räderwerk der CI-Pipeline die Änderung, unterwirft sie der stetig wachsenden Testsuite – und schwups ist alles auf einmal veröffentlicht. CI-Server wie Jenkins [2] oder Teamcity [3], die sich die neuesten Source-Versionen eines Projekts schnappen und einen Build mit allen Test anwerfen, erfreuen sich wachsender Beliebtheit.

Doch jedes Mal zwei Minuten beim Aufsetzen eines neuen Buildprojekts in der bräsigen Jenkins-Oberfläche zubringen, das zermürbt auch noch den motiviertesten Entwickler. Wie Abbildung 1 zeigt, gilt es, die notwendigen Kästchen zu finden und zu aktivieren und einige Textfelder auszufüllen.

Abbildung 1: Jenkins führt gerade Build und Test des auf Github abgelegten CPAN-Projekts Log4perl aus.

Wenn jedes Perl-Projekt die gleiche Kommandosequenz zum Starten des Buildprozesses verlangt, ist es überflüssig, sie bei jedem neuen Projekt unverändert einzutippen. Auch bleibt die Frage: Was passiert, falls ein paar Dutzend Projekte auf einen neuen CI-Server umziehen, geht dann der Tipp- und Klickwahnsinn von vorne los?

Lieber minimal

Dem Perlmeister schwebt ein eher minimalistischer und konventioneller Ansatz vor, wie ihn etwa Travis-CI [4] schon seit Langem praktiziert. Im hier diskutierten Fall gibt deshalb eine kleine Datei im Sourcecode des Projekts an, von welchem Git-Repository Jenkins den Quellcode abholen kann und unter welchem Namen das Projekt auf dem Jenkins-Server laufen soll.

Das hier vorgestellte Perl-Skript baut anschließend die Jenkins-Konfiguration als XML-Dokument zusammen und setzt sie als POST-Request über das Jenkins-API an den Server ab. Und schon ist das Projekt dort eingebaut, ganz ohne irgendwelche Tipparbeit.

Woher nehmen und nicht stehlen?

Doch wie kommt man an das richtige Format der XML-Daten, ohne die Dokumentation oder gar den Sourcecode des Servers lesen zu müssen? Ein einmal von Hand auf der Jenkins-Oberfläche eingetipptes Projekt wie in Abbildung 1 gibt das Geheimnis preis: Der Entwickler hat hier »Git« als Option für das Sourcecode-Repository aktiviert und ins dann erscheinende Textfeld die URL zu Github eingetragen.

Unter dem Namen »log4perl« ist das Projekt auf dem Jenkins-Server aktiv und das Skript aus Listing 2 kann die zugehörigen XML-Daten einfach über das API auslesen. Das CPAN-Modul Jenkins::API bietet dazu die Methode »project_config()« an, die den Server auf Port 8080 des lokalen Hosts kontaktiert und unter Angabe des Projektnamens die Konfiguration erfragt.

Listing 2

jenkins-project-xml

1 #!/usr/local/bin/perl -w
2 use strict;
3 use Jenkins::API;
4
5 my $jenkins = Jenkins::API->new(
6   { base_url => 'http://localhost:8080' });
7
8 print $jenkins->project_config(
9     "log4perl" ), "\n";

Zunächst sollte ein Skript wie in Listing 1 allerdings prüfen, ob der Jenkins-Server überhaupt unter dem voreingestellten Port auf Anfragen reagiert. Klappt dies, kann sich Listing 2 erkundigen, wie denn die Konfiguration eines bestimmten Projekts aussieht.

Listing 1

jenkins-ok

01 #!/usr/local/bin/perl -w
02 use strict;
03 use Jenkins::API;
04
05 my $jenkins = Jenkins::API->new(
06   { base_url => 'http://localhost:8080' });
07
08 if( $jenkins->check_jenkins_url() ) {
09   print "ok\n";
10 } else {
11   print "not ok\n";
12 }

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 4 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

comments powered by Disqus

Ausgabe 08/2016

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.