Hoppa till innehållet

Byggde CI/CD‑pipelines i GitHub Actions med en distroless‑image för frontenden i produktion och uppflyttning mellan flera miljöer.

en pipeline, tre miljöer, en distroless‑image

Situation. Att leverera borde inte hänga på att någon kommer ihåg stegen, och det som till slut körs i produktion borde inte vara en fet allmän container som bär på ett skal och en pakethanterare som den aldrig kommer att använda — det är bara attackyta som ligger där utan anledning.

Uppgift. Vägen från commit till körning i Azure skulle bli automatisk, och produktionsavbildningarna skulle hållas så små och låsta som varje arbetslast tillåter.

Handling. Pipelinen är GitHub Actions. Separata arbetsflöden hanterar kodkvalitetsgrinden, testerna och driftsättningarna per miljö, med CodeQL, beroendegranskning och ett SBOM‑steg vid sidan av, så att ingenting når en miljö utan att först ha passerat kontrollerna. Avbildningarna byggs i flera steg, och basen för varje del valdes efter sina egna meriter i stället för som ett enda generellt val: frontenden levereras på en distroless‑avbildning (gcr.io/distroless/cc‑debian13 — inget skal, ingen pakethanterare), Go‑API:et på en slimmad Alpine och databasavbildningen på postgres‑slim. Ett bygge förs vidare genom miljöerna längs en fastställd väg i stället för manuellt.

Resultat. Releaser slutade vara en försiktig manuell ritual och blev en rutinmässig, tråkig händelse, vilket är precis vad man vill ha av releaser. Frontenden i produktion körs på ungefär så lite som det går att ge den, kontrollerna fångar problem innan de landar, och ”driftsättning” är något som pipelinen gör snarare än något som någon svettas sig igenom.

En del av en längre historik — och den finns i sin helhet här.

Varje post är skriven på samma sätt: situationen, uppgiften, vad vi gjorde och vad som förändrades.

Se hela historiken