Skip to content

Commit c5ad3c5

Browse files
committed
merge from Julien branch
1 parent b6b05aa commit c5ad3c5

File tree

5 files changed

+78
-99
lines changed

5 files changed

+78
-99
lines changed

pipeline.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,12 @@
4545
get_supported_operator_versions,
4646
get_supported_version_for_image_matrix_handling,
4747
)
48-
from scripts.evergreen.release.images_signing import (
48+
from scripts.evergreen.release.sbom import generate_sbom, generate_sbom_for_cli
49+
from scripts.release.build.image_signing import (
4950
mongodb_artifactory_login,
5051
sign_image,
5152
verify_signature,
5253
)
53-
from scripts.evergreen.release.sbom import generate_sbom, generate_sbom_for_cli
5454

5555
TRACER = trace.get_tracer("evergreen-agent")
5656

pipeline_test.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
is_version_in_range,
1515
operator_build_configuration,
1616
)
17-
from scripts.evergreen.release.images_signing import run_command_with_retries
17+
from scripts.release.build.image_signing import run_command_with_retries
1818

1919
release_json = {
2020
"supportedImages": {

scripts/release/atomic_pipeline.py

Lines changed: 69 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -16,70 +16,57 @@
1616
from packaging.version import Version
1717

1818
from lib.base_logger import logger
19-
from scripts.evergreen.release.images_signing import (
19+
from scripts.release.build.image_build_configuration import ImageBuildConfiguration
20+
from scripts.release.build.image_build_process import execute_docker_build
21+
from scripts.release.build.image_signing import (
2022
sign_image,
2123
verify_signature,
2224
)
23-
from scripts.release.build.image_build_configuration import ImageBuildConfiguration
24-
from scripts.release.build.image_build_process import build_image
25-
26-
from .optimized_operator_build import build_operator_image_fast
2725

2826
TRACER = trace.get_tracer("evergreen-agent")
2927

3028

31-
def get_tools_distro(tools_version: str) -> Dict[str, str]:
32-
new_rhel_tool_version = "100.10.0"
33-
default_distro = {"arm": "rhel90-aarch64", "amd": "rhel90-x86_64"}
34-
if Version(tools_version) >= Version(new_rhel_tool_version):
35-
return {"arm": "rhel93-aarch64", "amd": "rhel93-x86_64"}
36-
return default_distro
37-
38-
39-
def load_release_file() -> Dict:
40-
with open("release.json") as release:
41-
return json.load(release)
42-
43-
44-
@TRACER.start_as_current_span("sonar_build_image")
45-
def pipeline_process_image(
29+
@TRACER.start_as_current_span("build_image_generic")
30+
def build_image(
4631
dockerfile_path: str,
4732
build_configuration: ImageBuildConfiguration,
48-
dockerfile_args: Dict[str, str] = None,
33+
build_args: Dict[str, str] = None,
4934
build_path: str = ".",
5035
):
51-
"""Builds a Docker image with arguments defined in `args`."""
36+
"""
37+
Build an image then (optionally) sign the result.
38+
"""
5239
image_name = build_configuration.image_name()
5340
span = trace.get_current_span()
5441
span.set_attribute("mck.image_name", image_name)
55-
if dockerfile_args:
56-
span.set_attribute("mck.build_args", str(dockerfile_args))
5742

58-
if not dockerfile_args:
59-
dockerfile_args = {}
60-
logger.info(f"Dockerfile args: {dockerfile_args}, for image: {image_name}")
43+
registry = build_configuration.base_registry
44+
build_args = build_args or {}
6145

62-
build_image(
63-
image_tag=build_configuration.version,
64-
dockerfile_path=dockerfile_path,
65-
dockerfile_args=dockerfile_args,
66-
registry=build_configuration.registry,
46+
if build_args:
47+
span.set_attribute("mck.build_args", str(build_args))
48+
49+
logger.info(f"Building {image_name}, dockerfile args: {build_args}")
50+
logger.debug(f"Build args: {build_args}")
51+
logger.debug(f"Building {image_name} for platforms={build_configuration.platforms}")
52+
logger.debug(f"build image generic - registry={registry}")
53+
54+
# Build docker registry URI and call build_image
55+
image_full_uri = f"{build_configuration.registry}:{build_configuration.version}"
56+
57+
execute_docker_build(
58+
tag=image_full_uri,
59+
dockerfile=dockerfile_path,
60+
path=build_path,
61+
args=build_args,
62+
push=True,
6763
platforms=build_configuration.platforms,
68-
build_path=build_path,
6964
)
7065

7166
if build_configuration.sign:
72-
pipeline_sign_image(
73-
registry=build_configuration.registry,
74-
version=build_configuration.version,
75-
)
76-
77-
78-
@TRACER.start_as_current_span("sign_image_in_repositories")
79-
def pipeline_sign_image(registry: str, version: str):
80-
logger.info("Signing image")
81-
sign_image(registry, version)
82-
verify_signature(registry, version)
67+
logger.info("Signing image")
68+
sign_image(build_configuration.registry, build_configuration.version)
69+
verify_signature(build_configuration.registry, build_configuration.version)
8370

8471

8572
def build_tests_image(build_configuration: ImageBuildConfiguration):
@@ -110,10 +97,10 @@ def build_tests_image(build_configuration: ImageBuildConfiguration):
11097

11198
build_args = dict({"PYTHON_VERSION": python_version})
11299

113-
pipeline_process_image(
100+
build_image(
114101
dockerfile_path="docker/mongodb-kubernetes-tests/Dockerfile",
115102
build_configuration=build_configuration,
116-
dockerfile_args=build_args,
103+
build_args=build_args,
117104
build_path="docker/mongodb-kubernetes-tests",
118105
)
119106

@@ -123,7 +110,7 @@ def build_mco_tests_image(build_configuration: ImageBuildConfiguration):
123110
Builds image used to run community tests.
124111
"""
125112

126-
pipeline_process_image(
113+
build_image(
127114
dockerfile_path="docker/mongodb-community-tests/Dockerfile",
128115
build_configuration=build_configuration,
129116
)
@@ -144,11 +131,10 @@ def build_operator_image(build_configuration: ImageBuildConfiguration):
144131

145132
logger.info(f"Building Operator args: {args}")
146133

147-
image_name = "mongodb-kubernetes"
148-
pipeline_process_image(
134+
build_image(
149135
dockerfile_path="docker/mongodb-kubernetes-operator/Dockerfile",
150136
build_configuration=build_configuration,
151-
dockerfile_args=args,
137+
build_args=args,
152138
)
153139

154140

@@ -158,10 +144,10 @@ def build_database_image(build_configuration: ImageBuildConfiguration):
158144
"""
159145
args = {"version": build_configuration.version}
160146

161-
pipeline_process_image(
147+
build_image(
162148
dockerfile_path="docker/mongodb-kubernetes-database/Dockerfile",
163149
build_configuration=build_configuration,
164-
dockerfile_args=args,
150+
build_args=args,
165151
)
166152

167153

@@ -182,7 +168,7 @@ def find_om_in_releases(om_version: str, releases: Dict[str, str]) -> Optional[s
182168

183169

184170
def get_om_releases() -> Dict[str, str]:
185-
"""Returns a dictionary representation of the Json document holdin all the OM
171+
"""Returns a dictionary representation of the Json document holding all the OM
186172
releases.
187173
"""
188174
ops_manager_release_archive = (
@@ -208,10 +194,11 @@ def find_om_url(om_version: str) -> str:
208194

209195
def build_init_om_image(build_configuration: ImageBuildConfiguration):
210196
args = {"version": build_configuration.version}
211-
pipeline_process_image(
197+
198+
build_image(
212199
dockerfile_path="docker/mongodb-kubernetes-init-ops-manager/Dockerfile",
213200
build_configuration=build_configuration,
214-
dockerfile_args=args,
201+
build_args=args,
215202
)
216203

217204

@@ -234,10 +221,10 @@ def build_om_image(build_configuration: ImageBuildConfiguration):
234221
"om_download_url": om_download_url,
235222
}
236223

237-
pipeline_process_image(
224+
build_image(
238225
dockerfile_path="docker/mongodb-enterprise-ops-manager/Dockerfile",
239226
build_configuration=build_configuration,
240-
dockerfile_args=args,
227+
build_args=args,
241228
)
242229

243230

@@ -247,10 +234,10 @@ def build_init_appdb_image(build_configuration: ImageBuildConfiguration):
247234
mongodb_tools_url_ubi = "{}{}".format(base_url, release["mongodbToolsBundle"]["ubi"])
248235
args = {"version": build_configuration.version, "mongodb_tools_url_ubi": mongodb_tools_url_ubi}
249236

250-
pipeline_process_image(
237+
build_image(
251238
dockerfile_path="docker/mongodb-kubernetes-init-appdb/Dockerfile",
252239
build_configuration=build_configuration,
253-
dockerfile_args=args,
240+
build_args=args,
254241
)
255242

256243

@@ -260,10 +247,11 @@ def build_init_database_image(build_configuration: ImageBuildConfiguration):
260247
base_url = "https://fastdl.mongodb.org/tools/db/"
261248
mongodb_tools_url_ubi = "{}{}".format(base_url, release["mongodbToolsBundle"]["ubi"])
262249
args = {"version": build_configuration.version, "mongodb_tools_url_ubi": mongodb_tools_url_ubi}
263-
pipeline_process_image(
250+
251+
build_image(
264252
"docker/mongodb-kubernetes-init-database/Dockerfile",
265253
build_configuration=build_configuration,
266-
dockerfile_args=args,
254+
build_args=args,
267255
)
268256

269257

@@ -272,7 +260,7 @@ def build_readiness_probe_image(build_configuration: ImageBuildConfiguration):
272260
Builds image used for readiness probe.
273261
"""
274262

275-
pipeline_process_image(
263+
build_image(
276264
dockerfile_path="docker/mongodb-kubernetes-readinessprobe/Dockerfile",
277265
build_configuration=build_configuration,
278266
)
@@ -283,7 +271,7 @@ def build_upgrade_hook_image(build_configuration: ImageBuildConfiguration):
283271
Builds image used for version upgrade post-start hook.
284272
"""
285273

286-
pipeline_process_image(
274+
build_image(
287275
dockerfile_path="docker/mongodb-kubernetes-upgrade-hook/Dockerfile",
288276
build_configuration=build_configuration,
289277
)
@@ -293,7 +281,6 @@ def build_agent_default_case(build_configuration: ImageBuildConfiguration):
293281
"""
294282
Build the agent only for the latest operator for patches and operator releases.
295283
296-
See more information in the function: build_agent_on_agent_bump
297284
"""
298285
release = load_release_file()
299286

@@ -316,12 +303,12 @@ def build_agent_default_case(build_configuration: ImageBuildConfiguration):
316303
if build_configuration.parallel_factor > 0:
317304
max_workers = build_configuration.parallel_factor
318305
with ProcessPoolExecutor(max_workers=max_workers) as executor:
319-
logger.info(f"running with factor of {max_workers}")
320-
print(f"======= Versions to build {agent_versions_to_build} =======")
306+
logger.info(f"Running with factor of {max_workers}")
307+
logger.info(f"======= Agent versions to build {agent_versions_to_build} =======")
321308
for idx, agent_version in enumerate(agent_versions_to_build):
322309
# We don't need to keep create and push the same image on every build.
323310
# It is enough to create and push the non-operator suffixed images only during releases to ecr and quay.
324-
print(f"======= Building Agent {agent_version} ({idx}/{len(agent_versions_to_build)})")
311+
logger.info(f"======= Building Agent {agent_version} ({idx}/{len(agent_versions_to_build)})")
325312
_build_agent_operator(
326313
agent_version,
327314
build_configuration,
@@ -446,10 +433,10 @@ def build_agent_pipeline(
446433
"mongodb_agent_url_ubi": mongodb_agent_url_ubi,
447434
}
448435

449-
pipeline_process_image(
436+
build_image(
450437
dockerfile_path="docker/mongodb-agent/Dockerfile",
451438
build_configuration=build_configuration_copy,
452-
dockerfile_args=args,
439+
build_args=args,
453440
)
454441

455442

@@ -463,3 +450,16 @@ def queue_exception_handling(tasks_queue):
463450
raise Exception(
464451
f"Exception(s) found when processing Agent images. \nSee also previous logs for more info\nFailing the build"
465452
)
453+
454+
455+
def get_tools_distro(tools_version: str) -> Dict[str, str]:
456+
new_rhel_tool_version = "100.10.0"
457+
default_distro = {"arm": "rhel90-aarch64", "amd": "rhel90-x86_64"}
458+
if Version(tools_version) >= Version(new_rhel_tool_version):
459+
return {"arm": "rhel93-aarch64", "amd": "rhel93-x86_64"}
460+
return default_distro
461+
462+
463+
def load_release_file() -> Dict:
464+
with open("release.json") as release:
465+
return json.load(release)

scripts/release/build/image_build_process.py

Lines changed: 4 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def ensure_buildx_builder(builder_name: str = "multiarch") -> str:
6969
return builder_name
7070

7171

72-
def docker_build_image(
72+
def execute_docker_build(
7373
tag: str, dockerfile: str, path: str, args: Dict[str, str], push: bool, platforms: list[str]
7474
):
7575
"""
@@ -82,6 +82,9 @@ def docker_build_image(
8282
:param push: Whether to push the image after building
8383
:param platforms: List of target platforms (e.g., ["linux/amd64", "linux/arm64"])
8484
"""
85+
# Login to ECR before building
86+
ecr_login_boto3(region="us-east-1", account_id="268558157000")
87+
8588
docker_cmd = python_on_whales.docker
8689

8790
try:
@@ -120,27 +123,3 @@ def docker_build_image(
120123
except Exception as e:
121124
logger.error(f"Failed to build image {tag}: {e}")
122125
raise RuntimeError(f"Failed to build image {tag}: {str(e)}")
123-
124-
125-
def build_image(
126-
image_tag: str,
127-
dockerfile_path: str,
128-
dockerfile_args: Dict[str, str],
129-
registry: str,
130-
platforms: list[str],
131-
build_path: str,
132-
):
133-
# Login to ECR
134-
ecr_login_boto3(region="us-east-1", account_id="268558157000")
135-
136-
image_full_uri = f"{registry}:{image_tag}"
137-
138-
# Build image with docker buildx
139-
docker_build_image(
140-
tag=image_full_uri,
141-
dockerfile=dockerfile_path,
142-
path=build_path,
143-
args=dockerfile_args,
144-
push=True,
145-
platforms=platforms,
146-
)

scripts/evergreen/release/images_signing.py renamed to scripts/release/build/image_signing.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,7 @@ def sign_image(repository: str, tag: str) -> None:
215215

216216

217217
@TRACER.start_as_current_span("verify_signature")
218-
def verify_signature(repository: str, tag: str) -> bool:
218+
def verify_signature(repository: str, tag: str):
219219
start_time = time.time()
220220
span = trace.get_current_span()
221221

@@ -231,7 +231,7 @@ def verify_signature(repository: str, tag: str) -> bool:
231231
kubernetes_operator_public_key = r.text
232232
else:
233233
logger.error(f"Failed to retrieve the public key from {public_key_url}: Status code {r.status_code}")
234-
return False
234+
return
235235

236236
public_key_var_name = "OPERATOR_PUBLIC_KEY"
237237
additional_args = [

0 commit comments

Comments
 (0)