77#
88# This pipeline prepares a release. The pipeline should be run against the Nomulus public repo on
99# GitHub. It builds the builder and base images, and hard codes the sha256 hashes of the resulting
10- # images in the merged code base (internal + public) , which is tagged and pushed into the release
10+ # images in the merged code base (internal + public), which is tagged and pushed into the release
1111# repo. Actual release artifacts are built from the release repo, ensuring reproducibility.
1212steps :
1313# Check the out internal repo.
4242 rm -rf .git && rm -rf nomulus-internal/.git
4343 cp -rf nomulus-internal/* .
4444 rm -rf nomulus-internal
45- # Build the builder image and tag the proxy base image, then upload them to GCR.
45+ # Build the builder image and pull the base images, them upload them to GCR.
4646- name : ' gcr.io/cloud-builders/docker'
4747 entrypoint : /bin/bash
4848 args :
@@ -51,18 +51,18 @@ steps:
5151 set -e
5252 docker build -t gcr.io/${PROJECT_ID}/builder:${TAG_NAME} .
5353 docker tag gcr.io/${PROJECT_ID}/builder:${TAG_NAME} gcr.io/${PROJECT_ID}/builder:latest
54- docker pull gcr.io/distroless/java
55- docker tag gcr.io/distroless/java gcr.io/${PROJECT_ID}/base:${TAG_NAME}
56- docker tag gcr.io/distroless/java gcr.io/${PROJECT_ID}/base:latest
57- docker pull gcr.io/distroless/java:debug
58- docker tag gcr.io/distroless/java:debug gcr.io/${PROJECT_ID}/base-debug:${TAG_NAME}
59- docker tag gcr.io/distroless/java:debug gcr.io/${PROJECT_ID}/base-debug:latest
60- docker push gcr.io/${PROJECT_ID}/builder:latest
6154 docker push gcr.io/${PROJECT_ID}/builder:${TAG_NAME}
62- docker push gcr.io/${PROJECT_ID}/base:latest
63- docker push gcr.io/${PROJECT_ID}/base:${TAG_NAME}
64- docker push gcr.io/${PROJECT_ID}/base-debug:latest
65- docker push gcr.io/${PROJECT_ID}/base-debug:${TAG_NAME}
55+ docker push gcr.io/${PROJECT_ID}/builder:latest
56+ docker pull jetty:12-jdk21
57+ docker tag jetty:12-jdk21 gcr.io/${PROJECT_ID}/jetty:${TAG_NAME}
58+ docker tag jetty:12-jdk21 gcr.io/${PROJECT_ID}/jetty:latest
59+ docker push gcr.io/${PROJECT_ID}/jetty:${TAG_NAME}
60+ docker push gcr.io/${PROJECT_ID}/jetty:latest
61+ docker pull eclipse-temurin:21
62+ docker tag eclipse-temurin:21 gcr.io/${PROJECT_ID}/temurin:${TAG_NAME}
63+ docker tag eclipse-temurin:21 gcr.io/${PROJECT_ID}/temurin:latest
64+ docker push gcr.io/${PROJECT_ID}/temurin:${TAG_NAME}
65+ docker push gcr.io/${PROJECT_ID}/temurin:latest
6666 dir : ' release/builder/'
6767# Do text replacement in the merged repo, hardcoding image digests.
6868- name : ' gcr.io/cloud-builders/gcloud'
@@ -73,27 +73,31 @@ steps:
7373 set -e
7474 builder_digest=$(gcloud container images list-tags gcr.io/${PROJECT_ID}/builder \
7575 --format='get(digest)' --filter='tags = ${TAG_NAME}')
76- base_digest =$(gcloud container images list-tags gcr.io/${PROJECT_ID}/base \
76+ jetty_digest =$(gcloud container images list-tags gcr.io/${PROJECT_ID}/jetty \
7777 --format='get(digest)' --filter='tags = ${TAG_NAME}')
78- debug_digest =$(gcloud container images list-tags gcr.io/${PROJECT_ID}/base-debug \
78+ temurin_digest =$(gcloud container images list-tags gcr.io/${PROJECT_ID}/temurin \
7979 --format='get(digest)' --filter='tags = ${TAG_NAME}')
80- sed -i s%distroless/java%${PROJECT_ID}/base@$base_digest% proxy/Dockerfile
81- sed -i s%distroless/java:debug%${PROJECT_ID}/base-debug@$debug_digest% core/Dockerfile
80+ sed -i s%eclipse-temurin:21%gcr.io/${PROJECT_ID}/temurin@$temurin_digest%g proxy/Dockerfile
81+ sed -i s%eclipse-temurin:21%gcr.io/${PROJECT_ID}/temurin@$temurin_digest%g core/Dockerfile
82+ sed -i s%jetty:12-jdk21%gcr.io/${PROJECT_ID}/jetty@$jetty_digest%g jetty/Dockerfile
8283 sed -i s/builder:latest/builder@$builder_digest/g release/cloudbuild-proxy.yaml
8384 sed -i s/builder:latest/builder@$builder_digest/g release/cloudbuild-nomulus.yaml
8485 sed -i s/builder:latest/builder@$builder_digest/g release/cloudbuild-deploy.yaml
8586 sed -i s/builder:latest/builder@$builder_digest/g release/cloudbuild-sync.yaml
8687 sed -i s/builder:latest/builder@$builder_digest/g release/cloudbuild-tag.yaml
88+ sed -i s/builder:latest/builder@$builder_digest/g release/cloudbuild-schema-deploy.yaml
89+ sed -i s/builder:latest/builder@$builder_digest/g release/cloudbuild-schema-verify.yaml
90+ sed -i s/builder:latest/builder@$builder_digest/g release/cloudbuild-delete.yaml
8791 sed -i s/GCP_PROJECT/${PROJECT_ID}/ proxy/kubernetes/proxy-*.yaml
8892 sed -i s/'$${TAG_NAME}'/${TAG_NAME}/g release/cloudbuild-sync.yaml
8993 sed -i s/'$${TAG_NAME}'/${TAG_NAME}/g release/cloudbuild-deploy.yaml
90- for environment in alpha crash sandbox production; do
94+ for environment in alpha crash qa sandbox production; do
9195 sed s/'$${_ENV}'/${environment}/g release/cloudbuild-deploy.yaml \
9296 > release/cloudbuild-deploy-${environment}.yaml
9397 sed s/'$${_ENV}'/${environment}/g release/cloudbuild-delete.yaml \
9498 > release/cloudbuild-delete-${environment}.yaml
9599 done
96- # Build the schema_deployer image and upload it to GCR .
100+ # Build and upload the schema_deployer image .
97101- name : ' gcr.io/cloud-builders/docker'
98102 entrypoint : /bin/bash
99103 args :
@@ -103,10 +107,10 @@ steps:
103107 docker build -t gcr.io/${PROJECT_ID}/schema_deployer:${TAG_NAME} --build-arg TAG_NAME=${TAG_NAME} --build-arg PROJECT_ID=${PROJECT_ID} .
104108 docker tag gcr.io/${PROJECT_ID}/schema_deployer:${TAG_NAME} \
105109 gcr.io/${PROJECT_ID}/schema_deployer:latest
106- docker push gcr.io/${PROJECT_ID}/schema_deployer:latest
107110 docker push gcr.io/${PROJECT_ID}/schema_deployer:${TAG_NAME}
111+ docker push gcr.io/${PROJECT_ID}/schema_deployer:latest
108112 dir : ' release/schema-deployer/'
109- # Build the schema_verifier image and upload it to GCR .
113+ # Build and upload the schema_verifier image .
110114- name : ' gcr.io/cloud-builders/docker'
111115 entrypoint : /bin/bash
112116 args :
@@ -116,33 +120,21 @@ steps:
116120 docker build -t gcr.io/${PROJECT_ID}/schema_verifier:${TAG_NAME} --build-arg TAG_NAME=${TAG_NAME} --build-arg PROJECT_ID=${PROJECT_ID} .
117121 docker tag gcr.io/${PROJECT_ID}/schema_verifier:${TAG_NAME} \
118122 gcr.io/${PROJECT_ID}/schema_verifier:latest
119- docker push gcr.io/${PROJECT_ID}/schema_verifier:latest
120123 docker push gcr.io/${PROJECT_ID}/schema_verifier:${TAG_NAME}
124+ docker push gcr.io/${PROJECT_ID}/schema_verifier:latest
121125 dir : ' release/schema-verifier/'
122- # Do text replacement in the schema-deploy, schema-verify and
123- # prober_cert_updater configs.
126+ # Do text replacement in the cloud build YAML files.
124127- name : ' gcr.io/cloud-builders/gcloud'
125128 entrypoint : /bin/bash
126129 args :
127130 - -c
128131 - |
129132 set -e
130- builder_digest=$( \
131- gcloud container images list-tags gcr.io/${PROJECT_ID}/builder \
132- --format='get(digest)' --filter='tags = ${TAG_NAME}')
133- schema_deployer_digest=$( \
134- gcloud container images list-tags gcr.io/${PROJECT_ID}/schema_deployer \
135- --format='get(digest)' --filter='tags = ${TAG_NAME}')
136- schema_verifier_digest=$( \
137- gcloud container images list-tags gcr.io/${PROJECT_ID}/schema_verifier \
133+ builder_digest=$(gcloud container images list-tags gcr.io/${PROJECT_ID}/builder \
138134 --format='get(digest)' --filter='tags = ${TAG_NAME}')
139- prober_cert_updater_digest=$( \
140- gcloud container images list-tags \
141- gcr.io/${PROJECT_ID}/prober_cert_updater \
135+ schema_deployer_digest=$(gcloud container images list-tags gcr.io/${PROJECT_ID}/schema_deployer \
142136 --format='get(digest)' --filter='tags = ${TAG_NAME}')
143- db_object_updater_digest=$( \
144- gcloud container images list-tags \
145- gcr.io/${PROJECT_ID}/db_object_updater \
137+ schema_verifier_digest=$(gcloud container images list-tags gcr.io/${PROJECT_ID}/schema_verifier \
146138 --format='get(digest)' --filter='tags = ${TAG_NAME}')
147139 sed -i s/builder:latest/builder@$builder_digest/g \
148140 release/cloudbuild-schema-deploy.yaml
@@ -157,7 +149,7 @@ steps:
157149 sed -i s/schema_verifier:latest/schema_verifier@$schema_verifier_digest/g \
158150 release/cloudbuild-schema-verify.yaml
159151 sed -i s/'$${TAG_NAME}'/${TAG_NAME}/g release/cloudbuild-schema-deploy.yaml
160- for environment in alpha crash sandbox production; do
152+ for environment in alpha crash qa sandbox production; do
161153 sed s/'$${_ENV}'/${environment}/g release/cloudbuild-schema-deploy.yaml \
162154 > release/cloudbuild-schema-deploy-${environment}.yaml
163155 sed s/'$${_ENV}'/${environment}/g release/cloudbuild-schema-verify.yaml \
@@ -167,7 +159,46 @@ steps:
167159 sed s/'$${_ENV}'/${environment}/g release/cloudbuild-sync-db-objects.yaml \
168160 > release/cloudbuild-sync-db-objects-${environment}.yaml
169161 done
170- # Upload the gradle binary to GCS if it does not exist and point URL in gradle wrapper to it.
162+ # Do text replacement in the k8s manifests.
163+ - name : ' gcr.io/cloud-builders/gcloud'
164+ entrypoint : /bin/bash
165+ args :
166+ - -c
167+ - |
168+ set -e
169+ for env in alpha crash qa sandbox production
170+ do
171+ based_domain=$(grep baseDomain \
172+ ./core/src/main/java/google/registry/config/files/nomulus-config-${env}.yaml | \
173+ awk '{print $2}')
174+ for service in frontend backend pubapi console
175+ do
176+ # non-canary
177+ sed s/GCP_PROJECT/${PROJECT_ID}/g ./jetty/kubernetes/nomulus-${service}.yaml | \
178+ sed s/ENVIRONMENT/${env}/g | \
179+ sed s/PROXY_ENV/${env}/g | \
180+ sed s/EPP/epp/g | \
181+ sed s/WHOIS/whois/g > ./jetty/kubernetes/nomulus-${env}-${service}.yaml
182+ # canary
183+ sed s/GCP_PROJECT/${PROJECT_ID}/g ./jetty/kubernetes/nomulus-${service}.yaml | \
184+ sed s/ENVIRONMENT/${env}/g | \
185+ sed s/PROXY_ENV/${env}_canary/g | \
186+ sed s/EPP/epp-canary/g | \
187+ sed s/WHOIS/whois-canary/g | \
188+ sed s/${service}/${service}-canary/g \
189+ > ./jetty/kubernetes/nomulus-${env}-${service}-canary.yaml
190+ # gateway
191+ sed s/BASE_DOMAIN/${base_domain}/g \
192+ ./jetty/kubernetes/gateway/nomulus-route-${service}.yaml \
193+ > ./jetty/kubernetes/gateway/nomulus-route-${env}-${service}.yaml
194+ # IAP
195+ sed s/SERVICE/${service}/g ./jetty/kubernetes/gateway/nomulus-iap-${env}.yaml \
196+ > ./jetty/kubernetes/gateway/nomulus-iap-${env}-${service}.yaml
197+ sed s/SERVICE/${service}-canary/g ./jetty/kubernetes/gateway/nomulus-iap-${env}.yaml \
198+ > ./jetty/kubernetes/gateway/nomulus-iap-${env}-${service}-canary.yaml
199+ done
200+ done
201+ # Upload the Gradle binary to GCS if it does not exist and point URL in Gradle wrapper to it.
171202- name : ' gcr.io/cloud-builders/gsutil'
172203 entrypoint : /bin/bash
173204 args :
0 commit comments