Spring til indhold

Har bygget GitHub Actions CI/CD‑pipelines

Har bygget GitHub Actions CI/CD‑pipelines med et distroless frontend‑image til produktion og promovering gennem flere miljøer.

  • Port, crane, container
    Foto: WorldInMyEyes / Pixabay
  • Motorcycle, package, parcel delivery
    Foto: Tho-Ge / Pixabay

én pipeline, tre miljøer, et distroless image

Situation. Udgivelser bør ikke afhænge af, at nogen husker trinnene, og det, der ender med at køre i produktion, bør ikke være en oppustet container til alle formål med en shell og en package manager, den aldrig får brug for — det er bare angrebsflade, der ligger der uden grund.

Opgave. Gør vejen fra commit til kørende kode i Azure automatisk, og hold produktionsimages så små og stramt låst, som hver workload tillader.

Handling. Byggepipelinen er GitHub Actions. Separate workflows står for kodens kvalitetskontrol, testene og udrulningerne til de enkelte miljøer, med CodeQL, dependency review og et SBOM‑trin ved siden af, så intet når et miljø uden først at have bestået tjekkene. Alle images er multi‑stage‑builds, og base‑imaget for hver del blev valgt ud fra dens egne behov i stedet for som ét fælles valg: frontenden leveres på et distroless image (gcr.io/distroless/cc‑debian13 — ingen shell, ingen package manager), Go‑API’et på en slank Alpine og database‑imaget på postgres‑slim. Promovering flytter et build gennem miljøerne ad en fastlagt rute og ikke i hånden.

Resultat. Releases holdt op med at være et omhyggeligt manuelt ritual og blev en rutinemæssig, kedelig hændelse, hvilket er præcis, hvad man ønsker sig af releases. Frontenden i produktion kører på stort set det mindst mulige, tjekkene fanger problemerne, før de når frem, og “udrulning” er noget, byggepipelinen klarer, og ikke noget, nogen sveder sig igennem.

Ét stykke af en længere fortegnelse — og det hele ligger her på sitet.

Hver post er skrevet på samme måde: situationen, opgaven, hvad vi gjorde, og hvad der ændrede sig.

Se hele fortegnelsen