Skip to content

Commit 33f85c0

Browse files
authored
CLOUDP-130491: Daily rebuilds of the operator image (#1091)
* Daily docker rebuilds
1 parent 5166934 commit 33f85c0

13 files changed

+179
-85
lines changed

docs/RELEASE_NOTES.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
# MongoDB Kubernetes Operator 0.7.6
2+
3+
## Kubernetes Operator
4+
5+
* Changes
6+
* `mongodb-kubernetes-operator` image is now rebuilt daily, incorporating updates to system packages and security fixes. The operator binary is built only once during the release process and used without changes in daily rebuilt
7+
18
# MongoDB Kubernetes Operator 0.7.5
29

310
- Changes

docs/how-to-release.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
* Create a PR with the title `Release MongoDB Kubernetes Operator v<operator-version>` (the title must match this pattern).
1515
* Wait for the tests to pass and merge the PR.
1616
* Upon approval, all new images for this release will be built and released, and a GitHub release draft will be created.
17+
* Dockerfiles for mongodb-kubernetes-operator and mongodb-agent will be uploaded to S3 to be used by daily rebuild process in the enterprise repo.
1718
* Review and publish the new GitHub release draft, that was prepared
1819
* Merge helm-charts PR and update submodule to the latest commit on `main` branch.
1920
* Create a new PR with only bump to the helm-chart submodule.

inventories/operator-inventory.yaml

Lines changed: 70 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ images:
55
- name: operator-ubi
66
vars:
77
context: .
8-
template_context: scripts/dev/templates
8+
template_context: scripts/dev/templates/operator
99

1010
inputs:
1111
- operator_image
@@ -14,24 +14,44 @@ images:
1414
platform: linux/amd64
1515

1616
stages:
17-
- name: operator-template-ubi
17+
#
18+
# Dev build stages
19+
#
20+
- name: operator-builder-dev
21+
task_type: docker_build
22+
tags: [ "ubi" ]
23+
dockerfile: scripts/dev/templates/operator/Dockerfile.builder
24+
25+
buildargs:
26+
builder_image: $(inputs.params.builder_image)
27+
28+
labels:
29+
quay.expires-after: 48h
30+
31+
output:
32+
- registry: $(inputs.params.registry)/$(inputs.params.operator_image_dev)
33+
tag: $(inputs.params.version_id)-context
34+
35+
- name: operator-template-dev
1836
task_type: dockerfile_template
1937
tags: ["ubi"]
20-
distro: operator
21-
38+
template_file_extension: operator
2239
inputs:
23-
- builder
24-
- builder_image
2540
- base_image
2641

2742
output:
28-
- dockerfile: scripts/dev/templates/Dockerfile.ubi-$(inputs.params.version_id)
43+
- dockerfile: scripts/dev/templates/operator/Dockerfile.operator-$(inputs.params.version_id)
2944

30-
- name: operator-build-ubi
45+
- name: operator-build-dev
3146
task_type: docker_build
3247
tags: ["ubi"]
48+
dockerfile: scripts/dev/templates/operator/Dockerfile.operator-$(inputs.params.version_id)
49+
50+
inputs:
51+
- version_id
3352

34-
dockerfile: scripts/dev/templates/Dockerfile.ubi-$(inputs.params.version_id)
53+
buildargs:
54+
imagebase: $(inputs.params.registry)/$(inputs.params.operator_image_dev):$(inputs.params.version_id)-context
3555

3656
labels:
3757
quay.expires-after: 48h
@@ -42,14 +62,52 @@ images:
4262
- registry: $(inputs.params.registry)/$(inputs.params.operator_image_dev)
4363
tag: latest
4464

45-
- name: operator-release-ubi
65+
#
66+
# Release build stages
67+
#
68+
- name: operator-builder-release
69+
task_type: docker_build
70+
tags: [ "ubi", "release"]
71+
72+
inputs:
73+
- builder_image
74+
- release_version
75+
76+
dockerfile: scripts/dev/templates/operator/Dockerfile.builder
77+
78+
labels:
79+
quay.expires-after: Never
80+
81+
buildargs:
82+
builder_image: $(inputs.params.builder_image)
83+
84+
output:
85+
- registry: $(inputs.params.registry)/$(inputs.params.operator_image)
86+
tag: $(inputs.params.release_version)-context
87+
88+
- name: operator-template-release
89+
task_type: dockerfile_template
90+
tags: [ "ubi", "release"]
91+
template_file_extension: operator
92+
inputs:
93+
- base_image
94+
- release_version
95+
96+
output:
97+
- dockerfile: scripts/dev/templates/operator/Dockerfile.operator-$(inputs.params.release_version)
98+
- dockerfile: $(inputs.params.s3_bucket)/mongodb-kubernetes-operator/$(inputs.params.release_version)/ubi/Dockerfile
99+
100+
- name: operator-build-release
46101
task_type: docker_build
47-
tags: ["release"]
102+
tags: [ "ubi", "release"]
48103

49104
inputs:
50105
- release_version
51106

52-
dockerfile: scripts/dev/templates/Dockerfile.ubi-$(inputs.params.version_id)
107+
dockerfile: scripts/dev/templates/operator/Dockerfile.operator-$(inputs.params.release_version)
108+
109+
buildargs:
110+
imagebase: $(inputs.params.registry)/$(inputs.params.operator_image):$(inputs.params.release_version)-context
53111

54112
labels:
55113
quay.expires-after: Never

inventory.yaml

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,6 @@ images:
135135
- registry: $(inputs.params.registry)/$(inputs.params.agent_image_dev)
136136
tag: $(inputs.params.version_id)-context
137137

138-
139138
- name: agent-template-ubi
140139
task_type: dockerfile_template
141140
distro: ubi
@@ -144,7 +143,6 @@ images:
144143
output:
145144
- dockerfile: scripts/dev/templates/agent/Dockerfile.ubi-$(inputs.params.version_id)
146145

147-
148146
- name: agent-ubi-build
149147
task_type: docker_build
150148
tags: ["ubi"]
@@ -224,6 +222,9 @@ images:
224222
labels:
225223
quay.expires-after: 48h
226224

225+
buildargs:
226+
builder_image: $(inputs.params.builder_image)
227+
227228
output:
228229
- registry: $(inputs.params.registry)/$(inputs.params.readiness_probe_image_dev)
229230
tag: $(inputs.params.version_id)-context
@@ -245,7 +246,6 @@ images:
245246
- registry: $(inputs.params.registry)/$(inputs.params.readiness_probe_image_dev)
246247
tag: latest
247248

248-
249249
- name: readiness-init-context-release
250250
task_type: docker_build
251251
dockerfile: scripts/dev/templates/readiness/Dockerfile.builder
@@ -254,14 +254,16 @@ images:
254254
labels:
255255
quay.expires-after: Never
256256

257+
buildargs:
258+
builder_image: $(inputs.params.builder_image)
259+
257260
inputs:
258261
- release_version
259262

260263
output:
261264
- registry: $(inputs.params.registry)/$(inputs.params.readiness_probe_image)
262265
tag: $(inputs.params.release_version)-context
263266

264-
265267
- name: readiness-init-build-release
266268
task_type: docker_build
267269
dockerfile: scripts/dev/templates/readiness/Dockerfile.readiness
@@ -280,7 +282,6 @@ images:
280282
- registry: $(inputs.params.registry)/$(inputs.params.readiness_probe_image)
281283
tag: $(inputs.params.release_version)
282284

283-
284285
- name: version-post-start-hook-init
285286
vars:
286287
context: .
@@ -295,6 +296,9 @@ images:
295296
dockerfile: scripts/dev/templates/versionhook/Dockerfile.builder
296297
tags: ["post-start-hook"]
297298

299+
buildargs:
300+
builder_image: $(inputs.params.builder_image)
301+
298302
labels:
299303
quay.expires-after: 48h
300304

@@ -318,7 +322,6 @@ images:
318322
- registry: $(inputs.params.registry)/$(inputs.params.version_post_start_hook_image_dev)
319323
tag: latest
320324

321-
322325
- name: version-post-start-hook-init-context-release
323326
task_type: docker_build
324327
dockerfile: scripts/dev/templates/versionhook/Dockerfile.builder
@@ -327,14 +330,16 @@ images:
327330
labels:
328331
quay.expires-after: Never
329332

333+
buildargs:
334+
builder_image: $(inputs.params.builder_image)
335+
330336
inputs:
331337
- release_version
332338

333339
output:
334340
- registry: $(inputs.params.registry)/$(inputs.params.version_post_start_hook_image)
335341
tag: $(inputs.params.release_version)-context
336342

337-
338343
- name: version-post-start-hook-init-build-release
339344
task_type: docker_build
340345
dockerfile: scripts/dev/templates/versionhook/Dockerfile.versionhook

pipeline.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
]
1919
)
2020

