DevOps Automation5. August 2025Comquent Academy

Jenkins Build, Test und Deploy für Embedded Systeme

CI/CD für Embedded Systeme stellt besondere Anforderungen an Jenkins -- von Cross-Compilation über Hardware-in-the-Loop-Tests bis zum Firmware-Deployment.

Jenkins Build, Test und Deploy für Embedded Systeme
1

Warum CI/CD im Embedded-Bereich anders ist

In der klassischen Webentwicklung ist CI/CD längst Standard. Im Embedded-Bereich sieht die Realität oft anders aus: Builds laufen auf dem Rechner des Entwicklers, Tests werden manuell auf der Hardware durchgeführt, und Firmware-Updates werden per USB-Stick übertragen. Das funktioniert -- bis das Team wächst, die Produktvarianten zunehmen und die Release-Zyklen kürzer werden sollen.

Jenkins kann auch für Embedded-Projekte eine leistungsfähige CI/CD-Plattform sein. Aber die Herausforderungen unterscheiden sich erheblich von einem typischen Java- oder Node.js-Projekt. Cross-Compilation, Hardware-Abhängigkeiten und lange Build-Zeiten erfordern durchdachte Pipeline-Architekturen.

2

Build: Cross-Compilation in Jenkins

Embedded-Software wird selten auf derselben Architektur gebaut, auf der sie läuft. Ein ARM-Cortex-M Mikrocontroller braucht eine ARM-Toolchain, ein ESP32 die Espressif-Toolchain. Jenkins muss diese Toolchains bereitstellen, idealerweise als Docker-Container:

pipeline {
    agent {
        docker {
            image 'arm-gcc-toolchain:12.2'
            args '-v /opt/licenses:/opt/licenses:ro'
        }
    }
    stages {
        stage('Build') {
            steps {
                sh 'cmake -DCMAKE_TOOLCHAIN_FILE=arm-cortex-m4.cmake -B build'
                sh 'cmake --build build --parallel'
            }
        }
        stage('Unit Tests') {
            steps {
                sh 'cmake --build build --target test'
            }
        }
        stage('Static Analysis') {
            steps {
                sh 'cppcheck --enable=all --xml src/ 2> cppcheck-report.xml'
            }
        }
    }
}

Docker-basierte Build-Agents haben den großen Vorteil, dass die Toolchain-Version fixiert und reproduzierbar ist. Kein "bei mir baut es aber" mehr, weil jeder Build in derselben Umgebung läuft.

Umgang mit proprietären Toolchains

Viele Embedded-Toolchains -- etwa von IAR, Keil oder Texas Instruments -- sind proprietär und erfordern Lizenzen. Das bedeutet:

  • Lizenzdateien müssen dem Build-Agent zugänglich sein (Volume Mount oder Netzwerklizenz)
  • Die Anzahl paralleler Builds ist durch Lizenzen begrenzt
  • Docker-Images mit proprietärer Software können nicht öffentlich verteilt werden

Jenkins' lock-Step hilft, die Anzahl gleichzeitiger Builds auf die verfügbaren Lizenzen zu begrenzen.

3

Test: Vom Unit-Test bis Hardware-in-the-Loop

Unit-Tests auf dem Host

Unit-Tests für Embedded-Code sollten, wo möglich, auf dem Host-System laufen. Frameworks wie Unity, CppUTest oder Google Test ermöglichen schnelle Feedback-Zyklen ohne Hardware. Voraussetzung ist, dass der Code sauber von der Hardware-Abstraktionsschicht getrennt ist -- ein Designprinzip, das sich allein schon wegen der Testbarkeit lohnt.

Hardware-in-the-Loop (HiL)

Für Tests, die echte Hardware erfordern, brauchen Sie dedizierte Test-Stationen. Ein Jenkins-Agent mit physischem Zugang zur Zielhardware flasht die Firmware, führt Tests aus und sammelt Ergebnisse ein. Das erfordert Planung:

  • Teststation-Management: Hardware-Ressourcen sind begrenzt -- Jenkins muss Zugriff koordinieren
  • Firmware-Flash: Automatisiert über J-Link, OpenOCD oder herstellerspezifische Tools
  • Ergebnis-Erfassung: Serielle Konsole, Messgeräte-Anbindung oder GPIO-basierte Signale

Die grösste Herausforderung ist die Zuverlässigkeit. Hardware-Tests können durch lose Kabel, defekte Boards oder Timing-Probleme fehlschlagen. Robuste Retry-Mechanismen und klare Eskalationspfade sind Pflicht.

4

Deploy: Firmware-Verteilung

Das Deployment von Firmware unterscheidet sich grundlegend von einem Webservice-Deployment. Typische Szenarien:

  • OTA-Updates: Die Pipeline stellt das Firmware-Image auf einem Update-Server bereit, Geräte im Feld laden es herunter
  • Produktions-Programmierung: Firmware-Images werden an die Fertigungslinie geliefert, wo sie auf neue Geräte geflasht werden
  • Test-Deployment: Automatisches Flashen auf Testgeräte im Labor

In allen Fällen ist Versionierung entscheidend. Jedes Firmware-Image muss eindeutig einem Git-Commit zugeordnet werden können. Jenkins Artefakt-Management in Kombination mit einem Binary-Repository wie Artifactory oder Nexus bietet die nötige Nachvollziehbarkeit.

Fazit

CI/CD für Embedded Systeme mit Jenkins ist machbar und lohnt sich -- aber es erfordert ein anderes Toolset und andere Denkweisen als in der Web-Entwicklung. Der grösste Hebel liegt in der Automatisierung von Build und Unit-Tests. Hardware-in-the-Loop-Tests sind der nächste Schritt, der die meiste Infrastruktur erfordert, aber auch den grössten Qualitätsgewinn bringt.

In unserem Jenkins Essential Training vermitteln wir die Grundlagen, auf denen Sie auch Embedded-Pipelines aufbauen können. Für Teams, die bereits mit Jenkins arbeiten, bietet das Jenkins Pipeline Experten Training vertiefte Einblicke in fortgeschrittene Pipeline-Architekturen.

Weitere Artikel aus DevOps Automation

Self-Healing DevOps Pipelines
20. Oktober 2025

Self-Healing DevOps Pipelines

Self-Healing Pipelines erkennen Fehler automatisch und beheben sie ohne manuellen Eingriff -- ein Paradigmenwechsel in der CI/CD-Automatisierung.

Weiterlesen

Passendes Training finden

Vertiefen Sie Ihr Wissen in einem unserer praxisnahen Trainings. Kleine Gruppen, erfahrene Trainer und echte Szenarien aus dem DevOps-Alltag.

Trainings entdecken