Firmware bauen mit Jenkins

Jenkins ist eine in Java geschriebene Software für automatisiertes compilieren von Software.
Bisher wurde die Firmware manuell in der Konsole gebaut. Ab sofort werden die Firmware Images von Jenkins gebaut. Daraus ergeben sich folgende Änderungen:

  • Jenkins baut die Firmware sobald es Änderungen am Firmware Repository gab
  • Jeder Build bekommt eine Build Number
  • Die Firmware wird von Jenkins signiert und vor-veröffentlicht

Automatisiertes Bauen

Die Firmware Pflegen wir in einem Git Repository auf GitHub. Genau genommen pflegen wir nur Konfiguration für unsere Community und benutzen gluon als Basis. Bei einer Änderung am Repository wird Jenkins durch GitHub informiert und prüft ob ein neuer Build notwendig ist. Das bauen der Firmware muss also nicht mehr Manuell angestoßen werden.

Der Dateiname

Die Dateien der Firmware werden nach einem bestimmten Muster benannt das neue Muster sieht so aus:
gluon-{Kürzel}-{gluon-version}-{Kanal}-{build-number}-{Name vom Gerät}

Option Werte
Kürzel ffod, ffrz, ffsh
gluon-version 2017.1.6, 2017.1.7, 2018.1
Kanal (dev), testing, rc, stable
Build Number 1, 2, 3, 4, …

Das Kürzel

Das Kürzel steht für die Community:

ffod Freifunk Stormarn
ffrz Freifunk Lauenburg
ffsh Freifunk Südholstein

Die Gluon Verion

Anders als andere Communitys haben wir keine eigene Versionsnummer die Gluon Version entspricht der gluon-version aus der Tabelle.

Der Kanal

Der Kanal oft auch Branch oder Zweig genannt beschreibt im wesentlichen den zustand und die zu erwartende Stabilität der Firmware.

dev Nur für Leute mit Lötkolben und erweiterten Kenntnissen
testing Für mutige die immer die neusten Funktionen wollen
rc Für alle die uns beim testen der Firmware vor der Veröffentlichung helfen wollen
stable (empfohlen) Für alle die einen stabilen Knoten wollen und sich nicht darum kümmern wollen

Die Build Number

Die Build Number wird von Jenkins erzeugt und ist eine natürliche Zahl, die einfach vor jedem Build um eins hochgezählt wird. Damit lassen sich Firmware Dateien auf einen Blick unterscheiden und man weiß welche Datei neuer ist. Auch die Knoten entscheiden anhand des Namens ob ein update nötig ist oder nicht. Deshalb wird es mit der Version 2018.1 noch eine Änderung geben. Build Number und Kanal tauschen die Plätze im Namen.
gluon-{Kürzel}-{gluon-version}-{build-number}-{Kanal}

Da Stormarn und Lauenburg unterschiedliche Firmware Versionen bekommen, haben sie unterschiedliche Build Zahlen.

Warum?

Meiner Meinung nach ist es wichtiger die aktuelle Version zu haben als auf welchem Branch man ist. Bisher wäre die Reihenfolge:
dev<rc<stable<testing
Die Knoten würden also bei gleicher gluon-version immer testing bevorzugen eine rückkehr zu stable wäre erst mit dem nächsten gluon Release möglich.
In Zukunft soll die Build Number wichtiger sein als der Branch wenn es einen neueren Build gibt wechselt der Knoten. Das ist keine perfekte Lösung aber mehr ist aktuell nicht möglich.

Signatur von Jenkins

Jenkins signiert jede Firmware mit seinem eigenen Schlüssel dieser ist aber nur für den dev Kanal gültig.