Python-Gitlab
« | 27 Aug 2023 | »Build- und Softwaresysteme wie Gitlab
lassen sich durch beliebig viel Geld um beliebig viele Features erweitern.
Und dann sitzt man lange vor dem “Super-duper-Plugin” und weiß erst recht
wieder nicht, wie man das bekommt, was man haben möchte.
“Selber machen” ist dann immer die beste Lösung.
Ich bin durch meine Firma mit Gitlab gesegnet und nutze es daher fast täglich.
Neben Quellcode- und Buildagent-Verwaltung existieren rudimentäre Auswertungen für Testfälle und andere Statistiken, die jedoch für jedes Projekt einzeln ermittelt und auch nur separat angezeigt werden können.
Oft sind aber projektübergreifende Details interessant und hier muss man je nach Anwendungsfall entweder zu externen Plugins greifen, oder Auswertungsjobs von kompletten Fremdsystemen durchführen lassen.
Was oft übersehen wird ist:
Gitlab hat für fast alles eine REST oder zumindest RESTartige Webschnittstelle.
Alles, was das Web-UI anzeigt, kann auch separat als
JSON Datensatz
heruntergeladen werden. Und wenn die Daten schon als JSON
da sind, kann man
sie in weiteren Scriptsprachen wie etwa Python
relativ leicht kombinieren, auswerten oder in andere Formate übertragen.
python-gitlab ist ein Modul, welches die HTTP-Webrequests in einfache Python Objekte verpackt, die ziemlich selbsterklärend benutzt werden können.
Auf zum Script!
Man braucht zuerst mal einen Access-Token zu den Projekten, den man sich im Gitlab WebUI unter seinem Benutzerprofil anlegen kann. Dort wird festgelegt, ob der Token nur Leserechte hat, oder auch etwas verändern darf.
Dann installiert man sich das python-gitlab
Modul per pip
:
1pip install python-gitlab
und kann mit dem Scripten anfangen.
Ich nutze fixe Gruppen in Gitlab, in denen meine Projekte liegen. Da sich die nie ändern, kann man sie einfach über ihre IDs ansprechen. Die IDs von Gruppen oder Projekten findet man auch in der Gitlab Web-UI im Untertitel, wenn man eine Gruppe oder Projekt öffnet.
Und schon finde ich eine Liste aller Projekte in meiner Gruppe vor. Mit dem
http_url_to_repo
Feld könnte man sich jetzt gleich ein git clone
basteln,
das alle Projekte lokal herunterlädt.
Spannender wird es dann aber, wenn man auf die Pipelines der Projekte zugreift
und dort den Status der Ausführung ausliest, und die Statistik der
JUnit Tests erhält.
Denn so kann man sich als Entwickler mit wenigen Zeilen einen Übersichtsmonitor
bauen, der anzeigt, was gerade gut und eher schlecht gelaufen ist und
Nacharbeitung benötigt.
Fazit
Mit der Gitlab-Web-API kann man die Buildumgebung automatisieren, überwachen
und auswerten lassen.
Zwar langweilen mich solche Scriptereien im Job oft, aber ich habe es zu
schätzen gelernt, wie man sich seinen Alltag mit ein paar Zeilen vereinfachen
kann.
Das Arbeiten mit Buildsystem gehört heute vor allem in Großprojekten zum Standard, und die Zeiten, wo der Entwickler-Rechner auch gleich die Releases erzeugte sind (leider) lange vorbei.
Folglich sollte “Buildserver-Scripting” in jeder Schule unterrichtet werden, denn wer weiß … bald braucht jeder Handwerker einen Buildserver um seine Maschinen auf den neuesten Stand zu bekommen.