Skip to content

Optimise multiarch sanity check duration #2154

@lemeurherve

Description

@lemeurherve

What feature do you want to see added?

The multiarch stage (a sanity check one) is the longest one (taking about 45 minutes) and currently builds images for every architectures, even if the current agent architecture images are already built in other stages.

Other stages building a list of targets are calling make build-<target> or make test-<target> which are using make list, returning only targets for the current agent architecture (amd64):

docker/Jenkinsfile

Lines 135 to 146 in 5a8f228

stage("Build linux-${imageToBuild}") {
infra.withDockerCredentials {
sh "make build-${imageToBuild}"
}
}
stage("Test linux-${imageToBuild}") {
sh 'make prepare-test'
try {
infra.withDockerCredentials {
sh "make test-${imageToBuild}"
}

docker/Makefile

Lines 78 to 79 in 5a8f228

list: check-reqs
@set -x; make --silent show | jq -r '.target | path(.. | select(.platforms[] | contains("linux/$(ARCH)"))?) | add'

This stage should be optimised to build only build architectures not already built in those other stages so it takes less time, to reduce the overall build duration.

Current state

List of targets and architectures built in the multiarch stage:

alpine_jdk17 (amd64)
alpine_jdk21 (amd64, arm64)
debian-slim_jdk17 (amd64)
debian-slim_jdk21 (amd64, arm64)
debian_jdk17 (amd64, arm64, s390x, ppc64le)
debian_jdk21 (amd64, arm64, s390x, ppc64le) 
rhel_ubi9_jdk17 (amd64, arm64, ppc64le)
rhel_ubi9_jdk21 (amd64, arm64, ppc64le)

Total: 20 distinct images.

Overall build duration: 47 min

https://ci.jenkins.io/job/Packaging/job/docker/job/master/13084:
Image

Upstream changes

No response

Are you interested in contributing this feature?

Yes

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions