Skip to content

Commit 637923f

Browse files
CLOUDP-339846 - add support to tag to multiple places (#359)
# Summary This pull request updates the build pipeline and related configuration to support multiple image repositories for each build target. The main change is that the `repository` field in the build configuration is now a list, allowing images to be tagged and pushed to multiple registries in a single build step. The codebase and configuration files have been updated to reflect this change. **Build configuration and metadata changes:** * Updated all `repository` fields in `build_info.json` to be lists instead of strings, enabling multiple repositories per image for all build targets and Helm charts. * Changed the `repository` type from `str` to `List[str]` in the `ImageInfo` and `HelmChartInfo` dataclasses to match the new configuration format. * Updated the Docker build process to accept a list of tags and log them appropriately. ## Proof of Work - manually releasing agents to 2 repos - [Link](https://spruce.mongodb.com/version/68a6eed68146b10007a8e31f/tasks?sorts=STATUS%3AASC%3BBASE_STATUS%3ADESC) - all of them are uploaded: https://us-east-1.console.aws.amazon.com/ecr/repositories/private/268558157000/nnguyen/mongodb-agent?region=us-east-1 + https://us-east-1.console.aws.amazon.com/ecr/repositories/private/268558157000/nnguyen/mongodb-agent-ubi?region=us-east-1 - changeset is: ``` "agent": { "dockerfile-path": "docker/mongodb-agent/Dockerfile.atomic", "patch": { - "repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-agent-ubi", - "platforms": [ + "repository": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/nnguyen/mongodb-agent", "268558157000.dkr.ecr.us-east-1.amazonaws.com/nnguyen/mongodb-agent-ubi"], + "platforms": [ "linux/amd64" ] }, ``` ## Checklist - [x] Have you linked a jira ticket and/or is the ticket in the title? - [x] Have you checked whether your jira ticket required DOCSP changes? - [x] Have you added changelog file? - use `skip-changelog` label if not needed - refer to [Changelog files and Release Notes](https://github.com/mongodb/mongodb-kubernetes/blob/master/CONTRIBUTING.md#changelog-files-and-release-notes) section in CONTRIBUTING.md for more details --------- Co-authored-by: Vivek Singh <[email protected]>
1 parent 355e63d commit 637923f

File tree

9 files changed

+137
-123
lines changed

9 files changed

+137
-123
lines changed

build_info.json

Lines changed: 36 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,22 @@
33
"operator": {
44
"dockerfile-path": "docker/mongodb-kubernetes-operator/Dockerfile.atomic",
55
"patch": {
6-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes",
6+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes"],
77
"platforms": [
88
"linux/amd64"
99
]
1010
},
1111
"staging": {
1212
"sign": true,
13-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes",
13+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes"],
1414
"platforms": [
1515
"linux/arm64",
1616
"linux/amd64"
1717
]
1818
},
1919
"release": {
2020
"sign": true,
21-
"repository": "quay.io/mongodb/mongodb-kubernetes",
21+
"repositories": ["quay.io/mongodb/mongodb-kubernetes"],
2222
"platforms": [
2323
"linux/arm64",
2424
"linux/amd64"
@@ -28,14 +28,14 @@
2828
"operator-race": {
2929
"dockerfile-path": "docker/mongodb-kubernetes-operator/Dockerfile.atomic",
3030
"patch": {
31-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes",
31+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes"],
3232
"platforms": [
3333
"linux/amd64"
3434
]
3535
},
3636
"staging": {
3737
"sign": true,
38-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes",
38+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes"],
3939
"platforms": [
4040
"linux/arm64",
4141
"linux/amd64"
@@ -45,22 +45,22 @@
4545
"init-database": {
4646
"dockerfile-path": "docker/mongodb-kubernetes-init-database/Dockerfile.atomic",
4747
"patch": {
48-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-database",
48+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-database"],
4949
"platforms": [
5050
"linux/amd64"
5151
]
5252
},
5353
"staging": {
5454
"sign": true,
55-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-init-database",
55+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-init-database"],
5656
"platforms": [
5757
"linux/arm64",
5858
"linux/amd64"
5959
]
6060
},
6161
"release": {
6262
"sign": true,
63-
"repository": "quay.io/mongodb/mongodb-kubernetes-init-database",
63+
"repositories": ["quay.io/mongodb/mongodb-kubernetes-init-database"],
6464
"platforms": [
6565
"linux/arm64",
6666
"linux/amd64"
@@ -70,22 +70,22 @@
7070
"init-appdb": {
7171
"dockerfile-path": "docker/mongodb-kubernetes-init-appdb/Dockerfile.atomic",
7272
"patch": {
73-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-appdb",
73+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-appdb"],
7474
"platforms": [
7575
"linux/amd64"
7676
]
7777
},
7878
"staging": {
7979
"sign": true,
80-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-init-appdb",
80+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-init-appdb"],
8181
"platforms": [
8282
"linux/arm64",
8383
"linux/amd64"
8484
]
8585
},
8686
"release": {
8787
"sign": true,
88-
"repository": "quay.io/mongodb/mongodb-kubernetes-init-appdb",
88+
"repositories": ["quay.io/mongodb/mongodb-kubernetes-init-appdb"],
8989
"platforms": [
9090
"linux/arm64",
9191
"linux/amd64"
@@ -95,22 +95,22 @@
9595
"init-ops-manager": {
9696
"dockerfile-path": "docker/mongodb-kubernetes-init-ops-manager/Dockerfile.atomic",
9797
"patch": {
98-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-ops-manager",
98+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-init-ops-manager"],
9999
"platforms": [
100100
"linux/amd64"
101101
]
102102
},
103103
"staging": {
104104
"sign": true,
105-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-init-ops-manager",
105+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-init-ops-manager"],
106106
"platforms": [
107107
"linux/arm64",
108108
"linux/amd64"
109109
]
110110
},
111111
"release": {
112112
"sign": true,
113-
"repository": "quay.io/mongodb/mongodb-kubernetes-init-ops-manager",
113+
"repositories": ["quay.io/mongodb/mongodb-kubernetes-init-ops-manager"],
114114
"platforms": [
115115
"linux/arm64",
116116
"linux/amd64"
@@ -120,22 +120,22 @@
120120
"database": {
121121
"dockerfile-path": "docker/mongodb-kubernetes-database/Dockerfile.atomic",
122122
"patch": {
123-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-database",
123+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-database"],
124124
"platforms": [
125125
"linux/amd64"
126126
]
127127
},
128128
"staging": {
129129
"sign": true,
130-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-database",
130+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-database"],
131131
"platforms": [
132132
"linux/arm64",
133133
"linux/amd64"
134134
]
135135
},
136136
"release": {
137137
"sign": true,
138-
"repository": "quay.io/mongodb/mongodb-kubernetes-database",
138+
"repositories": ["quay.io/mongodb/mongodb-kubernetes-database"],
139139
"platforms": [
140140
"linux/arm64",
141141
"linux/amd64"
@@ -145,13 +145,13 @@
145145
"meko-tests": {
146146
"dockerfile-path": "docker/mongodb-kubernetes-tests/Dockerfile",
147147
"patch": {
148-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-tests",
148+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-tests"],
149149
"platforms": [
150150
"linux/amd64"
151151
]
152152
},
153153
"staging": {
154-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-tests",
154+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-tests"],
155155
"platforms": [
156156
"linux/amd64"
157157
]
@@ -160,13 +160,13 @@
160160
"mco-tests": {
161161
"dockerfile-path": "docker/mongodb-community-tests/Dockerfile",
162162
"patch": {
163-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-community-tests",
163+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-community-tests"],
164164
"platforms": [
165165
"linux/amd64"
166166
]
167167
},
168168
"staging": {
169-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-community-tests",
169+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-community-tests"],
170170
"platforms": [
171171
"linux/amd64"
172172
]
@@ -175,14 +175,14 @@
175175
"readiness-probe": {
176176
"dockerfile-path": "docker/mongodb-kubernetes-readinessprobe/Dockerfile.atomic",
177177
"patch": {
178-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-readinessprobe",
178+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-readinessprobe"],
179179
"platforms": [
180180
"linux/amd64"
181181
]
182182
},
183183
"staging": {
184184
"sign": true,
185-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-readinessprobe",
185+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-readinessprobe"],
186186
"platforms": [
187187
"linux/arm64",
188188
"linux/amd64"
@@ -191,7 +191,7 @@
191191
"release": {
192192
"version": "1.0.22",
193193
"sign": true,
194-
"repository": "quay.io/mongodb/mongodb-kubernetes-readinessprobe",
194+
"repositories": ["quay.io/mongodb/mongodb-kubernetes-readinessprobe"],
195195
"platforms": [
196196
"linux/arm64",
197197
"linux/amd64"
@@ -201,14 +201,14 @@
201201
"upgrade-hook": {
202202
"dockerfile-path": "docker/mongodb-kubernetes-upgrade-hook/Dockerfile.atomic",
203203
"patch": {
204-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-operator-version-upgrade-post-start-hook",
204+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-kubernetes-operator-version-upgrade-post-start-hook"],
205205
"platforms": [
206206
"linux/amd64"
207207
]
208208
},
209209
"staging": {
210210
"sign": true,
211-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-operator-version-upgrade-post-start-hook",
211+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-kubernetes-operator-version-upgrade-post-start-hook"],
212212
"platforms": [
213213
"linux/arm64",
214214
"linux/amd64"
@@ -217,7 +217,7 @@
217217
"release": {
218218
"version": "1.0.9",
219219
"sign": true,
220-
"repository": "quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook",
220+
"repositories": ["quay.io/mongodb/mongodb-kubernetes-operator-version-upgrade-post-start-hook"],
221221
"platforms": [
222222
"linux/arm64",
223223
"linux/amd64"
@@ -227,22 +227,22 @@
227227
"agent": {
228228
"dockerfile-path": "docker/mongodb-agent/Dockerfile.atomic",
229229
"patch": {
230-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-agent-ubi",
230+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-agent-ubi"],
231231
"platforms": [
232232
"linux/amd64"
233233
]
234234
},
235235
"staging": {
236236
"sign": true,
237-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-agent-ubi",
237+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-agent-ubi"],
238238
"platforms": [
239239
"linux/arm64",
240240
"linux/amd64"
241241
]
242242
},
243243
"manual_release": {
244244
"sign": true,
245-
"repository": "quay.io/mongodb/mongodb-agent-ubi",
245+
"repositories": ["quay.io/mongodb/mongodb-agent-ubi"],
246246
"platforms": [
247247
"linux/arm64",
248248
"linux/amd64"
@@ -253,22 +253,22 @@
253253
"dockerfile-path": "docker/mongodb-enterprise-ops-manager/Dockerfile.atomic",
254254
"patch": {
255255
"version": "om-version-from-release.json",
256-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-enterprise-ops-manager",
256+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/mongodb-enterprise-ops-manager"],
257257
"platforms": [
258258
"linux/amd64"
259259
]
260260
},
261261
"staging": {
262262
"version": "om-version-from-release.json",
263263
"sign": true,
264-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-enterprise-ops-manager",
264+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/mongodb-enterprise-ops-manager"],
265265
"platforms": [
266266
"linux/amd64"
267267
]
268268
},
269269
"manual_release": {
270270
"sign": true,
271-
"repository": "quay.io/mongodb/mongodb-enterprise-ops-manager",
271+
"repositories": ["quay.io/mongodb/mongodb-enterprise-ops-manager"],
272272
"platforms": [
273273
"linux/amd64"
274274
]
@@ -308,15 +308,15 @@
308308
"helm-charts": {
309309
"mongodb-kubernetes": {
310310
"patch": {
311-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/helm-charts"
311+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/dev/helm-charts"]
312312
},
313313
"staging": {
314314
"sign": true,
315-
"repository": "268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/helm-charts"
315+
"repositories": ["268558157000.dkr.ecr.us-east-1.amazonaws.com/staging/helm-charts"]
316316
},
317317
"release": {
318318
"sign": true,
319-
"repository": "quay.io/mongodb/helm-charts"
319+
"repositories": ["quay.io/mongodb/helm-charts"]
320320
}
321321
}
322322
}

scripts/release/atomic_pipeline.py

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,29 +37,30 @@ def build_image(
3737
build_path: str = ".",
3838
):
3939
"""
40-
Build an image then (optionally) sign the result.
40+
Build an image, sign (optionally) it, then tag and push to all repositories in the registry list.
4141
"""
4242
image_name = build_configuration.image_name()
4343
span = trace.get_current_span()
4444
span.set_attribute("mck.image_name", image_name)
4545

46-
base_registry = build_configuration.base_registry()
46+
registries = build_configuration.get_registries
47+
4748
build_args = build_args or {}
4849

4950
if build_args:
5051
span.set_attribute("mck.build_args", str(build_args))
51-
span.set_attribute("mck.registry", base_registry)
52+
span.set_attribute("mck.registries", str(registries))
5253
span.set_attribute("mck.platforms", build_configuration.platforms)
5354

54-
# Build docker registry URI and call build_image
55-
image_full_uri = f"{build_configuration.registry}:{build_configuration.version}"
55+
# Build the image once with all repository tags
56+
all_tags = [f"{registry}:{build_configuration.version}" for registry in build_configuration.registries]
5657

5758
logger.info(
58-
f"Building {image_full_uri} for platforms={build_configuration.platforms}, dockerfile args: {build_args}"
59+
f"Building image with tags {all_tags} for platforms={build_configuration.platforms}, dockerfile args: {build_args}"
5960
)
6061

6162
execute_docker_build(
62-
tag=image_full_uri,
63+
tags=all_tags,
6364
dockerfile=build_configuration.dockerfile_path,
6465
path=build_path,
6566
args=build_args,
@@ -71,8 +72,9 @@ def build_image(
7172
logger.info("Logging in MongoDB Artifactory for Garasign image")
7273
mongodb_artifactory_login()
7374
logger.info("Signing image")
74-
sign_image(build_configuration.registry, build_configuration.version)
75-
verify_signature(build_configuration.registry, build_configuration.version)
75+
for registry in build_configuration.registries:
76+
sign_image(registry, build_configuration.version)
77+
verify_signature(registry, build_configuration.version)
7678

7779

7880
def build_meko_tests_image(build_configuration: ImageBuildConfiguration):

scripts/release/build/build_info.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22
from dataclasses import dataclass
3-
from typing import Dict
3+
from typing import Dict, List
44

55
from scripts.release.build.build_scenario import BuildScenario
66
from scripts.release.constants import (
@@ -27,7 +27,7 @@
2727

2828
@dataclass
2929
class ImageInfo:
30-
repository: str
30+
repositories: List[str]
3131
platforms: list[str]
3232
version: str
3333
dockerfile_path: str
@@ -44,7 +44,7 @@ class BinaryInfo:
4444

4545
@dataclass
4646
class HelmChartInfo:
47-
repository: str
47+
repository: List[str]
4848
version: str
4949
sign: bool
5050

@@ -103,7 +103,7 @@ def load_build_info(
103103
image_version = version
104104

105105
images[name] = ImageInfo(
106-
repository=scenario_data["repository"],
106+
repositories=scenario_data["repositories"],
107107
platforms=scenario_data["platforms"],
108108
version=image_version,
109109
dockerfile_path=data["dockerfile-path"],
@@ -132,7 +132,7 @@ def load_build_info(
132132
continue
133133

134134
helm_charts[name] = HelmChartInfo(
135-
repository=scenario_data["repository"],
135+
repository=scenario_data["repositories"],
136136
version=version,
137137
sign=scenario_data.get("sign", False),
138138
)

0 commit comments

Comments
 (0)