Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Denna sida är under uppbyggnad och inte aktuell förens förrän denna text är borttagen!

Denna sida beskriver utvecklingsfabriken uppsättning av CI/CD för deployment av mikrotjänster i OpenShift kluster.

...

Information hittar man enklast via de länkar som finns under rubriken verktyg.

...

Översiktlig beskrivning av implementation

Utvecklingsfabriken har valt att implementera en gemensam pipline för så många mikrotjänster som möjligt, som pipeline för merparten av de mikrotjänster som skapas i fabriken. Pipelinen är versionshanterad och uppdateras centralt. Det finns både för och nackdelar med en sådant val. Men , men fördelarna anses överväga nackdelarna.

Man kan se det som vilken gemensam kod som helst där man bygger en modul som kan återanvändas av många tjänster om så önskas. När den vidareutvecklas bör man ha detta i åtanke och se till att möjligheten till att göra overrides och anpassningar är möjliga för de som använder modulen.

...

Varje tjänst behöver ange ett minimalt antal parametrar och sedan genereras , vilka sedan används för att generera de slutgiltiga kubernetes objekten som kompletta kubernetes objekt.

spring-boot-pipeline: https://gitlab.sundsvall.se/argocd/helm/spring-boot-pipeline

...

spring-boot-chart: https://gitlab.sundsvall.se/argocd/helm/spring-boot-chart

Common pipeline repo

Den Tekton pipeline som genereras med hjälp av spring-boot-pipeline chart har referenser till ytterliggare objekt som behövs för att pipelinen ska kunna köras. Dessa objekt hanteras i ett separat git repository som heter common-pipeline. Här återfinns gemensamma secrets, tasks och en eventListener.

Man kan tänka sig uppdelningen mellan common-pipeline och spring-boot-pipeline som att de objekt som skapas av common-pipeline delas av alla tjänster medan spring-boot-pipeline genererar unika objekt för varje tjänst.

common-pipeline: https://gitlab.sundsvall.se/argocd/common-pipeline

...

Deployment av pipeline och mikrotjänst

För att deploya varje mikrotjänsts pipeline och själva mikrotjänsten används Argo CD. Varje mikrotjänst har ett privat repository på https://gitlab.sundsvall.se/argocd/api-services som , vilket innehåller manifesten som ska appliceras i klustret, dels för pipelinen och dels för själva mikrotjänsten.

Argo CD sätts upp att synka klustret mot det som återfinns i repotrepositoryt. Se “lägg till länk” Skapa pipline för mikrotjänst för detaljer hur en tjänst ska sättas upp i Argo CD. När mikrotjänsten mikrotjänstens pipeline är deployad i klustret triggas pipelinen via en webhook som är definierad på github.com där tjänstens källkod ligger lagrad.

Gliffy
imageAttachmentIdatt1138655249
macroIddbc40563-79d4-4596-9eb5-7ff9a6902672
baseUrlhttps://sundsvall.atlassian.net/wiki
nameopenshift_pipeline_overview
diagramAttachmentIdatt1138622509
containerId1137770501
timestamp1671529649780

När pipelinen har kört klart pushas en uppdatering till gitlab på en ny branch. Uppdateringen innehåller vilken image som ska vara deployad i klustret. När denna mergas till den branch som Argo CD är uppsatt att övervaka, synkas uppdateringen och klustret kan deploya den nya imagen.

Pipelinen skapar en merge request mot test-branchen som default. För att deploya i produktion görs en cherry pick av en commit från test branch och appliceras på prod branch. Se Deployment i olika miljöer.

Branch-strategi

Pipelinen är utformad för att bygga en image per commit mot main branch. Varje image kan sedan promotas till varje miljö (test/prod). Det finns alltså inte en branch som bygger för test och en annan som bygger för produktion. Den image som har verifierats i test är samma image som sedan ska deployas i produktion.

Om man vill minimera antalet merge request och image byggen kan man nyttja en development branch där man kan hantera kod som ligger under utveckling.

Har man behov att göra akuta rättningar i produktion och har släpande releaser (saker som ligger på main som inte kan deployas i produktion) kan man göra ett branch bygge där man checkar ut en branch från valfri commit.

Tanken med denna strategi är att uppnå continuous deployment. Att ha så korta release cykler som möjligt och kontinuerligt deploya den nya koden i alla miljöer. Har man behov att köra två major versioner samtidigt kan en temporär branch brytas ut, vilken innehåller den äldre versionen och i Argo CD lägga upp en separat applikation. Behövs rättningar göras i den kan man nyttja branch byggen. När alla klienter gått över till ny version kan branchen tas bort.