Continuous Integration mit gitlab für opsi-Pakete

bademeister
Beiträge: 141
Registriert: 28 Feb 2014, 10:21

Continuous Integration mit gitlab für opsi-Pakete

Beitragvon bademeister » 20 Sep 2018, 19:14

Hallo zusammen,

wir sind ein Institut an der Uni Stuttgart und beschäftigen uns in erster Linie mit Steuerungstechnik für Werkzeugmaschinen. Der Anteil an Software wird dabei immer wichtiger und folglich betreiben wir für unsere Entwicklungen ein gitlab inkl. einiger Kollegen, die sich auch tiefer mit Continous Integration (CI) und Deployment (CD) beschäftigen.

Da kam mir die Idee, dass das auch ziemlich mächtig für opsi-Pakete wäre und ich mir das in verschiedenen Stufen vorstellen kann:

- Überwachung neuer Softwareversionen beim Hersteller (DFN O4I macht das ja mit einem notifier bereits)
- Automatischer Download und Integration in das bestehende localboot-product
- Vorausgesetzt der Installer hat sich nicht groß geändert, müsste man automatisiert die Pakete bauen und auf dem opsi-Repository deployen können.

Alleine für die Entwicklung von opsi-Paketen und der Möglichkeit des git commits + automatischen builden wäre das bereits hilfreich.
Noch nicht geklärt habe ich, wie man die Installfile-Binaries performanter als im git ablegt. Da findet sich aber sicherlich was.

Die Frage ist eher: Hat so etwas bereits jemand gemacht und seine Architektur irgendwo veröffentlicht?
Der initiale zeitliche Aufwand ist sicherlich nicht zu vernachlässigen, aber wenn man das sauber und durchgehende generisch aufzieht könnte das n ziemlich mächtiges Werkzeug sein.
@uib: Ich gehe jetzt einfach mal fest davon aus, dass ihr sowas ähnliches hausintern bereits nutzt.
Viele Grüße,
Felix

EDIT @mod: Bitte verschieben in Anregungen. Sorry, war so n Reflex direkt in "Freien Support" zu gehen. :)

Benutzeravatar
GEI
Beiträge: 209
Registriert: 12 Feb 2010, 13:00
Wohnort: Braunschweig
Kontaktdaten:

Re: Continuous Integration mit gitlab für opsi-Pakete

Beitragvon GEI » 21 Sep 2018, 08:26

bademeister hat geschrieben:- Überwachung neuer Softwareversionen beim Hersteller (DFN O4I macht das ja mit einem notifier bereits)

Der DFN/o4i-Notifier (1) lädt auch gleich die neue Setupdatei runter und schiebt die in $PaketName$/CLIENTDATA ;)
Aktuell ist das ein produktspezifisches Bash-Script mit ca. 100 Zeilen. Da die neue Versionsnummer und Dateiname eh schon ermittelt wurden, ist die Modifikation von OPSI/control sowie der Aufruf von opsi-make-produkt, opsi-package-manager sowie opsi-admin mit Methoden denkbar ...

Das nachfolgende (quick & dirty :idea: ) Script out.sh liegt im Workbenchpfad und vereinfacht das Testen ... im konkreten Paketpfad ruft man dann "../out.sh [testclient]" auf. Ohne Parameter wird die eigene Machine genommen, die per SSH mit dem Server verbunden ist (ermittelt mit Finger) :-)

Code: Alles auswählen

#!/bin/bash
OPSIADM="/usr/bin/opsi-admin -dS method "
OPSIMAKE="/usr/bin/opsi-makeproductfile"
OPSIPAKET="/usr/bin/opsi-package-manager"
OPSIRIGHT="/usr/bin/opsi-set-rights"
WORKBENCH="/home/opsiproducts/Paketerstellung"
DOMAIN=$($OPSIADM getDomain)
WAIT="120s"
echo "opsi- Make & Package & Test ...[$OPSIPRODUCT], warte $WAIT"

OPSIPRODUCT=$(basename $(pwd -P))
echo "actual Product: $OPSIPRODUCT"

rm *~ OPSI/*~ CLIENT_DATA/*~
$OPSIRIGHT  CLIENT_DATA/

$OPSIMAKE

LAST="`ls -tr *.opsi | tail -1`" && echo "jüngste .opsi-Datei: $LAST"
$OPSIPAKET -i $LAST
ls -ltr *.opsi

[ "$1" = "" ] && {
        TESTCLIENT="`finger | grep $DOMAIN | grep -v 'vpn.' | cut -d'(' -f2 | cut -d'.' -f1`" && echo "Test-Installation auf: $TESTCLIENT..."
}
[ ! "$1" = "" ] &&  TESTCLIENT="$1"

$OPSIADM setProductActionRequest        $OPSIPRODUCT    $TESTCLIENT.$DOMAIN      setup
$OPSIADM hostControlSafe_fireEvent on_demand            $TESTCLIENT.$DOMAIN

echo "waiting $WAIT .... " && sleep $WAIT
$OPSIADM getProductInstallationStatus_hash $OPSIPRODUCT $TESTCLIENT.$DOMAIN | grep 'installationStatus='

exit

(1) https://opsi.wzb.eu/wiki/index.php/Update-Notify/Public
(2) https://www.listserv.dfn.de/sympa/info/o4i-notify (offene Mailingliste, SubScribe/unSubscribe)
Georg-Eckert-Institut - Leibniz-Institut für internationale Schulbuchforschung (GEI)
---
'opsi4instituts' = Communityprojekt für wissenschaftliche Einrichtungen
offenes Repository, Update-Notifier
http://www.gei.de/o4i - https://opsi.wzb.eu/wiki

Benutzeravatar
n.wenselowski
Beiträge: 2898
Registriert: 04 Apr 2013, 12:15

Re: Continuous Integration mit gitlab für opsi-Pakete

Beitragvon n.wenselowski » 21 Sep 2018, 15:53

Hi Felix,

bademeister hat geschrieben:Noch nicht geklärt habe ich, wie man die Installfile-Binaries performanter als im git ablegt. Da findet sich aber sicherlich was.

Binaries im git? Am besten gar nicht ;)
Falls das dennoch gewünscht wird, könntest du dir mal git LFS anschauen.

bademeister hat geschrieben:Die Frage ist eher: Hat so etwas bereits jemand gemacht und seine Architektur irgendwo veröffentlicht?
Der initiale zeitliche Aufwand ist sicherlich nicht zu vernachlässigen, aber wenn man das sauber und durchgehende generisch aufzieht könnte das n ziemlich mächtiges Werkzeug sein.

Neben opsi4instituts macht Geos One (Hintergrund von der großartigen opsiconf) so etwas - auch in relativ dedicated.

Ein solches Setup ist definitiv erstmal Aufwändig, aber wenn man es einmal steht kann man das meiste vermutlich nach Schema F erschlagen. Inwiefern sich das lohnt muss dabei jeder selbst wissen, hängt sicher stark vom Umfang der Paketierungen und inwiefern sich das automatisieren lässt ab.


Gruß

Niko
Kein Support per DM!
_________________________
opsi support - uib gmbh
For productive opsi installations we recommend support contracts.