Course · Training · Workshop
Embedded DevOps: CI/CD for Firmware & Embedded Linux
Automate build, test and release for embedded software: cross-compile toolchains in containers, unit tests on the host, hardware-in-the-loop with your own runners, reproducible firmware artifacts and CRA-ready SBOM and release pipelines.
Embedded projects play by their own rules: proprietary compilers, cross-compilation, target hardware that doesn't live in the cloud, long build cycles and evidence obligations from standards and regulation. That is exactly why CI/CD in many firmware teams stops at the nightly build script. This course shows what an end-to-end delivery process for C/C++ firmware and embedded Linux systems looks like – from the containerized toolchain through unit and integration tests on the host to hardware-in-the-loop tests on real targets attached to the pipeline via self-hosted runners. Participants build a complete pipeline for a real embedded project during the course: reproducible builds, static analysis, tests, versioned firmware artifacts, SBOM, signed releases and documentation that grows with the code automatically. We work with GitLab CI/CD; the concepts transfer to GitHub Actions, Jenkins and other systems.
Trainers
What participants say






These customers booked courses in the same topic cluster.More customers →
Content
The course consists of the following topics and is tailored to the team’s toolchain, build system and target hardware for in-house deliveries. We work with GitLab CI/CD, CMake and containers on a real C/C++ project with an embedded Linux target; the concepts transfer to other CI systems and bare-metal targets.
– Why CI/CD is different in embedded projects:
- Delivery target device instead of cloud: what transfers from DevOps and what doesn’t
- Typical blockers: proprietary compilers, licenses, target hardware, long builds
- The pipeline as quality and evidence tool, not just a build automaton – Toolchain into the container:
- Packaging cross-compile toolchains (GCC/Clang, vendor SDKs, Yocto/Buildroot SDK) reproducibly into Docker images
- Handling proprietary and license-bound compilers in the pipeline
- CMake toolchain files, presets and build variants per target
- Reproducible builds: pinning versions, versioning the build environment
- Hands-on: build the toolchain image and run the project’s first pipeline build – GitLab CI/CD for embedded teams:
- Jobs, stages, rules, caching and artifacts in practice
- Pipeline structure for multiple targets and build variants
- Getting build times under control: caching, parallelization, incremental builds
- Hands-on: set up a multi-stage pipeline with a build matrix – Testable firmware architecture:
- Hardware abstraction and layering so logic becomes testable without the target
- Bringing legacy code under test step by step
- Unit tests on the host with GoogleTest/Catch2, mocks for peripherals and drivers
- Hands-on: extract hardware-independent logic and test it in the pipeline – Static analysis and quality gates:
- clang-tidy, cppcheck, warnings as errors, coding standards (MISRA/CERT as orientation)
- Capturing code coverage and surfacing it in merge requests
- Defining quality gates that block the merge
- Hands-on: analysis and coverage jobs with merge request reports – Hardware-in-the-loop (HiL) and target tests:
- Self-hosted runners at the test bench: attaching target hardware to the pipeline safely
- Flash, boot, test and collect results – automated
- Emulation (QEMU) as an intermediate step between host test and real hardware
- Dealing with scarce hardware: scheduling, reservation, stability of HiL jobs
- Hands-on: target test job on a runner with attached hardware or emulation – Embedded Linux in the pipeline:
- Automating Yocto/Buildroot builds, caching for long image builds
- Image tests and system tests in containers or QEMU
- Separation: application pipeline vs. system image pipeline – Artifacts, versioning and release:
- Versioning, naming and storing firmware artifacts traceably (package registry)
- Generating a Software Bill of Materials (SBOM) automatically (SPDX/CycloneDX)
- Signing firmware, release pipeline with manual gate
- Update and OTA packages as pipeline output
- Hands-on: release job with versioned, signed artifact and SBOM – Evidence and compliance from the pipeline:
- Pipeline results as evidence for CRA and other industry standards
- Traceability: requirement → test → pipeline run → release
- Documentation-as-code: versioning documentation with the code and building it automatically
- Hands-on: traceability report and documentation as pipeline artifacts – Adoption in your own project:
- Bringing an existing project into the pipeline step by step: order and quick wins
- Dealing with resistance: long builds, little hardware, legacy code
- Working out a rollout plan for your own team
The course is deliberately tool-agnostic: we work hands-on with GitLab CI/CD, and the patterns – toolchain containers, host tests, runners at the test bench, artifacts and evidence – work just the same with GitHub Actions, Jenkins or Azure DevOps.
The actual course content may differ from the above depending on the trainer, delivery, duration and the composition of participants.
Request this course in-house
Request a public date
No suitable public date? Register without obligation — once there is enough interest we schedule a new public date and let you know first.
More about Embedded DevOps
DevOps practices from the cloud world don't map one-to-one onto firmware: the deployment target is a device, not a Kubernetes cluster; the compiler is often proprietary; and proving that a firmware version was built and tested correctly is mandatory in many industries. Embedded DevOps takes the principles – short feedback cycles, automation, everything versioned – and translates them into tools and workflows that work with cross-compilation, hardware tests and regulation.Further resources:
History
Continuous integration emerged in the late 1990s around Extreme Programming and quickly became standard in web and enterprise development. Embedded teams followed more slowly: proprietary toolchains, license-bound compilers and the need for physical target hardware made automated pipelines expensive. For a long time it stayed at the nightly build on a dedicated machine.
Containers, CMake as the de facto standard build system and self-hosted runners that attach hardware directly to the pipeline changed that from the 2010s on. With the Cyber Resilience Act and industry-specific standards, an automated, traceable delivery pipeline is no longer just a productivity question but a precondition for placing products on the market at all.
