Enhet 2 / 11

Designe CI/CD-rørledninger med kunstig intelligens: GitHub Actions og GitLab CI

Gevinster:

  • Evne til å forstå CI/CD-konseptet, pipeline-anatomien (trigger, jobb, step, runner, artefakt) og forskjellene mellom GitHub Actions og GitLab CI og ha kunstig intelligens til å produsere pipelines med riktig kontekst
  • Evne til å sjekke og sikre hemmelige referanser, tillatelser og eksistensen av kalte komponenter i rørledningen produsert av kunstig intelligens
  • Evne til å anvende prinsippene om å ikke skrive hemmeligheter i ren tekst, gi minimal autorisasjon og holde distribusjonen kontrollert ved å skille den fra CI

Hjertet i moderne programvare er den automatiserte rørledningen der koden forlater en utviklers datamaskin til den trygt når kunden. Denne pipen kalles CI/CD. CI (Continuous Integration) er den automatiske kompileringen og testingen av hver kodeendring; Hensikten er å fange en feil før utvikleren i det hele tatt forlater tastaturet. CD (Continuous Delivery/Deployment) er den automatiske klargjøringen eller til og med utgivelsen av testet kode. En CI/CD-pipeline er en konfigurasjonsfil som definerer disse trinnene i rekkefølge - vanligvis skrevet i YAML (et menneskelig lesbart konfigurasjonstekstformat).

Å skrive disse YAML-filene for hånd er kjedelig, detaljert og utsatt for feil; Hvis fordypningen sklir med ett mellomrom, bryter hele rørledningen. Det er her AI kommer inn: med riktig kontekst produserer den et fungerende utkast på sekunder. Men det er din jobb å forstå og verifisere hva hvert genererte trinn gjør – fordi dette er røret som fører koden din til prod.

Anatomi av CI/CD-rørledningen

Hver rørledning består av flere grunnleggende konsepter. Du kan ikke kontrollere AI-utgang uten å vite disse:

  • Trigger: Hva starter rørledningen? Vanligvis et push til en gren, en pull-forespørsel (sammenslåingsforespørsel) eller en tidsplan.
  • Jobb: Logisk enhet som utfører en rekke trinn; for eksempel "test", "bygg", "distribuer".
  • Trinn: En enkelt kommando eller handling i en jobb.
  • Runner: Den virtuelle maskinen eller beholderen som jobber kjøres på.
  • Artefakt: Utdata produsert av én jobb og brukt av påfølgende jobber (for eksempel en kompilert fil).
  • Hemmelighet: Konfidensiell informasjon som Pipeline bruker, men som ikke skal forbli i ren tekst i depotet.

