It is straight forward to install a Gitlab runner with Docker executor on a small Raspberry Pi. The runner can then be attached to a specific Gitlab project or the whole Gitlab instance. I would, however, recommend disabling the option “Run untagged jobs” and add a tag, e.g., arm.

So with the upfront cost of a Raspberry PI, you can build binaries for amd64 and arm in your CI. Check out this demo project (assuming your project can be built on a Raspberry Pi and is not too large).

Screenshot of
repository

At the demo project, you’ll find two binary artifacts, one for arm and one for amd64.

Unfortunately, Gitlab doesn’t yet support multi-arch Docker images in the registry. This means we cannot store the same image for different architectures under the same name and tag in Gitlabs container registry. For now, I’ve used DockerHub in the demo repository. Each runner automatically uses the Docker image which matches its architecture.