CI/CD för OpenShift

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: CI/CD overview | CI/CD | OpenShift Container Platform 4.7 för mer information.

Ett fösta utkast för en gemensam spring boot pipeline:

  • Trigger (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 plus one common repo common pipline parts

  • 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 and mandatory input parameters.

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.

  • Hur bra fungerar tester när man kör Testcontainers (container i container)?

  • Finns det versionering av tekton objekt eller får man sköta det helt via namnsättning?

  • Kan vi nyttja Helm som vi tänkt (non released version) i Argo CD?

  • Hur bra är developer tool i OpenShift för pipeliens?

Länkar

Andra lösningar

Andra lösningar som har utvärderats men som inte känns lika attraktiva:

  • Drone

  • CircleCI

  • Jenkins-X