Migrate to buildx for multi-arch builds
This MR will switch the build process to use docker buildx
to support multi-platform images where required.
Testing this process showed that multi-platform builds can be quite flaky or extremely slow, depending on the complexities of each image's Dockerfile etc. With this in mind, the MR leaves the default image type as linux/amd64
but allows us to override each build job as required using the IMAGE_ARCHS
variable.
Initially, all logan-terraform
jobs have been set to build both amd64 and arm64 image types as this is the main requirement at this time.
Given the differences between the docker build
and docker buildx build
command usage, I've refactored the previous functions into a single build.sh
file. The logic should be identical to the previous functions, however, the method is slightly different. This is mostly due to the docker buildx
command not having the tag
sub-command, instead, it uses --tag
and --push
options on a single docker buildx build
command to both build and push images in one go.
Here is an example pipeline where all images build successfully but are not pushed to any registries - https://gitlab.developers.cam.ac.uk/uis/devops/infra/dockerimages/-/pipelines/378302
And here is an example pipeline where all images build successfully and are pushed to the GitLab registry - https://gitlab.developers.cam.ac.uk/uis/devops/infra/dockerimages/-/pipelines/378311
Closes #58 (closed) Part of https://gitlab.developers.cam.ac.uk/uis/devops/devhub/gitlab-runner-infrastructure/-/issues/9