Bygde CI/CD‑pipelines i GitHub Actions med et distroless‑produksjonsimage for frontend og promotering gjennom flere miljøer.
Arbeidet utført: 2025
én pipeline, tre miljøer, ett distroless‑image
Situasjon. Leveranser bør ikke avhenge av at noen husker trinnene, og det som til slutt kjører i produksjon, bør ikke være en tung container for generell bruk med et skall og en pakkebehandler den aldri kommer til å bruke — det er bare angrepsflate som ligger der uten grunn.
Oppgave. Gjør veien fra commit til kjøring i Azure automatisk, og hold produksjonsimagene så små og låst ned som hver arbeidslast tillater.
Handling. Leveransepipelinen er GitHub Actions. Egne arbeidsflyter håndterer kvalitetsporten for koden, testene og produksjonssettingen til hvert miljø, med CodeQL, avhengighetsgjennomgang og et SBOM‑steg ved siden av, slik at ingenting når et miljø uten å ha bestått kontrollene først. Imagene er flertrinnsbygg, og basen for hver del ble valgt ut fra hva den delen trenger, i stedet for som ett felles valg: frontenden leveres på et distroless‑image (gcr.io/distroless/cc‑debian13 — uten skall, uten pakkebehandler), Go‑API‑et på en slank Alpine og databaseimaget på postgres‑slim. Promotering flytter et bygg gjennom miljøene langs en fast rute, ikke manuelt.
Resultat. Utgivelser sluttet å være et forsiktig manuelt ritual og ble en rutinemessig, kjedelig hendelse, som er nøyaktig det man vil ha fra utgivelser. Produksjonsfrontenden kjører på omtrent så lite som det går an å gi den, kontrollene fanger problemer før de lander, og «produksjonssetting» er noe leveransepipelinen gjør, ikke noe noen sveiter seg gjennom.
Se tilbake på Klargjorde Azure‑infrastruktur som kode med Bicep — Container Apps, PostgreSQL Flexible Server, Front Door/WAF og nettverk — i utviklings-, staging- og produksjonsmiljøene. Les videre: Skrev 578 go‑task‑automatiseringsmål som dekker native-, Docker- og HTTPS‑utviklingsmoduser, linting, testing, database og produksjonssetting. Eller ta en titt på hele porteføljen.
Ett stykke av en lengre oversikt — og den ligger i sin helhet her.
Hver oppføring er skrevet på samme måte: situasjonen, oppgaven, hva vi gjorde, og hva som endret seg.