From fa837b99f2e275abf2df8fb1f3f90f3312815ae9 Mon Sep 17 00:00:00 2001 From: Nam Nguyen Date: Fri, 23 May 2025 12:56:48 +0200 Subject: [PATCH] add multiarch mco --- inventory.yaml | 25 ++++++++++++++----------- pipeline.py | 37 ++++++++++++++++++++++++++++--------- 2 files changed, 42 insertions(+), 20 deletions(-) diff --git a/inventory.yaml b/inventory.yaml index d4beb4137..ac583f0a9 100644 --- a/inventory.yaml +++ b/inventory.yaml @@ -8,10 +8,11 @@ images: vars: context: . template_context: docker/mongodb-kubernetes-operator - platform: linux/amd64 + platform: linux/$(inputs.params.architecture) inputs: - version - log_automation_config_diff + - architecture stages: @@ -22,9 +23,10 @@ images: release_version: $(inputs.params.version) log_automation_config_diff: $(inputs.params.log_automation_config_diff) use_race: "false" + TARGETARCH: $(inputs.params.architecture) output: - registry: $(inputs.params.registry)/operator-context - tag: $(inputs.params.version_id) + tag: $(inputs.params.version_id)-$(inputs.params.architecture) - name: operator-race-context-dockerfile task_type: docker_build @@ -33,9 +35,10 @@ images: release_version: $(inputs.params.version) log_automation_config_diff: $(inputs.params.log_automation_config_diff) use_race: "true" + TARGETARCH: $(inputs.params.architecture) output: - registry: $(inputs.params.registry)/operator-context - tag: $(inputs.params.version_id)-race + tag: $(inputs.params.version_id)-race-$(inputs.params.architecture) - name: operator-template-ubi task_type: dockerfile_template @@ -50,39 +53,39 @@ images: task_type: docker_build dockerfile: $(stages['operator-template-ubi'].outputs[0].dockerfile) buildargs: - imagebase: $(inputs.params.registry)/operator-context:$(inputs.params.version_id) + imagebase: $(inputs.params.registry)/operator-context:$(inputs.params.version_id)-$(inputs.params.architecture) output: - registry: $(inputs.params.registry)/mongodb-kubernetes - tag: $(inputs.params.version_id) + tag: $(inputs.params.version_id)-$(inputs.params.architecture) - name: operator-ubi-race-build task_type: docker_build dockerfile: $(stages['operator-template-ubi'].outputs[0].dockerfile) buildargs: - imagebase: $(inputs.params.registry)/operator-context:$(inputs.params.version_id)-race + imagebase: $(inputs.params.registry)/operator-context:$(inputs.params.version_id)-race-$(inputs.params.architecture) output: - registry: $(inputs.params.registry)/mongodb-kubernetes - tag: $(inputs.params.version_id)-race + tag: $(inputs.params.version_id)-race-$(inputs.params.architecture) - name: master-latest task_type: tag_image tags: [ "master" ] source: registry: $(inputs.params.registry)/mongodb-kubernetes - tag: $(inputs.params.version_id) + tag: $(inputs.params.version_id)-$(inputs.params.architecture) destination: - registry: $(inputs.params.registry)/mongodb-kubernetes - tag: latest + tag: latest-$(inputs.params.architecture) - name: operator-context-release task_type: tag_image tags: ["release"] source: registry: $(inputs.params.registry)/operator-context - tag: $(inputs.params.version_id) + tag: $(inputs.params.version_id)-$(inputs.params.architecture) destination: - registry: $(inputs.params.quay_registry) - tag: $(inputs.params.version)-context + tag: $(inputs.params.version)-context-$(inputs.params.architecture) - name: operator-template-ubi task_type: dockerfile_template diff --git a/pipeline.py b/pipeline.py index f33f85d1e..7d3900347 100755 --- a/pipeline.py +++ b/pipeline.py @@ -482,7 +482,7 @@ def build_mco_tests_image(build_configuration: BuildConfiguration): sonar_build_image(image_name, build_configuration, buildargs, "inventories/mco_test.yaml") - +TRACER.start_as_current_span("build_operator_image") def build_operator_image(build_configuration: BuildConfiguration): """Calculates arguments required to build the operator image, and starts the build process.""" # In evergreen, we can pass test_suffix env to publish the operator to a quay @@ -491,22 +491,41 @@ def build_operator_image(build_configuration: BuildConfiguration): log_automation_config_diff = os.environ.get("LOG_AUTOMATION_CONFIG_DIFF", "false") version, _ = get_git_release_tag() - args = { - "version": version, - "log_automation_config_diff": log_automation_config_diff, - "test_suffix": test_suffix, - "debug": build_configuration.debug, - } + # Use only amd64 if we should skip arm64 builds + if should_skip_arm64(): + architectures = ["amd64"] + logger.info("Skipping ARM64 builds for operator image as this is running in EVG pipeline as a patch") + else: + architectures = build_configuration.architecture or ["amd64", "arm64"] - logger.info(f"Building Operator args: {args}") + + multi_arch_args_list = [] + + for arch in architectures: + arch_args = { + "version": version, + "log_automation_config_diff": log_automation_config_diff, + "test_suffix": test_suffix, + "debug": build_configuration.debug, + "architecture": arch + } + multi_arch_args_list.append(arch_args) + + logger.info(f"Building Operator args: {multi_arch_args_list}") image_name = "mongodb-kubernetes" + + current_span = trace.get_current_span() + current_span.set_attribute("mck.image_name", image_name) + current_span.set_attribute("mck.architecture", architectures) + build_image_generic( config=build_configuration, image_name=image_name, inventory_file="inventory.yaml", - extra_args=args, registry_address=f"{QUAY_REGISTRY_URL}/{image_name}", + multi_arch_args_list=multi_arch_args_list, + is_multi_arch=True )