One Yocto Pipeline for Four Device Lines: How an Audio Manufacturer Went from Manual Builds to Unattended Runs

A technical look at replacing a legacy build system with Docker-based Yocto builds, choosing cloud hardware, and handing the result to the people who own it.

By Subeesh Sivanandan, Founder & CEO, Stonetusker Systems · Updated September 2026 · Est. reading time: 9 minutes

Executive brief

  • An audio manufacturer with four device lines moved from a legacy build system and manual builds to one Docker-based Yocto pipeline with GitHub CI/CD. Total build time went from 4 hours to 35 minutes.
  • The work had six parts: Docker migration, build time optimization, cloud hardware selection, GitHub CI/CD, an infrastructure trial on Hostinger cloud followed by a move to Azure, and a documented handover.
  • Builds now run unattended when triggered automatically, and on demand when someone needs a package.
  • The Azure machine configuration was tuned with cost as a constraint, not only speed.
  • The leadership team was trained to create builds and packages themselves, which is what keeps the pipeline from sliding back into manual work.

The starting point: a legacy build system and manual builds

The client is an audio manufacturer with four device lines, all built with Yocto. We're keeping the company unnamed, and it doesn't matter much for the story. The shape of the problem is common: builds came out of a legacy build system, a person had to start them by hand, and a full build took 4 hours.

Four hours changes how a team behaves. Nobody reruns a build casually when it eats half a working morning, so changes get batched, and a failure found late costs the rest of the day.

Manual builds add a second problem. A build only happens when the right person is free to start it.

Operational testCan someone other than your usual build engineer produce a release package today, from a clean checkout, and trust the result?

What the engagement covered

Six workstreams, each with a different job to do.

WorkstreamWhat it meant in practice
MigrationLegacy build system replaced with Docker-based Yocto builds
Build time optimizationTuning the builds, with total build time going from 4 hours to 35 minutes
Hardware selectionChoosing cloud hardware suited to Yocto workloads
CI/CDGitHub-based pipeline supporting on-demand and automated builds
InfrastructureA trial on Hostinger cloud with fine-tuning, then a move to Azure with an optimized, cost-aware machine configuration
HandoverDocumentation and training so the leadership team can make builds and packages

One number is confirmed and published here: 4 hours to 35 minutes. We haven't split it by workstream. The gain came from the combination, and a per-lever breakdown would be a guess.

Step one: containerizing the Yocto build environment

Yocto is picky about its host. Distribution packages, tool versions and small environment differences can change whether a build works at all. A legacy build setup tends to accumulate around one particular machine that happens to work, and nobody wants to touch it.

Moving the builds into Docker turns that machine's history into a file. The environment is defined once, in the container image, and behaves the same on a laptop, a trial server or a production VM. That also explains why the later infrastructure moves were cheap to make. The host only has to supply CPU, memory and disk, because the build environment travels with the image.

If you're new to the pieces, the Yocto Project documentation and the Docker documentation cover the fundamentals.

Operational testIf your build server died tonight, how many hours until a replacement could run the same build?

Build time and hardware: two problems that look like one

A Yocto build compiles a very large number of tasks, in parallel, and leans hard on cores, memory and disk. Slow builds usually have two separate causes. One is how the build is configured. The other is what it runs on.

A well-tuned build on the wrong machine is still slow. A big machine running a poorly tuned build just costs more to be slow. Both were worked on here, and that's where the 4 hours to 35 minutes came from.

The infrastructure path

StagePurposeOutcome
Hostinger cloud trialRun the containerized builds on rented cloud hardware before committingFine-tuning of the build setup was done during the trial
AzureLong-term home for the pipelineHighly optimized machine configuration, chosen with cost in mind

Cost was a real constraint, not an afterthought. An oversized build machine costs money every month, and an undersized one costs engineering hours every day. The right configuration sits where those two curves cross for your workload, and you only find that point by measuring.

That's the argument for a trial on rented hardware first. A wrong guess is cheap there, and you learn what the build actually demands before you sign up for anything long term. Microsoft's Azure virtual machine sizes page is a reasonable place to see how many configurations there are to choose from.

Operational testDo you know, from measurement and not instinct, whether your Yocto build is limited by CPU, memory or disk?

