Hopp til innhold

Bygde CI/CD‑pipelines i GitHub Actions med et distroless‑produksjonsimage for frontend og promotering gjennom flere miljøer.

é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.

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.

Se hele oversikten