Skip to content

Commit 91072fc

Browse files
killianmuldoondpf-release
authored andcommitted
chore: parallelize docker build and push for release
* chore: parallelize docker build and push for release * chore: parallelize docker push for release use make jobs to parallelize docker push targets Signed-off-by: Killian Muldoon <[email protected]> * chore: parallelize docker build and push for release add make parallelization for docker builds and release Signed-off-by: Killian Muldoon <[email protected]> Based on release-v25.7@4819b4e4dc5a848fb7d51402a19d7beb5e6a1d03
1 parent 3dd1c55 commit 91072fc

File tree

1 file changed

+43
-19
lines changed

1 file changed

+43
-19
lines changed

Makefile

Lines changed: 43 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -468,10 +468,16 @@ test-release-e2e-quick: # Build images required for the quick DPF e2e test.
468468
$(MAKE) helm-package-all helm-push-all
469469
$(MAKE) helm-package-dummydpuservice helm-push-dummydpuservice
470470

471+
PARALLEL_JOBS ?=4
471472
.PHONY: test-release-e2e-slow
472473
test-release-e2e-slow: release # Build images required for the slow DPF e2e tests.
473-
$(MAKE) docker-build-dummydpuservice docker-push-dummydpuservice
474-
$(MAKE) helm-package-dummydpuservice helm-push-dummydpuservice
474+
$(MAKE) -j$(PARALLEL_JOBS) --output-sync=target \
475+
docker-build-dummydpuservice \
476+
helm-package-dummydpuservice
477+
# Push operations should wait for builds to complete
478+
$(MAKE) -j$(PARALLEL_JOBS) --output-sync=target \
479+
docker-push-dummydpuservice \
480+
helm-push-dummydpuservice
475481

476482

477483
TEST_CLUSTER_NAME := dpf-test
@@ -611,12 +617,13 @@ lint-helm-storage: helm ## Run helm lint for snap dpu chart
611617

612618
.PHONY: release-build
613619
release-build: generate ## Build helm and container images for release.
614-
# Build multiarch images which will run on both DPUs and x86 hosts.
615-
$(MAKE) $(addprefix docker-build-,$(MULTI_ARCH_DOCKER_BUILD_TARGETS))
620+
# Build multiarch images which can run on both DPUs and x86 hosts.
616621
# Build arm64 images which will run on DPUs.
617-
$(MAKE) ARCH=$(DPU_ARCH) $(addprefix docker-build-,$(DPU_ARCH_DOCKER_BUILD_TARGETS))
618622
# Build amd64 images which will run on x86 hosts.
619-
$(MAKE) ARCH=$(HOST_ARCH) $(addprefix docker-build-,$(HOST_ARCH_DOCKER_BUILD_TARGETS))
623+
$(MAKE) -j$(PARALLEL_JOBS) --output-sync=target \
624+
$(addprefix docker-build-,$(MULTI_ARCH_DOCKER_BUILD_TARGETS)) \
625+
$(addprefix ARCH=$(DPU_ARCH) docker-build-,$(DPU_ARCH_DOCKER_BUILD_TARGETS)) \
626+
$(addprefix ARCH=$(HOST_ARCH) docker-build-,$(HOST_ARCH_DOCKER_BUILD_TARGETS))
620627

621628
# Package the helm charts.
622629
$(MAKE) helm-package-all
@@ -842,7 +849,8 @@ DPU_ARCH_DOCKER_BUILD_TARGETS=$(DPU_ARCH_BUILD_TARGETS) ovs-cni
842849
MULTI_ARCH_DOCKER_BUILD_TARGETS= dpf-system ovn-kubernetes storage-system storage-host
843850

844851
.PHONY: docker-build-all
845-
docker-build-all: $(addprefix docker-build-,$(DOCKER_BUILD_TARGETS)) ## Build docker images for all DOCKER_BUILD_TARGETS. Architecture defaults to build system architecture unless overridden or hardcoded.
852+
docker-build-all:
853+
$(MAKE) -j$(PARALLEL_JOBS) --output-sync=target $(addprefix docker-build-,$(DOCKER_BUILD_TARGETS)) ## Build docker images for all DOCKER_BUILD_TARGETS. Architecture defaults to build system architecture unless overridden or hardcoded.
846854

847855
DPF_SYSTEM_IMAGE_NAME ?= dpf-system
848856
export DPF_SYSTEM_IMAGE ?= $(REGISTRY)/$(DPF_SYSTEM_IMAGE_NAME)
@@ -922,14 +930,17 @@ docker-build-dpf-system-for-%: generate-manifests-release-defaults
922930
-t $(DPF_SYSTEM_IMAGE):$(TAG)-$*
923931

