Build und Deployment

Einordnung

Dieses Dokument beschreibt den Build- und Deployment-Prozess der Einsatzsoftware. Es definiert, wie aus Quellcode nachvollziehbare, prüfbare und offline verteilbare Releases entstehen und wie diese in den Zielumgebungen installiert, aktualisiert und zurückgerollt werden.

Der Inhalt ist absichtlich technologie- und sprachneutral. Er legt Randbedingungen fest, die spätere Technologieentscheidungen (Programmiersprachen, Frameworks, Toolchains) objektiv begrenzen.

Referenzen:

Zielsetzung

Der Build- und Deployment-Ansatz MUSS folgende Ziele erfüllen:

  • Offline installierbar und offline aktualisierbar
  • Nachvollziehbare Versionierung und Release-Artefakte
  • Integritätsschutz der Artefakte (Manipulationsschutz)
  • Betrieb durch hauptamtliche Strukturen realistisch möglich
  • Unterstützung durch Ehrenamt (2nd Level, Entwicklung) möglich
  • Langfristig wartbar (mehrjährige Releasezyklen möglich)

Nicht-Ziele in dieser Phase:

  • Vollständiges Sicherheitskonzept (siehe Security-Baseline)
  • Vollständige CI/CD-Implementierung im Detail
  • Festlegung auf konkrete Paketformate (wo noch offen)

Begriffe

  • Build: Erzeugung von Artefakten aus Quellcode.
  • Artefakt: Paket, Container, Installer, Image, Konfigurationsbundle.
  • Release: Versionierte Menge von Artefakten inkl. Release Notes.
  • Deployment: Installation und Inbetriebnahme von Artefakten.
  • Rollback: Rückkehr auf eine vorherige Version.
  • Offline-Deployment: Verteilung ohne Internetzugang (USB, lokales Netz).

Randbedingungen aus der Betriebsumgebung

Aus Betriebsumgebung ergeben sich u. a.:

  • Windows 10 LTSC (derzeit), Windows 11 LTSC (geplant)
  • Debian als Serverplattform (wenn Linux-Server genutzt werden)
  • Containerbetrieb zulässig, aber nur Docker oder Podman
  • Kein Kubernetes oder vergleichbare Orchestrierung als Voraussetzung
  • Offline installierbar und offline nutzbar (auch Updates)
  • iOS/Android für mobile Datenerfassung (Gerätegenerationen gemischt)
  • Edge/Firefox als relevante Browser auf Windows-Clients

Grundprinzipien

Offline-First für Artefakte

Alle produktiven Releases MÜSSEN als offline verteilbare Pakete bereitgestellt werden.

Das bedeutet:

  • Artefakte dürfen keine Internet-Downloads zur Laufzeit erzwingen.
  • Abhängigkeiten MÜSSEN entweder gebündelt oder spiegelbar sein.
  • Der Betrieb MUSS ohne Zugriff auf externe Registries möglich sein.

Nachvollziehbarkeit und Reproduzierbarkeit

Builds SOLLTEN reproduzierbar sein (deterministisch), mindestens aber stabil nachvollziehbar.

Mindestanforderungen:

  • Jede Version ist über ein Tag/Commit eindeutig referenzierbar.
  • Build-Umgebung und Abhängigkeiten sind versioniert dokumentiert.
  • Artefakte tragen eindeutige Versionskennzeichen.

Integrität und Vertrauenskette

Artefakte MÜSSEN vor Manipulation geschützt werden.

Mindestens:

  • Für jedes Release: Prüfsummen (z. B. SHA-256) je Artefakt.
  • Digitale Signaturen SOLLTEN für Release-Bundles genutzt werden.
  • Signierschlüssel MÜSSEN geschützt verwaltet werden (siehe Security-Baseline).

Minimaler Betriebsaufwand

Deployment MUSS mit behördlichen Betriebsrealitäten vereinbar sein:

  • Standardisierte Installationsschritte
  • Klare Update- und Rollback-Prozeduren
  • Keine fragile, hochkomplexe Toolchain auf Client-Systemen
  • Diagnosefähigkeit durch Logs und Health-Checks

Langlebigkeit

Der Ansatz MUSS langfristige Wartung ermöglichen:

  • LTS-Releasezweige sind möglich.
  • Sicherheitsfixes sind unabhängig von Feature-Releases möglich.
  • Alte Releases müssen reproduzierbar nachbaubar oder mindestens aus Archiv installierbar bleiben.

Artefaktstrategie nach Plattform

Dieses Kapitel beschreibt, welche Artefakte pro Plattform sinnvoll sind. Wo Entscheidungen noch offen sind, werden Optionen aufgezeigt.

Windows-Clients (Arbeitsplätze)

Ziele:

  • Einfache Installation
  • Offline-Updates
  • Rollback möglich
  • Keine Adminrechte, soweit realistisch

Mögliche Artefaktformen (Optionen):

  • Installer (z. B. MSI/MSIX/EXE)
  • Portable ZIP (Self-contained, ohne Installation)
  • Kiosk-/Display-Mode als spezielle Konfiguration