21-
GOLANG_TAG = "1.18.5"
2221
DEFAULT_IMAGE_TYPE = "ubuntu"
2322
DEFAULT_NAMESPACE = "default"
2423

@@ -82,6 +81,7 @@ def build_readiness_probe_image(config: DevConfig) -> None:
8281
"release_version": release["readiness-probe"],
8382
"readiness_probe_image": config.readiness_probe_image,
8483
"readiness_probe_image_dev": config.readiness_probe_image_dev,
84+
"builder_image": release["golang-builder-image"],
8585
},
8686
)
8787

@@ -98,6 +98,7 @@ def build_version_post_start_hook_image(config: DevConfig) -> None:
9898
"release_version": release["version-upgrade-hook"],
9999
"version_post_start_hook_image": config.version_upgrade_hook_image,
100100
"version_post_start_hook_image_dev": config.version_upgrade_hook_image_dev,
101+
"builder_image": release["golang-builder-image"],
101102
},
102103
)
103104

@@ -111,23 +112,25 @@ def build_operator_ubi_image(config: DevConfig) -> None:
111112
args={
112113
"registry": config.repo_url,
113114
"builder": "true",
114-
"builder_image": f"golang:{GOLANG_TAG}",
115+
"builder_image": release["golang-builder-image"],
115116
"base_image": "registry.access.redhat.com/ubi8/ubi-minimal:latest",
116117
"operator_image": config.operator_image,
117118
"operator_image_dev": config.operator_image_dev,
118119
"release_version": release["mongodb-kubernetes-operator"],
120+
"s3_bucket": config.s3_bucket,
119121
},
120122
inventory="inventories/operator-inventory.yaml",
121123
)
122124