924932
.PHONY: docker-push-dpf-system # Push a multi-arch image for DPF System using `docker manifest`. The variable DPF_SYSTEM_ARCH defines which architectures this target pushes for.
925-
docker-push-dpf-system: $(addprefix docker-push-dpf-system-for-,$(DPF_SYSTEM_ARCH))
933+
docker-push-dpf-system:
934+
# Push each architecture sequentially and build manifest incrementally
935+
$(foreach arch,$(DPF_SYSTEM_ARCH),$(MAKE) docker-push-dpf-system-for-$(arch);)
936+
# Push the final multi-arch manifest
926937
docker manifest push --purge $(DPF_SYSTEM_IMAGE):$(TAG)
927938

928939
docker-push-dpf-system-for-%:
929940
# Tag and push the arch-specific image with the single arch-agnostic tag.
930941
docker tag $(DPF_SYSTEM_IMAGE):$(TAG)-$* $(DPF_SYSTEM_IMAGE):$(TAG)
931942
docker push $(DPF_SYSTEM_IMAGE):$(TAG)
932-
# This must be called in a separate target to ensure the shell command is called in the correct order.
943+
# Add this architecture's RepoDigest to the multi-arch manifest
933944
$(MAKE) docker-create-manifest-for-dpf-system
934945

935946
docker-create-manifest-for-dpf-system:
@@ -1000,14 +1011,17 @@ docker-build-ovn-kubernetes-for-%: $(OVNKUBERNETES_DIR)
10001011
-t $(OVNKUBERNETES_IMAGE):$(TAG)-$*
10011012

10021013
.PHONY: docker-push-ovn-kubernetes # Push a multi-arch image for ovn-kubernetes using `docker manifest`. The variable DPF_SYSTEM_ARCH defines which architectures this target pushes for.
1003-
docker-push-ovn-kubernetes: $(addprefix docker-push-ovn-kubernetes-for-,$(DPF_SYSTEM_ARCH))
1014+
docker-push-ovn-kubernetes:
1015+
# Push each architecture sequentially and build manifest incrementally
1016+
$(foreach arch,$(DPF_SYSTEM_ARCH),$(MAKE) docker-push-ovn-kubernetes-for-$(arch);)
1017+
# Push the final multi-arch manifest
10041018
docker manifest push --purge $(OVNKUBERNETES_IMAGE):$(TAG)
10051019

10061020
docker-push-ovn-kubernetes-for-%:
10071021
# Tag and push the arch-specific image with the single arch-agnostic tag.
10081022
docker tag $(OVNKUBERNETES_IMAGE):$(TAG)-$* $(OVNKUBERNETES_IMAGE):$(TAG)
10091023
docker push $(OVNKUBERNETES_IMAGE):$(TAG)
1010-
# This must be called in a separate target to ensure the shell command is called in the correct order.
1024+
# Add this architecture's RepoDigest to the multi-arch manifest
10111025
$(MAKE) docker-create-manifest-for-ovn-kubernetes
10121026

10131027
docker-create-manifest-for-ovn-kubernetes:
@@ -1118,14 +1132,17 @@ docker-build-storage-system-for-%:
11181132
-t $(STORAGE_SYSTEM_IMAGE):$(TAG)-$*
11191133

11201134
.PHONY: docker-push-storage-system # Push a multi-arch image for snap-csi-plugin using `docker manifest`. The variable DPF_SYSTEM_ARCH defines which architectures this target pushes for.
1121-
docker-push-storage-system: $(addprefix docker-push-storage-system-for-,$(DPF_SYSTEM_ARCH))
1135+
docker-push-storage-system:
1136+
# Push each architecture sequentially and build manifest incrementally
1137+
$(foreach arch,$(DPF_SYSTEM_ARCH),$(MAKE) docker-push-storage-system-for-$(arch);)
1138+
# Push the final multi-arch manifest
11221139
docker manifest push --purge $(STORAGE_SYSTEM_IMAGE):$(TAG)
11231140

11241141
docker-push-storage-system-for-%:
11251142
# Tag and push the arch-specific image with the single arch-agnostic tag.
11261143
docker tag $(STORAGE_SYSTEM_IMAGE):$(TAG)-$* $(STORAGE_SYSTEM_IMAGE):$(TAG)
11271144
docker push $(STORAGE_SYSTEM_IMAGE):$(TAG)
1128-
# This must be called in a separate target to ensure the shell command is called in the correct order.
1145+
# Add this architecture's RepoDigest to the multi-arch manifest
11291146
$(MAKE) docker-create-manifest-for-storage-system
11301147

