Enota 2 / 11

Oblikovanje CI/CD cevovodov z umetno inteligenco: GitHub Actions in GitLab CI

Dobički:

  • Sposobnost razumevanja koncepta CI/CD, anatomije cevovoda (sprožilec, opravilo, korak, tekač, artefakt) in razlik med GitHub Actions in GitLab CI ter omogočiti, da umetna inteligenca ustvari cevovode s pravim kontekstom
  • Sposobnost preverjanja in zavarovanja skrivnih referenc, dovoljenj in obstoja klicanih komponent v cevovodu, ki jih proizvaja umetna inteligenca
  • Sposobnost uporabe načel nepisanja skrivnosti v navadnem besedilu, odobritve minimalne avtorizacije in ohranjanja nadzora uvajanja z ločevanjem od CI

Srce sodobne programske opreme je avtomatiziran cevovod, po katerem koda zapusti računalnik razvijalca, dokler varno ne doseže stranke. Ta cev se imenuje CI/CD. CI (Continuous Integration) je samodejno prevajanje in testiranje vsake spremembe kode; Njegov namen je ujeti napako, preden razvijalec sploh zapusti tipkovnico. CD (Continuous Delivery/Deployment) je avtomatska priprava ali celo izdaja testirane kode. Cevovod CI/CD je konfiguracijska datoteka, ki opredeljuje te korake po vrstnem redu – običajno napisana v YAML (človeku berljivi format besedila konfiguracije).

Ročno pisanje teh datotek YAML je dolgočasno, podrobno in nagnjeno k napakam; Če vdolbina zdrsne za eno mesto, se prekine celoten cevovod. Tukaj nastopi umetna inteligenca: s pravim kontekstom v nekaj sekundah ustvari delujoč osnutek. Toda vaša naloga je, da razumete in preverite, kaj naredi vsak ustvarjen korak — ker je to cev, ki prenaša vašo kodo v produkt.

Anatomija cevovoda CI/CD

Vsak cevovod je sestavljen iz več osnovnih konceptov. Ne morete nadzorovati izhoda AI, ne da bi vedeli naslednje:

  • Sprožilec: Kaj začne cevovod? Običajno potiskanje v vejo, zahteva za vlečenje (zahteva za združitev) ali razpored.
  • Delo: logična enota, ki izvaja vrsto korakov; na primer "test", "build", "deploy".
  • Korak: Posamezen ukaz ali dejanje znotraj opravila.
  • Runner: virtualni stroj ali vsebnik, na katerem se izvajajo opravila.
  • Artefakt: Izhod, ki ga ustvari eno opravilo in uporabi naslednja opravila (na primer prevedena datoteka).
  • Skrivnost: zaupne informacije, ki jih Pipeline uporablja, vendar ne smejo ostati v navadnem besedilu v skladišču.