GitHub Actions beholder denne definisjonen i .github/workflows/*.yml-filer; Enheten er arbeidsflyt → jobb → trinnhierarki. GitLab CI, derimot, bruker scenen → jobbstrukturen i .gitlab-ci.yml-filen. AI kjenner begge syntaksene, men du må eksplisitt si hvilken du vil ha.

Tips: Når du ber AI om pipelines, spesifiser alltid: plattform (GitHub Actions eller GitLab CI), språk/rammeverk (Node, .NET, Python...), trigger og om den skal distribueres. Disse fire opplysningene dobler nytten av utdataene.

Trinn for trinn: Designe en pipeline med AI

  1. Avklar målet. Som "kjør tester på push to main, bygg bilde, men distribuer bare når taggen blir kastet".
  2. Få skjelettet produsert. Spør AI om den grunnleggende arbeidsflyten.
  3. Les og forstå trinnene. Bekreft hva hver løps- og brukslinje gjør.
  4. Sjekk hemmelige referanser. Kalles hemmelighetene med ${{ secrets.NAME }} eller er de innebygd i koden?
  5. Prøv det lokalt/CI. Kjør den på et lite testlager, se den rødgrønne (ikke bestått) oppførselen.
  6. Utvid gradvis. Først bare legg til CI (test), deretter bygg, sist legg til distribusjon.

Sikkerhet: hemmelig og tillatelse i pipeline

CI/CD er et av stedene hvor hemmeligheter lekker mest. Tre gylne regler:

  1. Skriv aldri hemmeligheter i ren tekst i YAML. Bruk plattformens hemmelige arkiv (GitHub Secrets, GitLab CI/CD Variables) og kall det med ${{ secrets.X }}.
  2. Minste privilegium. Tokenet du gir til Pipeline vil bare ha så mye autoritet som nødvendig. Begrens dette med tillatelsene: blokk i GitHub Actions.
  3. Ikke trykk hemmelig på loggen. Linjer som echo $TOKEN avslører hemmeligheten i loggen. Plattformer maskerer, men vær forsiktig også.
Forsiktig: For enkelhets skyld legger AI noen ganger innebygde verdier som passord: 123456 eller altfor brede tillatelser: skriv alt i prøvepipelines. Løs alltid dette: endre hemmelighet til referanse, kollaps tillatelse.

sammenligningsdiagram

konsept

GitHub-handlinger

GitLab CI

Konfigurasjonsfil

.github/workflows/*.yml

.gitlab-ci.yml

bygningsenhet

arbeidsflyt → jobb → trinn

scene → jobb

utløse

ti:

regler: / bare:

Innkalle hemmelighet

${{ secrets.NAME }}

$NAME (CI/CD-variabler)

Klar komponent

bruker: action@v4

inkluderer: /mal

løper

kjører på:

tagger:

tre minisaker

Tilfelle 1 – Redusert til 6 timer og 40 minutter. Et team ønsket å automatisere den manuelle test-build-deploy-prosessen, men ingen var kjent med YAML. De beskrev YZ som "Node.js-prosjekt, GitHub Actions, npm-test og npm build-in push to main, deploy only in v* tag". AI produserte et fungerende skjelett på 40 linjer; Teamet verifiserte hvert trinn og gikk live på 40 minutter. Hvis de hadde skrevet det for hånd, hadde det vært en dagsverk.

Tilfelle 2 – Autentisering fanget opp en sikkerhetssårbarhet. En ingeniør ba AI om å distribuere arbeidsflyt. Utdataene inkluderte tillatelser: skrive-alt - noe som betyr at tokenet kunne skrive til depotet, pakker, alt. Ingeniøren la merke til dette og begrenset det med tillatelser: { contents: read, packages: write }. Dette eliminerte risikoen for at en kapret avhengighet erstatter hele depotet.

Tilfelle 3 - Hallusinatorisk handling. Ett team kjørte de AI-foreslåtte bruksområdene: actions/deploy-to-aws@v3 line; Det var ingen slik offisiell handling, AI fant opp navnet. Rørledningen eksploderte med "handling ikke funnet". Leksjon: Bekreft i Marketplace at hver komponent som kalles med uses: faktisk eksisterer.

Fire kopierbare maler

1) Grunnleggende CI arbeidsflyt:

Skriv en CI-arbeidsflyt for GitHub Actions. Prosjekt: [SPRÅK/RAMME].Utløser: trykk og trekk forespørsel til hovedgrenen. Trinn: installer avhengigheter, kjør tester, kjør lint. NO Deploy.Runner ubuntu-siste. Ingen hemmelighet nødvendig. Kommenter YAML.

2) Arbeidsflyt for distribuert CD (sikker):

Skriv distribusjonsarbeidsflyten for [PLATTFORM]. Det skal bare fungere på 'v*'-taggen. Mål: [MEDIA/SKY]. Regler: - ALDRI skriv hemmeligheter i ren tekst, kall dem med ${{ hemmeligheter.

3) Beskriv den eksisterende rørledningen:

Beskriv følgende [PLATTFORM]-rørledning linje for linje: hva gjør hver jobb, i hvilken rekkefølge kjører den, hvilken hemmelighet bruker den, og hva er de to mest risikofylte punktene? Til slutt, foreslå 3 forbedringer. Pipeline: [YAML CONTENT]

4) Få fart på rørledningen:

Følgende CI-rørledning kjører sakte (varighet: [X min]). Undersøk for cache-bruk, parallelle jobber og unødvendige trinn. Gi 5 konkrete, praktiske akselerasjonsforslag og skriv ned den estimerte effekten av hver. Rørledning: [YAML]

Svak forespørsel / Sterk forespørsel

Svak: "Skriv arbeidsflyt for GitHub Actions."

Resultat: det er uklart hvilket språk, hvilke utløser, om det er en distribusjon; AI gir en generisk Node-forekomst, vil sannsynligvis ikke passe til prosjektet ditt, og kan hardkode hemmeligheten.

Sterk: "Skriv arbeidsflyt for GitHub Actions. Python 3.12-prosjekt, kjør pytest + ruff i pull-forespørsel og hovedpush; INGEN distribusjon; akselerer avhengigheter med pip-cache; ingen hemmeligheter nødvendig. Eksporter YAML med kommentarer."

Forskjell: den andre ledeteksten gir språk, trigger, omfang (ingen distribusjon), ytelsesforventning og sikkerhetsbegrensning. Utgangen fungerer direkte.

Vanlige feil

  • Bygge inn hemmeligheten i YAML. Klartekstpassord/token er den vanligste CI-sårbarheten.
  • For bred tillatelse. Gi den minste tillatelsen som kreves i stedet for å skrive alt.
  • Stoler på ikke-eksisterende handling/mal. Bekreft AI-laget bruk: linjer i Marketplace.
  • Forvirrende distribusjon med CI. Testen kan kjøres på hvert trykk, men utplasseringen må kontrolleres og godkjennes.
  • Bruker ikke cache. Installering av avhengigheter fra bunnen av på hver kjøring bremser rørledningen med minutter.
  • Prøver den første arbeidsflyten direkte i hovedlageret. Kjør den på et testlager først.

Oppsummert

CI/CD-rørledninger er automatiserte rør som flytter kode trygt til prod og er definert med YAML. AI produserer raskt fungerende tegninger for GitHub Actions og GitLab CI - men du må være tydelig på plattformen, språket, triggeren og distribusjonsomfanget. Det er tre regler i sikkerhet: kalle hemmeligheter ved referanse, gi minimumsprivilegier, ikke skrive ut hemmeligheter i loggen. Det er ditt ansvar å verifisere at hver bruker:/include:-komponent faktisk eksisterer og hva hvert trinn gjør.

Søknadsoppgave

Velg et enkelt eksempelprosjekt (selv en "hallo verden" på ditt språk vil gjøre det). La AI produsere en arbeidsflyt med malen "Basic CI workflow" ovenfor. Deretter: (1) skriv med dine egne ord hva hvert trinn gjør; (2) bekrefte at ingen hemmeligheter er innebygd og tillatelser er begrensede; (3) Hvis mulig, kjør den i en testtank og observer den rød-grønne oppførselen.

sjekkliste

  • [ ] Jeg la til plattformen, språket/rammeverket, trigger- og distribusjonsomfanget til forespørselen min.
  • [ ] Jeg forstår hva hver jobb og trinn gjør i den genererte YAML.
  • [ ] Ingen hemmelighet er klartekst; alle ${{ secrets.X }} / CI-variabel.
  • [ ] Jeg begrenset tillatelsene til minimumsautoriteten.
  • [ ] Jeg bekreftet at alle kalte handlinger/maler faktisk eksisterer.
  • [ ] Jeg gjorde distribusjonstrinnet kontrollert med godkjenning/beskyttelse.