Tool-Integration: Gitblit Ticketing und Jenkins Hand-in-Hand

Das Gitblit Ticketing-System unterstützt Teams beim Arbeiten mit Branches, beim Code Review und beim Mergen von Änderungen zwischen Entwicklungszweigen (Fabian Köntopp hat hierzu bereits einen Journal Beitrag geschrieben: Feature-Branch Entwicklung mit Gitblit). Gitblit kann (und sollte) so eingestellt werden, dass ein Ticket erst dann in seinen Quell-Branch zurückgeführt werden kann, wenn die Änderungen von anderen Entwicklern als gut befunden wurden. Was hierbei allerdings fehlt, ist der zusätzliche Blick auf den Status des Build-Jobs für das Ticket. Um diesen zu erfahren, muss ein zusätzlicher Blick in das Continuous Integration Build System – in unserem Falle also Jenkins – erfolgen. Sowohl Gitblit als auch Jenkins sind quelloffen und verfügen über ein Plugin Konzept, über welches neue Funktionalität bereitgestellt werden kann. Was liegt also näher, als ein Plugin für Gitblit zu schreiben, welches im Ticketing den Status des Jenkins Jobs für den Ticket-Build anzuzeigen!

Mit dieser Aufgabe war unser Praktikant Mike Hüsing beauftragt. Hier sein Erfahrungsbericht:

Zur Realisierung dieses Projektes setzte ich zunächst einen Jenkins- und Gitblitserver auf, um das Testen auf beiden möglich zu machen. Anschließend begann ich mit der Einarbeitung in beide Plattformen. Mithilfe eines Beispiel-Plugins des Gitblit-Entwicklers James Moger, das ich als Vorlage nutzte, konnte ich nun mit der Entwicklung beginnen und Gitblit um zwei Seiten erweitern, die ich brauchte, um die Aufgabenstellung umzusetzen.

screenshot2Zum einen ist dies eine Konfigurationsseite, die es möglich macht, die URL des Jenkins-Servers, den Namen des Projektes, Username und Passwort für den Zugriff zum Jenkins und den Typ des Jenkins (ob mit Multi-Branch-Plugin erweitert oder ohne Plugin) in Textfeldern einzugeben.

Beim Drücken des Save-Knopfes wird dann kontrolliert, ob es mit den eingegeben Daten möglich ist, eine Verbindung zum jeweiligen Jenkins-Server herzustellen. Ist dies möglich, werden die Daten in der Config-Datei des zugehörigen Gits zu den Informationen hinzugefügt, die Gitblit in der Datei speichert, jedoch als eigene Subkategorie. Im Fehlerfall werden die Werte der Textfelder auf die letzten gültigen Eingaben zurückgesetzt.

Die zweite Seite ist die Ticket Status Seite selbst. Hier war der ursprüngliche Gedanke, die im Gitblit bestehende Tickets Seite um den Status und den Build-Knopf zu erweitern. Da diese Seite leider nicht erweiterbar ist, ohne den Gitblit-Code selbst zu ändern, versuchte ich von der Tickets Seite zu erben und die nötigen Features dort hinzuzufügen. Auch dies war leider nicht möglich, weswegen ich dann den Code der Tickets Seite komplett in eine neue Klasse kopierte und diese dann um die beiden Features erweiterte.

Die Ticket-Status Seite zeigt den Status der Tickets der zugehörigen Jenkins-Jobs an. Des Weiteren befindet sich dort ein Build-Knopf, mit dem man den Build Job im Jenkins von Gitblit aus starten kann.

screenshot

Die Kommunikation des Plugins mit Jenkins wird über die URL abgewickelt, denn Jenkins ermöglicht es, die Informationen eines Jobs über eine JSON-Datei abzurufen. Auch das Builden ist über die URL möglich, benötigt jedoch, anders als das JSON, eine Authentifizierung über einen Benutzernamen und Passwort.

Fazit

Die Arbeit an dem Gitblit-Plugin gestaltete sich manchmal als ein wenig schwierig, denn die Erweiterbarkeit von Gitblit ist oftmals ein wenig eingeschränkt. Man kann Gitblit beispielsweise um Pages erweitern, doch nicht an jeder Stelle, und auch auf Internes ist es schwer Zugriff zu bekommen.

Verfasst von Mike Huesing am 13. Oktober 2016