Byggde CI/CD‑pipelines i GitHub Actions med en distroless‑image för frontenden i produktion och uppflyttning mellan flera miljöer.
Arbetet utfört: 2025
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.
Se tillbaka på Provisionerade Azure‑infrastruktur som kod med Bicep — Container Apps, PostgreSQL Flexible Server, Front Door/WAF och nätverk — i utvecklings-, staging- och produktionsmiljöerna. Läs vidare: Skrev 578 automationsmål i go‑task som täcker utvecklingslägena native, Docker och HTTPS samt lintning, testning, databas och driftsättning. Eller ta en titt på hela portföljen.
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.