Add initial build job so websites get build early
This commit is contained in:
parent
c7a7581732
commit
287d6d31c5
5 changed files with 62 additions and 1 deletions
|
@ -1,5 +1,5 @@
|
||||||
# convention 4 kubernetes: c4k-website
|
# convention 4 kubernetes: c4k-website
|
||||||
[![Clojars Project](https://img.shields.io/clojars/v/org.domaindrivenarchitecture/c4k-gitea.svg)](https://clojars.org/org.domaindrivenarchitecture/c4k-website) [![pipeline status](https://gitlab.com/domaindrivenarchitecture/c4k-website/badges/master/pipeline.svg)](https://gitlab.com/domaindrivenarchitecture/c4k-website/-/commits/main)
|
[![Clojars Project](https://img.shields.io/clojars/v/org.domaindrivenarchitecture/c4k-website.svg)](https://clojars.org/org.domaindrivenarchitecture/c4k-website) [![pipeline status](https://gitlab.com/domaindrivenarchitecture/c4k-website/badges/master/pipeline.svg)](https://gitlab.com/domaindrivenarchitecture/c4k-website/-/commits/main)
|
||||||
|
|
||||||
[<img src="https://domaindrivenarchitecture.org/img/delta-chat.svg" width=20 alt="DeltaChat"> chat over e-mail](mailto:buero@meissa-gmbh.de?subject=community-chat) | [<img src="https://meissa-gmbh.de/img/community/Mastodon_Logotype.svg" width=20 alt="team@social.meissa-gmbh.de"> team@social.meissa-gmbh.de](https://social.meissa-gmbh.de/@team) | [Website & Blog](https://domaindrivenarchitecture.org)
|
[<img src="https://domaindrivenarchitecture.org/img/delta-chat.svg" width=20 alt="DeltaChat"> chat over e-mail](mailto:buero@meissa-gmbh.de?subject=community-chat) | [<img src="https://meissa-gmbh.de/img/community/Mastodon_Logotype.svg" width=20 alt="team@social.meissa-gmbh.de"> team@social.meissa-gmbh.de](https://social.meissa-gmbh.de/@team) | [Website & Blog](https://domaindrivenarchitecture.org)
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,7 @@
|
||||||
(website/generate-website-https-ingress (flatten-and-reduce-config config))
|
(website/generate-website-https-ingress (flatten-and-reduce-config config))
|
||||||
(website/generate-website-certificate (flatten-and-reduce-config config))
|
(website/generate-website-certificate (flatten-and-reduce-config config))
|
||||||
(website/generate-website-build-cron (flatten-and-reduce-config config))
|
(website/generate-website-build-cron (flatten-and-reduce-config config))
|
||||||
|
(website/generate-website-initial-build-job (flatten-and-reduce-config config))
|
||||||
(website/generate-website-build-secret (flatten-and-reduce-config config)))))))
|
(website/generate-website-build-secret (flatten-and-reduce-config config)))))))
|
||||||
|
|
||||||
(defn k8s-objects [config]
|
(defn k8s-objects [config]
|
||||||
|
|
|
@ -91,6 +91,7 @@
|
||||||
"website/nginx-deployment.yaml" (rc/inline "website/nginx-deployment.yaml")
|
"website/nginx-deployment.yaml" (rc/inline "website/nginx-deployment.yaml")
|
||||||
"website/nginx-service.yaml" (rc/inline "website/nginx-service.yaml")
|
"website/nginx-service.yaml" (rc/inline "website/nginx-service.yaml")
|
||||||
"website/website-build-cron.yaml" (rc/inline "website/website-build-cron.yaml")
|
"website/website-build-cron.yaml" (rc/inline "website/website-build-cron.yaml")
|
||||||
|
"website/website-initial-build-job.yaml" (rc/inline "website/website-initial-build-job.yaml")
|
||||||
"website/website-build-deployment.yaml" (rc/inline "website/website-build-deployment.yaml")
|
"website/website-build-deployment.yaml" (rc/inline "website/website-build-deployment.yaml")
|
||||||
"website/website-build-secret.yaml" (rc/inline "website/website-build-secret.yaml")
|
"website/website-build-secret.yaml" (rc/inline "website/website-build-secret.yaml")
|
||||||
"website/website-content-volume.yaml" (rc/inline "website/website-content-volume.yaml")
|
"website/website-content-volume.yaml" (rc/inline "website/website-content-volume.yaml")
|
||||||
|
@ -170,6 +171,14 @@
|
||||||
(assoc-in [:metadata :labels :app.kubernetes.part-of] (generate-app-name unique-name))
|
(assoc-in [:metadata :labels :app.kubernetes.part-of] (generate-app-name unique-name))
|
||||||
(replace-all-matching-subvalues-in-string-start "NAME" (replace-dots-by-minus unique-name)))))
|
(replace-all-matching-subvalues-in-string-start "NAME" (replace-dots-by-minus unique-name)))))
|
||||||
|
|
||||||
|
(defn-spec generate-website-initial-build-job pred/map-or-seq?
|
||||||
|
[config flattened-and-reduced-config?]
|
||||||
|
(let [{:keys [unique-name]} config]
|
||||||
|
(->
|
||||||
|
(yaml/load-as-edn "website/website-initial-build-job.yaml")
|
||||||
|
(assoc-in [:metadata :labels :app.kubernetes.part-of] (generate-app-name unique-name))
|
||||||
|
(replace-all-matching-subvalues-in-string-start "NAME" (replace-dots-by-minus unique-name)))))
|
||||||
|
|
||||||
(defn-spec generate-website-build-deployment pred/map-or-seq?
|
(defn-spec generate-website-build-deployment pred/map-or-seq?
|
||||||
[config flattened-and-reduced-config?]
|
[config flattened-and-reduced-config?]
|
||||||
(let [{:keys [unique-name]} config]
|
(let [{:keys [unique-name]} config]
|
||||||
|
|
26
src/main/resources/website/website-initial-build-job.yaml
Normal file
26
src/main/resources/website/website-initial-build-job.yaml
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
apiVersion: batch/v1
|
||||||
|
kind: Job
|
||||||
|
metadata:
|
||||||
|
name: NAME-initial-build-job
|
||||||
|
labels:
|
||||||
|
app.kubernetes.part-of: NAME-website
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- image: domaindrivenarchitecture/c4k-website-build
|
||||||
|
name: NAME-build-app
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
command: ["/entrypoint.sh"]
|
||||||
|
envFrom:
|
||||||
|
- secretRef:
|
||||||
|
name: NAME-secret
|
||||||
|
volumeMounts:
|
||||||
|
- name: content-volume
|
||||||
|
mountPath: /var/www/html/website
|
||||||
|
volumes:
|
||||||
|
- name: content-volume
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: NAME-content-volume
|
||||||
|
restartPolicy: OnFailure
|
||||||
|
|
|
@ -200,6 +200,31 @@
|
||||||
:username "someuser"
|
:username "someuser"
|
||||||
:authtoken "abedjgbasdodj"}))))
|
:authtoken "abedjgbasdodj"}))))
|
||||||
|
|
||||||
|
(deftest should-generate-website-initial-build-job
|
||||||
|
(is (= {:apiVersion "batch/v1",
|
||||||
|
:kind "Job",
|
||||||
|
:metadata {:name "test-io-initial-build-job", :labels {:app.kubernetes.part-of "test-io-website"}},
|
||||||
|
:spec
|
||||||
|
{:template
|
||||||
|
{:spec
|
||||||
|
{:containers
|
||||||
|
[{:image "domaindrivenarchitecture/c4k-website-build",
|
||||||
|
:name "test-io-build-app",
|
||||||
|
:imagePullPolicy "IfNotPresent",
|
||||||
|
:command ["/entrypoint.sh"],
|
||||||
|
:envFrom [{:secretRef {:name "test-io-secret"}}],
|
||||||
|
:volumeMounts [{:name "content-volume", :mountPath "/var/www/html/website"}]}],
|
||||||
|
:volumes [{:name "content-volume", :persistentVolumeClaim {:claimName "test-io-content-volume"}}],
|
||||||
|
:restartPolicy "OnFailure"}}}}
|
||||||
|
(cut/generate-website-initial-build-job {:unique-name "test.io",
|
||||||
|
:fqdns ["test.de" "test.org" "www.test.de" "www.test.org"],
|
||||||
|
:gitea-host "gitlab.de",
|
||||||
|
:gitea-repo "repo",
|
||||||
|
:branchname "main",
|
||||||
|
:username "someuser",
|
||||||
|
:authtoken "abedjgbasdodj",
|
||||||
|
:issuer "staging"}))))
|
||||||
|
|
||||||
(deftest should-generate-website-build-secret
|
(deftest should-generate-website-build-secret
|
||||||
(is (= {:name-c1 "test-io-secret",
|
(is (= {:name-c1 "test-io-secret",
|
||||||
:name-c2 "test-org-secret",
|
:name-c2 "test-org-secret",
|
||||||
|
|
Loading…
Reference in a new issue