123125

124126
def build_e2e_image(config: DevConfig) -> None:
127+
release = _load_release()
125128
sonar_build_image(
126129
"e2e",
127130
config,
128131
args={
129132
"registry": config.repo_url,
130-
"base_image": f"golang:{GOLANG_TAG}",
133+
"base_image": release["golang-builder-image"],
131134
"e2e_image": config.e2e_image,
132135
},
133136
inventory="inventories/e2e-inventory.yaml",

release.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
{
2+
"golang-builder-image": "golang:1.18",
23
"mongodb-kubernetes-operator": "0.7.5",
34
"version-upgrade-hook": "1.0.5",
45
"readiness-probe": "1.0.11",

requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@ dnspython==2.0.0
1414
requests==2.24.0
1515
pyyaml==5.4.1
1616
ruamel.yaml==0.17.9
17+
semver==2.13.0
1718
rsa>=4.7 # not directly required, pinned by Snyk to avoid a vulnerability

scripts/ci/add_supported_release.py

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@
88
import os
99
import subprocess
1010
import sys
11-
from typing import Dict, Any
11+
from typing import Dict, Any, List
1212

1313
import pymongo
1414

1515
LOGLEVEL = os.environ.get("LOGLEVEL", "INFO").upper()
1616
logging.basicConfig(level=LOGLEVEL)
1717

18-
VALID_IMAGES = frozenset(["mongodb-agent"])
18+
VALID_IMAGES = frozenset(
19+
[
20+
"mongodb-agent",
21+
"mongodb-kubernetes-operator",
22+
]
23+
)
1924

2025

2126
def get_repo_root() -> str:
@@ -38,7 +43,7 @@ def mongo_client() -> pymongo.MongoClient:
3843
return pymongo.MongoClient(cnx_str)
3944

4045

41-
def add_release_version(image: str, version: str) -> None:
46+
def add_release_version(image: str, version: str, variants: List[str]) -> None:
4247
client = mongo_client()
4348

4449
database = os.environ["ATLAS_DATABASE"]
@@ -57,7 +62,7 @@ def add_release_version(image: str, version: str) -> None:
5762
"version": version,
5863
"supported": True,
5964
"eol": year_from_now,
60-
"variants": ["ubi", "ubuntu"],
65+
"variants": variants,
6166
}
6267
)
6368

@@ -71,8 +76,17 @@ def main() -> int:
7176
parser.add_argument(
7277
"--image-name", help="image to add a new supported version", type=str
7378
)
79+
parser.add_argument(
80+
"--variants",
81+
help="supported variants, comma-separated, e.g. 'ubi,ubuntu', default=ubi",
82+
type=str,
83+
default="ubi",
84+
)
85+
7486
args = parser.parse_args()
7587

88+
variants = args.variants.split(",")
89+
7690
if args.image_name not in VALID_IMAGES:
7791
print(
7892
"Image {} not supported. Not adding release version.".format(
@@ -82,13 +96,25 @@ def main() -> int:
8296
return 0
8397

8498
# for now, there is just one version to add as a supported release.
85-
version = get_release()[args.image_name]["version"]
86-
logging.info("Adding new release: {} {}".format(args.image_name, version))
99+
version = get_release_version(args.image_name)
100+
logging.info(
101+
"Adding new release: {} {}, {}".format(args.image_name, version, variants)
102+
)
87103

88-
add_release_version(args.image_name, version)
104+
add_release_version(args.image_name, version, variants)
89105

90106
return 0
91107

92108

109+
# get_release_version gets image version from release.json handling both
110+
# version embedded in the object (for mongodb-agent) and set as a simple string (for other images).
111+
def get_release_version(image_name: str) -> str:
112+
release_obj = get_release()[image_name]
113+
if isinstance(release_obj, str):
114+
return release_obj
115+
116+
return release_obj["version"]
117+
118+
93119
if __name__ == "__main__":
94120
sys.exit(main())

0 commit comments

Comments
 (0)