Idé för utformning av CI/CD för OpenShift kluster.
Tekton
Det naturliga valet för CI i OpenShift är Tekton. Se OpenShift pipelines: https://docs.openshift.com/container-platform/4.7/cicd/index.html för mer information.
Ett fösta utkast för en gemensam spring boot pipeline:
PiplineRuns (stored in git applied via Argo CD, unique per service)
Reference common spring boot pipeline (stored in git applied via Argo CD)
Common Pipeline taskts:
git clone - params: repo rul, branch, credential reference
mvn build (test) - params: optional build parameters (base image?)
build and push image - params: image tg, image storage url, credential referens (base image?)
push k8 desired state to git (picked up by Argo CD) - params: repo rul, branch, credential referens
Med credential referens menas secret som sparas i kluster. Alla task körs sekventiellt. Eget namespace för CI.
Argo CD
Används för att deploya förändringar i OpenShift kluster
All pipelines parts (PipelineRuns, Pipeline, Task etc.) applied via Argo CD
Each cluster has its own Argo CD installation
One config repo per service
Helm chart to easily set up default config. each service has a non release helm chart in config repo importing common chart with default values.
Frågor
Hur rensar vi på bästa sätt images som inte används? Det kan skilja mellan test och prod men man bör även ta hänsyn till hur vi gör vid ny major release då vi måste ha två majors igång av samma tjänst.
Vilken promotion modell (promotion från staging till prod) vill vi ha? Branch, overlays, annat?
Finns möjlighet för bygge av feature branch automatiskt. Dvs när en ny remote branch skapas så får man per automatik ett bygg jobb som kan användas som stöd vid granskning av PR. I förlängningen även trigga kodskanning.
Länkar
Andra lösningar
Andra lösningar som har utvärderats men som inte känns lika attraktiva:
Drone
CircleCI
Jenkins-X