Sätta upp CI/CD för en applikation
Här beskrivs alla steg som krävs för att sätta upp en Jenkins-pipeline som bygger och installerar alla instanser av en Spring Boot-applikation.
Förutsättningar
Dept44 version 0.13 eller senare måste användas.
Spring cloud config properties måste vara uppsatt för production, test och sandbox.
Lediga portar måste vara identifierade på SAAS728 (test) och SAAS021 (produktion).
HAProxy måste vara konfigurerad med dessa portar.
Tillvägagångssätt
Lägg till följande properties i din pom.xml och byt ut värdena till de som stämmer överens med din applikation:
<properties> <!-- CI/CD properties --> <docker.image.name>ms-businessengagements</docker.image.name> <published.container.port.sandbox>8730</published.container.port.sandbox> <published.container.port.test>8728</published.container.port.test> <published.container.port.production>8727</published.container.port.production> </properties>
Gå in på Jenkins och klicka på
Ange ett namn (samma som ditt applikationsnamn):
Kopiera från “Template” längst nere:
Klicka på OK
Nu är det dags att konfigurera dina byggen. Tre “Branch Sources” ska vara uppsatta för “Production”, “Test” och “Sandbox”.
Använd “ctrl + f” och sök efter texten “fyll i” och fyll i de fält som behöver kompletteras med dina värden.
Gå längst ned och klicka på “Apply” och sedan “Save”
Nu är du klar och byggen kommer ske automatiskt vid nya commits på de brancher du tidigare har angett.
Observera att det kan hända att du måste gå in på SAAS728 och SAAS021 och stoppa samt ta bort dina gamla containrar för att pipelinen ska fungera.
Sandbox
När pipelinen för Sandbox körs så startas även en Wiremock-container och en MariaDB-container.
För att Wiremock ska fungera så måste Wiremock-katalogerna (“__files” & “mappings”) ligga under: src/test/resources/wiremock
Wiremock-containern nås på http://wiremock:8080
MariaDb nås på jdbc:mariadb://db:3306/<docker.image.name>
Användarnamn: dbuser
Lösenord: dbpass
Default så startas Wiremock- och MariaDB-container upp för en tjänst i sandbox-miljön. För tjänster som ej kräver dessa containers kan man inaktivera ena eller båda genom properties i pom-filen enligt nedan (värdet ska vara true eller false):
<properties>
<sandbox.db>false</sandbox.db>
<sandbox.wiremock>false</sandbox.wiremock>
</properties>
Graylog
Loggar skickas automatiskt till Graylog och kan hittas med filtren:
source:<docker.image.name>-production*
source:<docker.image.name>-test*
Docker images
Docker-images laddas upp till vårt egna Nexus-repository.
Vilka image tags som byggs och laddas upp till Nexus beror på vilken branch du bygger från.
Branch | Image tag | Rensning |
---|---|---|
main |
| Dessa images rensas aldrig bort. Detta för att vi ska ha möjlighet att backa till tidigare versioner av applikationen. |
Övriga brancher |
| Dessa images rensas bort om de inte har blivit nedladdade de senaste tre dagarna. |
Bra att veta
Alla instanser förutom produktion byggs automatiskt vid förändringar (poll sker var femte minut). Produktions-pipeline måste startas manuellt.
Vid misslyckade byggjobb skickas mail till den som startade pipelinen och/eller de som har commitat de senaste ändringarna.
Namnet på våra Jenkins-pipelines är viktigt då det är det som avgör i vilken miljö installationen sker och vilken profil som används.
Maven 3.8.4 och OpenJDK-17.0.2 används i build-steget.
Jenkinsfile och docker-compose.yaml som används i bygget versionshanteras här: https://github.com/Sundsvallskommun/CICD
Kommande utveckling
Säkerhetsanalys https://sundsvall.atlassian.net/browse/UF-571
Gå mot olika instanser av spring cloud config server beroende på vilken instans som byggs.
Hantera image-tags så vi inte rensar bort images som används i produktion. Prefix på image-tag?
Möjlighet att manuellt fylla i vilken image-tag som ska installeras. För att snabbt och enkelt kunna backa till en tidigare version av applikationen.
Bygga en fungerade lösning för Wiremock.
Health-check i deploy-steget
Ej deploy som default för produktion