[L2Ork-dev] CI and runners
Sam Thursfield
samthursfield at pm.me
Thu Oct 8 05:22:41 EDT 2020
Hi,
> Here's my conceptual starting point for a runner:
>
> 1. I download some docker image for, say, Ubuntu 20.04.
> 2. I go ahead and install all the necessary dependencies for building
> Purr Data on that image, plus doing update/upgrade on it.
>
> 3. I set it up through gitlab-runner using the docker executor.
> 4. Either manually or through a cron job, I set up some periodic
> update/upgrade for that image.
This sounds promising!
Steps 1 and 2 are useful for preparing and exploring what's possible. But the best thing is to automate the image builds from the beginning.
A few tips for those who aren't already deep in the Docker world...
* Docker has its own build system for building Docker images, the command is `docker build` and the input is called a 'Dockerfile'. The format is fairly straightforward and documented here:
* One non-intuitive thing about `docker build` is that each instruction in the Dockerfile creates a new layer in the image -- so we try to keep them as short as possible.
* Many people now use Podman instead of Docker. It's 99% compatible, but has an improved design (no daemon running as 'root'). The equivalent of `docker build` in this system is `buildah`.
* Every project on a Gitlab instance can have its own Docker repository.
With this in mind the best approach is to have a GitLab project that builds and hosts the images as part of its CI. I set one up on Gitlab.com (I wasn't 100% sure if git.purrdata.org has the Docker registry enabled, although maybe it's on by default) which I was using for testing.
So far it just has the 'stretch' image, which you can build like this:
git clone https://gitlab.com/samthursfield/purr-data-oci-images
docker build --file ./purr-data-oci-images/debian/stretch
As usual, you can substitute 'podman' for 'docker' here depending what's available.
Adding a new target involves:
* adding a new Dockerfile -- for example ./debian/ubuntu-20.04
or ./fedora/latest. Update the FROM at the top.
* creating or modifying the relevant prepare.sh script (debian and ubuntu can probably use the same script, while other distros need a separate one)
* updating the .gitlab-ci.yml file -- the existing 'debian stretch:' block serves as a model for what's needed
> 5. I leverage Sam's changes which cache the nw.js binary on the host.
:)
> Sam-- is this possible? It seems that a lot of CI flows have the
> bandwidth and CPU power to just fetch a new image and prepare it each
> time CI gets triggered, but that seems like it would eat substantial
> time and put us back where we started.
Yeah, I don't like that approach either ... I think having a repo that builds the images once is well worth the effort.
Looking forwards to seeing the improvements!
Sam
More information about the L2Ork-dev
mailing list