Pipeline
Også kendt som: byggepipeline, udrulningspipeline
En fast, automatisk kæde af trin, der fører en kodeændring fra gemt fil til kørende software og stopper, hvis et trin fejler.
Kladde - dette opslag er endnu ikke gennemgået.
Formelt
En skriftlig beskrivelse af faser i fast rækkefølge - fx at bygge, teste, scanne og pakke softwaren og rulle den ud - som et CI/CD-system kører for hver ændring, og hvor hver fase skal bestå, før den næste går i gang.
Forklaret enkelt
Som samlebåndet på en bilfabrik, hvor hver station udfører én opgave, og en bil, der dumper bremsetesten, aldrig når ud i forretningen.
I praksis
Hos et færgeselskab stopper pipelinen for billetbookingen en frigivelse om fredagen, fordi en test viser, at børnebilletter bliver prissat som voksenbilletter; intet når ud til kunderne, før fejlen er rettet.
Hvorfor det betyder noget
Pipelinen er stedet, hvor regler bliver automatiske og svære at springe over, men den har også nøglerne til driften, så en angriber, der overtager den, kan sende skadelig kode ud til alle brugere.
Sådan kommer du i gang
De typiske trin i rækkefølge. Tilpas dem til jeres organisation.
- Definér pipelinen som kode i det repository, den bygger, og beskyt pipelinefilerne med gennemgang fra code owners, så ændringer i dem gennemgås som al anden kode.
- Læg faserne i en rækkefølge, hvor billige tjek kører først - build, enhedstests, sikkerhedsscanninger, pakning - og udrulningsjobs kører sidst.
- Byg én gang, og promovér det samme uforanderlige artefakt, identificeret ved sin digest, gennem test, staging og produktion.
- Lås værktøjskæder, afhængigheder og tredjeparts-actions eller plugins til præcise versioner eller fulde commit-SHA'er, og lad en opdateringsbot foreslå opgraderinger som pull requests.
- Gør jobbets standardtoken skrivebeskyttet, giv hvert job kun de rettigheder, det har brug for, og brug OIDC-føderering til kortlivede cloud-legitimationsoplysninger afgrænset til repository, gren og miljø.
- Byg upålidelige pull requests uden hemmeligheder på flygtige runners, adskilt fra privilegerede frigivelsesjobs, og indsæt aldrig upålidelig tekst som titlen på et issue direkte i shell-kommandoer.
- Beskyt udrulninger til produktion med navngivne miljøer, der kræver godkendelse eller en beskyttet gren.
- Lad pipelinen producere dokumentation for hver udgivelse - testrapporter, scanningsresultater, en SBOM og signeret provenance - med SLSA Build Level 2 eller 3 som mål.
Typiske faldgruber
- At bruge udløsere som pull_request_target, der checker upålidelig kode ud, mens repositoryets hemmeligheder er tilgængelige.
- At henvise til tredjeparts-actions via foranderlige tags, hvilket var sådan, kompromitteringen af tj-actions/changed-files spredte sig i 2025.
- At koble selvhostede runners til offentlige repositories, hvor enhver pull request kan overtage maskinen.
- At bygge forfra for hvert miljø, så det, der blev testet, ikke er det, der når produktion.
Gode vejledninger
- SLSA v1.2 - Build Track Basics(åbner i en ny fane) · OpenSSF (på engelsk)
- GitHub Actions - Secure use reference(åbner i en ny fane) · GitHub (på engelsk)
- GitHub Actions - OpenID Connect(åbner i en ny fane) · GitHub (på engelsk)
- CI/CD Security Cheat Sheet(åbner i en ny fane) · OWASP (på engelsk)
Teknisk uddybning
En pipeline defineres som kode i det repository, den bygger: .github/workflows/*.yml til GitHub Actions, .gitlab-ci.yml, en Jenkinsfile, azure-pipelines.yml osv. Den fælles model er udløsere (push, pull request, tag, tidsplan, manuel start), der starter en kørsel; en kørsel består af jobs arrangeret som en rettet acyklisk graf via eksplicitte afhængigheder (needs, dependsOn, stages); hvert job udfører en liste af trin på en runner eller agent, som kan være en flygtig hostet VM eller en selvhostet maskine. Jobs udveksler output via artefakter og gøres hurtigere med caches; matrix-strategier folder et job ud over versioner eller platforme; udrulningsjobs rammer navngivne miljøer, der kan kræve manuel godkendelse, beskyttede grene eller ventetider.
Gode designprincipper følger af kontinuerlig levering. Byg én gang og promovér det samme uforanderlige artefakt, identificeret ved digest, gennem test, staging og produktion i stedet for at bygge om per miljø; hold builds hermetiske og reproducerbare ved at låse værktøjskæder og afhængigheder; fejl hurtigt ved at køre billige tjek først; og gør hvert udrulningstrin idempotent, så en genkørsel er sikker. Pipelines producerer også dokumentation: testrapporter, scanningsresultater, SBOM'er og signeret provenance. SLSA's Build-spor definerer niveauer for det sidste - L1 kræver, at provenance findes, L2 kræver, at en hostet byggeplatform genererer og signerer den, og L3 kræver en hærdet platform, hvor kørsler ikke kan påvirke hinanden, og byggetrin ikke kan nå nøglen, der signerer provenance.
Fordi en pipeline udfører kode fra repositoryet med adgang til hemmeligheder, er den selv en angrebsflade, katalogiseret i OWASP Top 10 CI/CD Security Risks. Poisoned pipeline execution (CICD-SEC-4) opstår, når en angriber kan ændre, hvad der kører - fx et GitHub Actions-workflow udløst af pull_request_target, der checker den upålidelige pull request-kode ud og bygger den, mens repositoryets hemmeligheder er tilgængelige. Script-injektion opstår, når strenge, som angriberen styrer, fx titlen på et issue, interpoleres med ${{ }} direkte ind i en run:-shellblok. Tredjeparts-actions og plugins er afhængigheder, der kører med jobbets fulde rettigheder; kompromitteringen af tj-actions/changed-files i marts 2025 (CVE-2025-30066) virkede, fordi mange workflows henviste til den via et foranderligt tag. Selvhostede runners koblet til offentlige repositories kan overtages og overleve mellem jobs, og delte caches kan forgiftes.
Modtræk er tokens med mindste privilegium (begræns standardrettighederne for GITHUB_TOKEN per job), OIDC-føderering, så jobs får kortlivede cloud-legitimationsoplysninger afgrænset til repository, gren og miljø, fastlåsning af actions til fulde commit-SHA'er med automatiske opdaterings-PR'er, flygtige runners, adskillelse af builds af upålidelige pull requests fra privilegerede frigivelsesjobs og beskyttelse af selve pipelinedefinitionen via gennemgang fra code owners. Pipelinen er den eksekverbare implementering; CI/CD er den praksis, den tjener.
Relationer
- Del af
- CI/CD
Kilder og videre læsning
Standarder og officielle tekster
Opslagsværker
- SLSA v1.2 - Build Track Basics · OpenSSF
- OWASP Top 10 CI/CD Security Risks · OWASP Foundation
Hvor dataene kommer fra
Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.
Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON
Nævnt i
Test dig selv
Indlæser…