11311148
docker-create-manifest-for-storage-system:
@@ -1157,14 +1174,17 @@ docker-build-storage-host-for-%:
11571174
-t $(STORAGE_HOST_IMAGE):$(TAG)-$*
11581175

11591176
.PHONY: docker-push-storage-host # Push a multi-arch image for storage-host using `docker manifest`. The variable DPF_SYSTEM_ARCH defines which architectures this target pushes for.
1160-
docker-push-storage-host: $(addprefix docker-push-storage-host-for-,$(DPF_SYSTEM_ARCH))
1177+
docker-push-storage-host:
1178+
# Push each architecture sequentially and build manifest incrementally
1179+
$(foreach arch,$(DPF_SYSTEM_ARCH),$(MAKE) docker-push-storage-host-for-$(arch);)
1180+
# Push the final multi-arch manifest
11611181
docker manifest push --purge $(STORAGE_HOST_IMAGE):$(TAG)
11621182

11631183
docker-push-storage-host-for-%:
11641184
# Tag and push the arch-specific image with the single arch-agnostic tag.
11651185
docker tag $(STORAGE_HOST_IMAGE):$(TAG)-$* $(STORAGE_HOST_IMAGE):$(TAG)
11661186
docker push $(STORAGE_HOST_IMAGE):$(TAG)
1167-
# This must be called in a separate target to ensure the shell command is called in the correct order.
1187+
# Add this architecture's RepoDigest to the multi-arch manifest
11681188
$(MAKE) docker-create-manifest-for-storage-host
11691189

11701190
docker-create-manifest-for-storage-host:
@@ -1191,23 +1211,27 @@ docker-build-bfb-registry-for-%:
11911211
. \
11921212
-t $(BFB_REGISTRY_IMAGE):$(TAG)-$*
11931213

1194-
.PHONY: docker-push-bfb-registry # Push a multi-arch image for BFB Registry using `docker manifest`. The variable DPF_SYSTEM_ARCH defines which architectures this target pushes for.
1195-
docker-push-bfb-registry: $(addprefix docker-push-bfb-registry-for-,$(HOST_ARCH))
1214+
.PHONY: docker-push-bfb-registry # Push a multi-arch image for BFB Registry using `docker manifest`. The variable HOST_ARCH defines which architectures this target pushes for.
1215+
docker-push-bfb-registry:
1216+
# Push each architecture sequentially and build manifest incrementally
1217+
$(foreach arch,$(HOST_ARCH),$(MAKE) docker-push-bfb-registry-for-$(arch);)
1218+
# Push the final multi-arch manifest
11961219
docker manifest push --purge $(BFB_REGISTRY_IMAGE):$(TAG)
11971220

11981221
docker-push-bfb-registry-for-%:
11991222
# Tag and push the arch-specific image with the single arch-agnostic tag.
12001223
docker tag $(BFB_REGISTRY_IMAGE):$(TAG)-$* $(BFB_REGISTRY_IMAGE):$(TAG)
12011224
docker push $(BFB_REGISTRY_IMAGE):$(TAG)
1202-
# This must be called in a separate target to ensure the shell command is called in the correct order.
1225+
# Add this architecture's RepoDigest to the multi-arch manifest
12031226
$(MAKE) docker-create-manifest-for-bfb-registry
12041227

12051228
docker-create-manifest-for-bfb-registry:
12061229
# Note: If you tag an image with multiple registries this push might fail. This can be fixed by pruning existing docker images.
12071230
docker manifest create --amend $(BFB_REGISTRY_IMAGE):$(TAG) $(shell docker inspect --format='{{index .RepoDigests 0}}' $(BFB_REGISTRY_IMAGE):$(TAG))
12081231

12091232
.PHONY: docker-push-all
1210-
docker-push-all: $(addprefix docker-push-,$(DOCKER_BUILD_TARGETS)) ## Push the docker images for all DOCKER_BUILD_TARGETS.
1233+
docker-push-all:
1234+
$(MAKE) -j$(PARALLEL_JOBS) --output-sync=target $(addprefix docker-push-,$(DOCKER_BUILD_TARGETS)) ## Push the docker images for all DOCKER_BUILD_TARGETS.
12111235

12121236
.PHONY: docker-push-dpf-system
12131237
docker-push-dpf-system: ## This is a no-op to allow using DOCKER_BUILD_TARGETS.

0 commit comments

Comments
 (0)