GitHub CI/CD for four device lines

The pipeline supports two modes. Automated builds run without anyone starting them, which is what "unattended" means in practice. On-demand builds cover the moments when someone needs a package for a specific device line right now.

All four device lines go through the same pipeline, and what changes from run to run is which one is being built. GitHub's CI/CD tooling, GitHub Actions, is the usual home for this kind of workflow.

Why one pipeline and not four? Compare what happens when something needs to change.

SituationFour separate pipelinesOne shared pipeline
Fixing a build problemFix it up to four times, and hope the copies matchFix it once
Updating the build environmentFour updates, four chances to driftOne image, one update
Adding a fifth device lineCopy a pipeline and edit itAdd a target to the existing one
Finding out what ranLook in several placesOne place
Operational testWhen an automated build fails overnight, does the right person find out what broke, or does the run just sit red until someone notices?

A playbook you can reuse

This is the order we'd follow on a similar project, drawn from how this one went.

1

Baseline the legacy build

Record how long a full build takes and who has to start it. The 4 hours in this project only means something because it was measured.

2

Containerize the build environment

Move Yocto builds into Docker so the environment lives in a file and not in one machine's history.

3

Trial on rented cloud hardware

Run the containers on a cloud instance, measure, and fine-tune the build setup before deciding on production hardware.

4

Choose production hardware with cost in view

Pick the machine configuration that hits your build time target without paying for capacity you don't use. Here that meant Azure.

5

Wire up GitHub triggers

Set up automated builds for routine runs and on-demand builds for the times someone needs a package.

6

Hand over with documentation and training

Make sure the people who need the packages can create them without the engineers who built the pipeline.

Handover: the part that decides whether it lasts

Handover here meant proper documentation and hands-on training, aimed at the leadership team so they could make builds and packages themselves.

A pipeline that only its author can operate turns back into manual builds under a new name. Good documentation answers the questions people actually have: how to start a build, how to read a failure, how to get the package out. If a document can't answer those, it isn't finished.

Operational testCould the person who asks for release packages produce one this week using only your documentation?

How to read the numbers

The 4 hours to 35 minutes figure describes this client's builds, on this client's setup. It isn't a benchmark of Docker against no Docker, and it doesn't promise the same ratio for your layers, your machine or your caching.

The "before" also includes a legacy build system and manual starts, which is more than a slow compile. Treat the number as evidence that the combination of containerization, tuning, hardware selection and CI/CD can move a build a long way, and measure your own baseline before you promise anyone a target.

YoctoDockerGitHub CI/CDAzureBuild time optimizationMulti-product pipelinesHandover

FAQ

Can Yocto builds run inside Docker?

Yes. In this engagement the legacy build system was replaced with Docker-based Yocto builds, so the build environment is defined in the container image and behaves the same on any machine that can run it.

How much faster were the builds?

Total build time went from 4 hours to 35 minutes. That figure comes from the combination of the Docker migration, build tuning and hardware selection, and we don't attribute it to any single change.

Can one pipeline build several device lines?

Yes. This client has four device lines, and they all go through one shared Yocto pipeline. What changes from run to run is which device line is being built.

Why trial on one cloud provider and then move to another?

A trial on rented cloud hardware shows what the build needs in cores, memory and disk before you commit. Here the trial ran on a Hostinger cloud, with fine-tuning done during the trial, and the production infrastructure then moved to Azure with a machine configuration optimized with cost in mind.

Can GitHub start Yocto builds on demand and automatically?

Yes. The CI/CD setup on GitHub supports both: automated runs that need nobody to start them, and on-demand builds for when someone needs a specific package.

Who runs the builds after handover?

The client's leadership team. Handover included documentation and training so they can create builds and packages themselves.

Still starting Yocto builds by hand, or waiting hours for each one?

Tell us how many device lines you build, what your current setup looks like and how long a full build takes. We'll tell you where we'd start.

Talk to Stonetusker about your build pipeline

Related reading: Stonetusker Systems services

About the author

Subeesh Sivanandan is Founder & CEO of Stonetusker Systems, with 26+ years across platform engineering, DevOps, CI/CD, release engineering and embedded Linux. Connect on LinkedIn.