MUSS-Anforderungen:

  • Offline installierbar
  • Offline aktualisierbar
  • Versionsnummer sichtbar
  • Installationsanleitung pro Version

SOLL-Anforderungen:

  • Code Signing des Installers
  • Automatisierbarer Silent-Install (z. B. für Rollout)

Mobile Clients (Android / iOS)

Ziele:

  • Robuste Datenerfassung im Einsatz
  • Offline-Nutzung
  • Kontrollierbare Verteilung (Behörden-/Organisationsbetrieb)

Artefaktformen (Optionen):

  • Android: signierte APK (und optional AAB für Store/MDM)
  • iOS: signierte IPA (Verteilung via MDM/Enterprise/Store)

MUSS-Anforderungen:

  • Offline nutzbar nach Installation
  • Version sichtbar
  • Updatepakete müssen offline bereitstellbar sein (z. B. via MDM oder manuelles Einspielen, je nach Betrieb)

SOLL-Anforderungen:

  • Geräteverwaltung (MDM) als bevorzugter Verteilweg (Details später zu konkretisieren)
  • Kryptografische Schlüsselmaterialien geschützt im OS (siehe Security-Baseline)

Hinweis:

Die konkrete Distributionsstrategie (Store vs. MDM vs. Enterprise) ist eine spätere Betriebsentscheidung, MUSS aber offlinefähig geplant werden (z. B. Rollout im abgeschotteten Netz).

Anzeige-/Kiosk-Systeme (z. B. Raspberry Pi)

Ziele:

  • Autostart der Visualisierung
  • Minimaler Pflegeaufwand
  • Robustheit im Dauerbetrieb

Artefaktformen (Optionen):

  • Vorgefertigtes System-Image (SD-Karte/SSD) mit Kiosk-Setup
  • Containerbundle (falls Kiosk-Inhalt containerisiert ist)
  • Lokale Installation + Autostartskript

MUSS-Anforderungen:

  • Offline installierbar
  • Autostart der vorgesehenen Anzeige
  • Dokumentierte Wiederherstellung (Re-Image)

Server-Komponenten (Debian)

Ziele:

  • Betrieb lokal, föderiert oder zentral möglich
  • Offline-Installation und -Updates
  • Betrieb ohne komplexe Orchestrierung
  • Container optional, aber nicht zwingend

Artefaktformen (Optionen):

  • Debian-Pakete (DEB) über lokales Repo oder Bundle
  • Containerimages (Docker/Podman), offline als TAR exportierbar
  • Compose/Podman-Compose Bundle inkl. Konfiguration

MUSS-Anforderungen:

  • Offline installierbar
  • Offline aktualisierbar
  • Konfiguration versioniert und dokumentiert
  • Upgradepfad dokumentiert

SOLL-Anforderungen:

  • Trennung von Konfiguration und Daten (12-Factor-Prinzip soweit sinnvoll, ohne Cloud-Annahmen)
  • Health-Checks pro Dienst
  • Automatisierbarer Start/Stop

Build-Prozess

Quellcode und Versionierung

MUSS:

  • Jede Release-Version ist durch ein Git-Tag oder equivalent markiert.
  • Changelog pro Release ist vorhanden.
  • Versionierung ist eindeutig und konsistent.

SOLL:

  • Semantische Versionierung (SemVer) oder ein äquivalentes Schema, das kompatible und nicht kompatible Änderungen erkennbar macht.

Build-Umgebungen

MUSS:

  • Build-Umgebung ist dokumentiert (OS, Toolchain, Versionen).
  • Builds sind automatisierbar (Script/CI).

SOLL:

  • Builds erfolgen in kontrollierten Build-Containern oder auf definierten Build-Agenten, um Drift zu vermeiden.
  • Separate Build-Pipelines pro Zielplattform (Windows, Linux, Android, iOS) mit konsistenter Artefaktbenennung.

Abhängigkeitsmanagement

MUSS:

  • Abhängigkeiten sind versioniert festgelegt (Lockfiles, Pinning).
  • Abhängigkeiten sind offline verfügbar oder spiegelbar.

SOLL:

  • Interne Spiegel (Mirror/Proxy) für Paketquellen:
    • OS-Pakete (Debian)
    • Container-Registry (privat)
    • Sprach-/Build-Abhängigkeiten (z. B. Maven/NuGet/npm, je nach Stack)
  • Dependency-Bundling für Offline-Builds, wo Spiegel nicht reichen.

Build-Artefakte und Metadaten

MUSS:

  • Jede Ausgabe enthält:
    • Version
    • Build-Datum/Zeit
    • Commit-Referenz
  • Release umfasst:
    • Artefakte
    • Prüfsummen
    • Release Notes
    • Installations-/Updateanleitung

SOLL:

  • SBOM (Software Bill of Materials) pro Release.
  • Signierte Release-Manifestdatei.

Deployment-Modelle

Lokales Einzelsetup (Vehicle/Standort)

Typisch für Einsatzbetrieb:

  • Lokaler Server (optional) + mehrere Clients im lokalen Netz
  • Offlinefähig, später Synchronisation möglich (siehe Netzausfall)

