Skip to content

Commit e117f79

Browse files
committed
Merge branch 'julienben/redesign-pipeline' into maciejk/use-ar-related-versions
# Conflicts: # scripts/release/atomic_pipeline.py # scripts/release/build/image_build_process.py # scripts/release/build_context.py
2 parents e7ab93b + c6fc163 commit e117f79

File tree

3 files changed

+26
-5
lines changed

3 files changed

+26
-5
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ build-and-push-images: build-and-push-operator-image appdb-init-image om-init-im
181181
build-and-push-init-images: appdb-init-image om-init-image database-init-image
182182

183183
database-init-image:
184-
@ scripts/dev/run_python.sh scripts/release/pipeline_main.puy init-database
184+
@ scripts/dev/run_python.sh scripts/release/pipeline_main.py init-database
185185

186186
appdb-init-image:
187187
@ scripts/dev/run_python.sh scripts/release/pipeline_main.py init-appdb

scripts/release/atomic_pipeline.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
from scripts.release.build.image_build_configuration import ImageBuildConfiguration
2020
from scripts.release.build.image_build_process import execute_docker_build
2121
from scripts.release.build.image_signing import (
22+
mongodb_artifactory_login,
2223
sign_image,
2324
verify_signature,
2425
)
@@ -64,6 +65,8 @@ def build_image(
6465
)
6566

6667
if build_configuration.sign:
68+
logger.info("Logging in MongoDB Artifactory for Garasign image")
69+
mongodb_artifactory_login()
6770
logger.info("Signing image")
6871
sign_image(build_configuration.registry, build_configuration.version)
6972
verify_signature(build_configuration.registry, build_configuration.version)

scripts/release/build/image_build_process.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010

1111
from lib.base_logger import logger
1212

13+
DEFAULT_BUILDER_NAME = "multiarch" # Default buildx builder name
14+
1315

1416
def ecr_login_boto3(region: str, account_id: str):
1517
"""
@@ -38,16 +40,18 @@ def ecr_login_boto3(region: str, account_id: str):
3840
logger.debug(f"ECR login succeeded: {status}")
3941

4042

41-
def ensure_buildx_builder(builder_name: str = "multiarch") -> str:
43+
def ensure_buildx_builder(builder_name: str = DEFAULT_BUILDER_NAME) -> str:
4244
"""
4345
Ensures a Docker Buildx builder exists for multi-platform builds.
46+
This function is safe for concurrent execution across multiple processes.
4447
4548
:param builder_name: Name for the buildx builder
4649
:return: The builder name that was created or reused
4750
"""
4851

4952
docker_cmd = python_on_whales.docker
5053

54+
logger.info(f"Ensuring buildx builder '{builder_name}' exists...")
5155
existing_builders = docker_cmd.buildx.list()
5256
if any(b.name == builder_name for b in existing_builders):
5357
logger.info(f"Builder '{builder_name}' already exists – reusing it.")
@@ -63,14 +67,27 @@ def ensure_buildx_builder(builder_name: str = "multiarch") -> str:
6367
)
6468
logger.info(f"Created new buildx builder: {builder_name}")
6569
except DockerException as e:
70+
# Check if this is a race condition (another process created the builder)
71+
if hasattr(e, 'stderr') and 'existing instance for' in str(e.stderr):
72+
logger.info(f"Builder '{builder_name}' was created by another process – using it.")
73+
docker.buildx.use(builder_name)
74+
return builder_name
75+
76+
# Otherwise, it's a real error
6677
logger.error(f"Failed to create buildx builder: {e}")
6778
raise
6879

6980
return builder_name
7081

7182

7283
def execute_docker_build(
73-
tag: str, dockerfile: str, path: str, args: Dict[str, str], push: bool, platforms: list[str]
84+
tag: str,
85+
dockerfile: str,
86+
path: str, args:
87+
Dict[str, str],
88+
push: bool,
89+
platforms: list[str],
90+
builder_name: str = DEFAULT_BUILDER_NAME,
7491
):
7592
"""
7693
Build a Docker image using python_on_whales and Docker Buildx for multi-architecture support.
@@ -83,6 +100,7 @@ def execute_docker_build(
83100
:param platforms: List of target platforms (e.g., ["linux/amd64", "linux/arm64"])
84101
"""
85102
# Login to ECR before building
103+
# TODO CLOUDP-335471: use env variables to configure AWS region and account ID
86104
ecr_login_boto3(region="us-east-1", account_id="268558157000")
87105

88106
docker_cmd = python_on_whales.docker
@@ -101,8 +119,8 @@ def execute_docker_build(
101119
if len(platforms) > 1:
102120
logger.info(f"Multi-platform build for {len(platforms)} architectures")
103121

104-
# We need a special driver to handle multi-platform builds
105-
builder_name = ensure_buildx_builder("multiarch")
122+
# Ensure buildx builder exists (safe for concurrent execution)
123+
ensure_buildx_builder(builder_name)
106124

107125
# Build the image using buildx
108126
docker_cmd.buildx.build(

0 commit comments

Comments
 (0)