GitHub Actions hrani to definicijo v datotekah .github/workflows/*.yml; Enota je potek dela → opravilo → stopenjska hierarhija. GitLab CI na drugi strani uporablja stopnjo → strukturo opravila v datoteki .gitlab-ci.yml. AI pozna obe sintaksi, vendar morate izrecno povedati, katero želite.

Namig: ko zahtevate AI za cevovode, vedno navedite: platformo (GitHub Actions ali GitLab CI), jezik/ogrodje (Node, .NET, Python ...), sprožilec in ali bo uveden. Te štiri informacije podvojijo uporabnost rezultata.

Korak za korakom: Oblikovanje cevovoda z AI

  1. Pojasnite cilj. Na primer "izvedi teste pri potiskanju na glavno, zgradi sliko, vendar razmesti samo, ko je vržena oznaka".
  2. Izdelajte okostje. Vprašajte AI ​​za osnovni potek dela.
  3. Preberite in razumejte korake. Preverite, kaj počne vsaka vrstica za zagon in uporabo.
  4. Preverite tajne reference. Ali so skrivnosti priklicane z ${{ secrets.NAME }} ali so vdelane v kodo?
  5. Poskusite lokalno/CI. Zaženite ga v majhnem preskusnem repozitoriju in si oglejte rdeče-zeleno (neuspešno) vedenje.
  6. Razširite postopoma. Najprej dodajte CI (test), nato zgradite, nazadnje dodajte uvedbo.

Varnost: skrivnost in dovoljenje v pripravi

CI/CD je eno od mest, kjer skrivnosti največ uhajajo. Tri zlata pravila:

  1. Nikoli ne pišite skrivnosti v navadnem besedilu v YAML. Uporabite tajni repozitorij platforme (GitHub Secrets, GitLab CI/CD Variables) in ga pokličite z ${{ secrets.X }}.
  2. Najmanjši privilegij. Žeton, ki ga daste podjetju Pipeline, bo imel le toliko pooblastil, kot je potrebno. To zožite z dovoljenji: blok v GitHub Actions.
  3. Ne pritisnite Secret na dnevniku. Vrstice, kot je echo $TOKEN, razkrivajo skrivnost v dnevniku. Platforme maska, vendar bodite previdni tudi.
Pozor: zaradi udobja AI včasih postavi vdelane vrednosti, kot je geslo: 123456 ali preveč široka dovoljenja: pisanje-vse v vzorčne cevovode. Vedno popravi to: spremeni skrivnost v referenco, strni dovoljenje.

primerjalna tabela

koncept

Dejanja GitHub

GitLab CI

Konfiguracijska datoteka

.github/workflows/*.yml

.gitlab-ci.yml

gradbena enota

potek dela → opravilo → korak

oder → služba

sprožilec

deset:

pravila: / samo:

Skrivnost priklica

${{ secrets.NAME }}

$NAME (spremenljivke CI/CD)

Pripravljena komponenta

uporablja: action@v4

vključujejo: /template

tekač

nalet:

oznake:

trije mini kovčki

1. primer – skrajšano na 6 ur in 40 minut. Ekipa je želela avtomatizirati svoj postopek ročnega testiranja-gradnje-uvajanja, vendar nihče ni poznal YAML. Opisali so YZ kot "Node.js projekt, GitHub Actions, npm test in npm build in push to main, deploy only in v* tag". AI je izdelal delovno okostje 40 linij; Ekipa je preverila vsak korak in začela delovati v 40 minutah. Če bi pisali na roko, bi bil to en dan dela.

Primer 2 – Preverjanje pristnosti je zajelo varnostno ranljivost. Inženir je prosil umetno inteligenco, naj uvede potek dela. Izhod je vključeval dovoljenja: write-all — kar pomeni, da je žeton lahko pisal v repozitorij, pakete, vse. Inženir je to opazil in zožil z dovoljenji: { vsebina: branje, paketi: pisanje }. To je odpravilo tveganje, da bi ugrabljena odvisnost zamenjala celotno skladišče.

Primer 3 – halucinacijsko delovanje. Ena ekipa je izvedla uporabe, ki jih je predlagal AI: akcije/deploy-to-aws@v3 line; Takega uradnega ukrepa ni bilo, AI si je izmislil ime. Cevovod je eksplodiral z "action not found". Lekcija: Preverite v Marketplaceu, ali vsaka komponenta, ki je bila poklicana z uses:, dejansko obstaja.

Štiri predloge za kopiranje

1) Osnovni potek dela CI:

Napišite potek dela CI za GitHub Actions. Projekt: [LANGUAGE/FRAMEWORK].Sprožilec: zahteva za potiskanje in vlečenje v glavno vejo. Koraki: namestite odvisnosti, zaženite teste, zaženite lint. NE Deploy.Runner ubuntu-latest. Skrivnost ni potrebna. Označite YAML.

2) Razporejen potek dela CD (varno):

Napišite potek dela razmestitve za [PLATFORMA]. Delovati bi moralo samo z oznako 'v*'. Cilj: [MEDIJI/OBLAK]. Pravila: - NIKOLI ne pišite skrivnosti v navadnem besedilu, pokličite jih z ${{ skrivnosti.

3) Opišite obstoječi cevovod:

Opišite naslednji cevovod [PLATFORMA] vrstico za vrstico: kaj počne vsako opravilo, v kakšnem vrstnem redu poteka, katero skrivnost uporablja in kateri sta njegovi najbolj tvegani točki? Na koncu predlagajte 3 izboljšave. Cevovod: [VSEBINA YAML]

4) Pospešite cevovod:

Naslednji cevovod CI teče počasi (trajanje: [X min]). Preverite uporabo predpomnilnika, vzporedna opravila in nepotrebne korake. Podajte 5 konkretnih, izvedljivih predlogov za pospeševanje in zapišite ocenjeni učinek vsakega. Cevovod: [YAML]

Šibek poziv/močan poziv

Slabost: "Pisanje poteka dela GitHub Actions."

Rezultat: ni jasno, kateri jezik, kateri sprožilec, ali obstaja uvajanje; AI daje splošen primerek Node, ki verjetno ne bo ustrezal vašemu projektu in lahko skrivnost kodira.

Močno: "Napišite delovni tok GitHub Actions. Projekt Python 3.12, zaženite pytest + ruff v zahtevi za vlečenje in glavnem potisku; NI uvajanja; pospešite odvisnosti s predpomnilnikom pip; skrivnosti niso potrebne. Izvozite YAML s komentarji."

Razlika: drugi poziv podaja jezik, sprožilec, obseg (brez razmestitve), pričakovano zmogljivost in varnostno omejitev. Izhod deluje neposredno.

Pogoste napake

  • Vdelava skrivnosti v YAML. Geslo/žeton z navadnim besedilom je najpogostejša ranljivost CI.
  • Preširoko dovoljenje. Dajte minimalno zahtevano dovoljenje namesto pisanja vsega.
  • Zanašanje na neobstoječe dejanje/predlogo. Preverite vrstice uses: z umetno inteligenco v Marketplace.
  • Zmeda Deploy in CI. Preizkus se lahko izvaja ob vsakem pritisku, vendar mora biti uvajanje nadzorovano in odobreno.
  • Ne uporablja predpomnilnika. Namestitev odvisnosti od začetka pri vsakem zagonu upočasni cevovod za nekaj minut.
  • Preizkušanje prvega poteka dela neposredno v glavnem skladišču. Najprej ga zaženite v testnem repozitoriju.

Če povzamem

Cevi CI/CD so avtomatizirane cevi, ki varno premaknejo kodo v produkt in so definirane z YAML. Umetna inteligenca hitro izdela delujoče načrte za GitHub Actions in GitLab CI – vendar morate biti jasni glede platforme, jezika, sprožilca in obsega uvajanja. Obstajajo tri varnostna pravila: pokličite skrivnosti s sklicevanjem, podelite minimalne privilegije, ne izpisujte skrivnosti v dnevniku. Vaša odgovornost je, da preverite, ali vsaka komponenta uses:/include: dejansko obstaja in kaj počne vsak korak.

Aplikacijska naloga

Izberite preprost vzorčni projekt (tudi "zdravo, svet" v vašem jeziku bo zadostoval). Umetna inteligenca naj ustvari potek dela z zgornjo predlogo »Osnovni potek dela CI«. Nato: (1) s svojimi besedami napišite, kaj naredi vsak korak; (2) preveri, da ni vdelanih skrivnosti in da so dovoljenja ozka; (3) Če je mogoče, ga zaženite v preskusni posodi in opazujte rdeče-zeleno obnašanje.

kontrolni seznam

  • [ ] Svojemu pozivu sem dodal platformo, jezik/ogrodje, sprožilec in obseg uvajanja.
  • [ ] Razumem, kaj počne vsako opravilo in korak v ustvarjenem YAML.
  • [ ] Nobena skrivnost ni golo besedilo; vse ${{ secrets.X }} / spremenljivka CI.
  • [ ] Dovoljenja sem zožil na minimalno pooblastilo.
  • [ ] Preveril sem, da vsa klicana dejanja/predloge dejansko obstajajo.
  • [ ] Korak uvajanja sem nadzoroval z odobritvijo/zaščito.