Deployment MUSS:

  • ohne Internet funktionieren
  • über USB oder lokales Netz installierbar sein

Föderiertes Setup

Mehrere lokale Instanzen, die bei Gelegenheit Daten austauschen.

Deployment SOLL:

  • identische Artefakte je Standort nutzen
  • klare Upgrade-Kompatibilitätsregeln haben
  • Konflikt- und Versionsmechanismen nicht beschädigen (siehe Netzausfall)

Zentrales Setup (Stab/LuK)

Zentraler Server, mehrere Clients greifen zu.

Deployment MUSS:

  • Updates planbar machen (Wartungsfenster)
  • Rollback ermöglichen, zumindest für Anwendungsebene

Update-Strategie

Release-Kanäle

SOLL:

  • Stable: für Produktivbetrieb
  • Test: für Erprobung (Pilotgruppen)
  • Hotfix: für kritische Fehler/Sicherheitslücken

Kompatibilität

MUSS:

  • Clients und Server müssen innerhalb eines definierten Versionsfensters zusammenarbeiten.

SOLL:

  • “N-1” oder “N-2” Kompatibilität, je nach Aufwand und Risiko.

Datenmigration

MUSS:

  • Datenbank-/Schemaänderungen sind versioniert.
  • Migrationen sind getestet.
  • Migrationspfad ist dokumentiert.

SOLL:

  • Vorwärtsmigrationen sind idempotent oder sicher wiederholbar.
  • Rollback-Plan existiert (auch wenn Schema-Rollback nicht immer möglich ist, muss ein betriebliches Rollback möglich sein).

Offline-Updates

MUSS:

  • Updates können über physische Datenträger eingespielt werden.
  • Integrität der Updatepakete ist prüfbar (Checksums/Signaturen).

SOLL:

  • Updatepakete sind “atomar” (ein Bundle pro Version).
  • Updateprozess ist scriptbar.

Rollback-Strategie

MUSS:

  • Rollback ist für Clients mindestens als Neuinstallation der vorherigen Version möglich.
  • Rollback ist für Server mindestens auf Anwendungsebene möglich.

SOLL:

  • Snapshot/Backup vor Upgrade ist Bestandteil der Prozedur.
  • Rollback-Prozedur ist dokumentiert und regelmäßig getestet.

Observability und Diagnosefähigkeit

MUSS:

  • Logs sind verfügbar und exportierbar.
  • Fehlerfälle sind eindeutig erkennbar (Exit-Codes, Meldungen).

SOLL:

  • Strukturierte Logs (JSON) serverseitig.
  • Health-Endpunkte/Checks für Serverdienste.
  • Monitoring-Integration ist möglich (nicht zwingend Bestandteil).

Security-Aspekte im Build- und Deployment-Prozess

Dieses Kapitel ist eine Ergänzung zur Security-Baseline.

MUSS:

  • Secrets dürfen nicht im Quellcode liegen.
  • CI/CD-Secrets sind geschützt verwaltet.
  • Build-Artefakte sind gegen Manipulation prüfbar.

SOLL:

  • Signierung von Artefakten und/oder Release-Manifests.
  • SBOM-Erzeugung und Archivierung.
  • Dependency-Scanning und SAST/DAST, soweit realistisch.

Dokumentationspflichten pro Release

MUSS:

  • Release Notes (Änderungen, Fixes, ggf. Breaking Changes)
  • Installationsanleitung
  • Updateanleitung
  • Rollbackanleitung
  • Prüfsummenliste

SOLL:

  • Known Issues
  • Migrationshinweise
  • Supporthinweise (Logpfade, Diagnosekommandos)

Akzeptanzkriterien (Baseline)

Ein Build/Deployment-Konzept gilt als erfüllt, wenn:

  • Alle Zielplattformen erhalten offline installierbare Artefakte.
  • Updates sind offline einspielbar.
  • Artefakte sind versioniert, prüfbar und dokumentiert.
  • Betrieb ist ohne Internet und ohne Kubernetes möglich.
  • Support kann mit Logs und klaren Prozeduren arbeiten.

Offene Punkte (später zu präzisieren)

Diese Punkte sind bewusst als später zu klären markiert:

  • Mobile Distribution: MDM/Store/Enterprise-Mechanismen und Policies
  • Konkrete Signatur- und Schlüsselverwaltung (HSM, Rollen, Prozesse)
  • Exakte Kompatibilitätsfenster (N-1/N-2) je Modul
  • SBOM-Format und Tooling
  • Konkrete Build-Agentenlandschaft und CI/CD-Implementierung

Zusammenfassung

Build und Deployment müssen die Einsatzrealität abbilden:

  • Offlinefähigkeit ist zwingend.
  • Artefakte müssen prüfbar und langfristig archivierbar sein.
  • Betrieb muss im Hauptamt realistisch möglich sein.
  • Updates und Rollbacks müssen planbar, dokumentiert und robust sein.

Dieses Dokument schafft damit eine objektive Grundlage, um Programmiersprachen und Toolchains später anhand harter Kriterien auszuwählen.