Jedinica 2 / 11

Dizajniranje CI/CD cjevovoda s umjetnom inteligencijom: GitHub akcije i GitLab CI

Dobici:

  • Sposobnost razumijevanja koncepta CI/CD, anatomije cjevovoda (okidač, posao, korak, trkač, artefakt) i razlika između GitHub Actions i GitLab CI i posjedovanje umjetne inteligencije za proizvodnju cjevovoda s pravim kontekstom
  • Sposobnost provjere i osiguranja tajnih referenci, dozvola i postojanja pozvanih komponenti u cjevovodu koje proizvodi umjetna inteligencija
  • Sposobnost primjene principa nepisanja tajni u običnom tekstu, davanja minimalnog ovlaštenja i držanja kontrole implementacije odvajanjem od CI

Srce modernog softvera je automatizovani cevovod kroz koji kod napušta kompjuter programera sve dok bezbedno ne stigne do korisnika. Ova cijev se zove CI/CD. CI (Continuous Integration) je automatska kompilacija i testiranje svake promjene koda; Njegova svrha je uhvatiti grešku prije nego što programer uopće napusti tastaturu. CD (Continuous Delivery/Deployment) je automatska priprema ili čak puštanje testiranog koda. CI/CD cjevovod je konfiguracijska datoteka koja definira ove korake po redoslijedu — obično napisana u YAML-u (format konfiguracijskog teksta čitljiv za ljude).

Ručno pisanje ovih YAML datoteka je zamorno, opširno i sklono greškama; Ako udubljenje pomakne za jedan razmak, cijeli cevovod puca. Ovdje dolazi AI: sa pravim kontekstom, proizvodi radni nacrt za sekunde. Ali vaš je posao da shvatite i provjerite šta radi svaki generirani korak — jer je to cijev koja prenosi vaš kod u prod.

Anatomija CI/CD cjevovoda

Svaki cevovod se sastoji od nekoliko osnovnih koncepata. Ne možete kontrolisati AI izlaz bez poznavanja ovih:

  • Trigger: Šta pokreće naftovod? Obično guranje na granu, zahtjev za povlačenjem (zahtjev za spajanjem) ili raspored.
  • Posao: Logička jedinica koja izvršava niz koraka; na primjer "testiranje", "izgradnja", "deploy".
  • Korak: Jedna naredba ili radnja unutar posla.
  • Runner: Virtuelna mašina ili kontejner na kojem se pokreću poslovi.
  • Artefakt: Izlaz proizveden od strane jednog posla i korišten u sljedećim poslovima (na primjer, kompajlirana datoteka).
  • Tajna: Povjerljive informacije koje Pipeline koristi, ali ne bi trebale ostati u običnom tekstu u spremištu.

GitHub Actions čuva ovu definiciju u .github/workflows/*.yml datotekama; Jedinica je radni tok → posao → hijerarhija koraka. GitLab CI, s druge strane, koristi fazu → strukturu posla u datoteci .gitlab-ci.yml. AI poznaje obje sintakse, ali morate eksplicitno reći koju želite.

Savjet: Kada tražite AI za cjevovode, uvijek navedite: platformu (GitHub Actions ili GitLab CI), jezik/okvir (Node, .NET, Python…), okidač i da li će biti implementiran. Ove četiri informacije udvostručuju korisnost rezultata.

Korak po korak: Dizajniranje cjevovoda s AI

  1. Pojasnite cilj. Kao "pokreni testove na push to main, izgradi sliku, ali se implementira samo kada se tag izbaci".
  2. Neka se proizvede kostur. Pitajte AI za osnovni tok posla.
  3. Pročitajte i razumite korake. Provjerite šta svaka linija za pokretanje i korištenje radi.
  4. Provjerite tajne reference. Da li se tajne pozivaju sa ${{ secrets.NAME }} ili su ugrađene u kod?
  5. Probajte lokalno/CI. Pokrenite ga na malom testnom spremištu, pogledajte crveno-zeleno (fail-pass) ponašanje.
  6. Proširite postepeno. Prvo samo dodajte CI (test), zatim izgradite, zadnje dodajte implementaciju.

Sigurnost: tajna i dozvola u pripremi

CI/CD je jedno od mjesta gdje tajne najviše cure. Tri zlatna pravila:

  1. Nikada nemojte pisati tajne u običnom tekstu u YAML-u. Koristite tajno spremište platforme (GitHub Secrets, GitLab CI/CD varijable) i pozovite ga sa ${{ secrets.X }}.
  2. Najmanja privilegija. Token koji date Pipelineu imat će samo onoliko ovlaštenja koliko je potrebno. Suzite ovo s dozvolama: blokirajte u GitHub Actions.
  3. Ne pritiskajte tajnu na dnevniku. Redovi poput echo $TOKEN otkrivaju tajnu u dnevniku. Platforme maske, ali budite oprezni.
Oprez: Radi praktičnosti, AI ponekad postavlja ugrađene vrijednosti kao što je lozinka: 123456 ili preširoke dozvole: upisi sve u uzorke cjevovoda. Uvijek popravi ovo: promijeni tajnu u referencu, sažmi dozvolu.

uporedni grafikon

koncept

GitHub Actions

GitLab CI

Konfiguracioni fajl

.github/workflows/*.yml

.gitlab-ci.yml

građevinska jedinica

radni tok → posao → korak

faza → posao

okidač

deset:

pravila: / samo:

Prizvati tajnu

${{ secrets.NAME }}

$NAME (CI/CD varijable)

Spremna komponenta

koristi: action@v4

uključuje: /template

trkač

radi na:

oznake:

tri mini kofera

Slučaj 1 — Smanjeno na 6 sati i 40 minuta. Tim je želio automatizirati svoj ručni proces testiranja, izgradnje i postavljanja, ali niko nije bio upoznat sa YAML-om. Oni su opisali YZ kao "Node.js projekat, GitHub Akcije, npm test i npm build u push to main, implementirati samo u v* tag-u". AI je proizveo radni skelet od 40 linija; Tim je provjerio svaki korak i krenuo uživo za 40 minuta. Da su ga napisali rukom, to bi bio radni dan.

Slučaj 2 — Autentifikacija je otkrila sigurnosni propust. Inženjer je zamolio AI da implementira radni tok. Izlaz je uključivao dozvole: write-all — što znači da token može pisati u spremište, pakete, sve. Inženjer je to primijetio i suzio je s dozvolama: { contents: read, packages: write }. Ovo je eliminisalo rizik da oteta zavisnost zamijeni cijelo spremište.

Slučaj 3 — Halucinatorna radnja. Jedan tim je pokrenuo upotrebu koje je predložila AI: actions/deploy-to-aws@v3 liniju; Nije bilo takve službene akcije, AI je izmislio ime. Cevovod je eksplodirao sa "akcija nije pronađena". Lekcija: Provjerite na Marketplace-u da svaka komponenta pozvana s koristi: stvarno postoji.

Četiri šablona za kopiranje

1) Osnovni CI tok rada:

Napišite CI tok rada za GitHub akcije. Projekat: [LANGUAGE/FRAMEWORK]. Trigger: push and pull zahtjev na glavnu granu. Koraci: instalirajte zavisnosti, pokrenite testove, pokrenite lint. NE Deploy.Runner ubuntu-latest. Nije potrebna tajna. Obilježite YAML.

2) Raspoređeni tok rada CD-a (siguran):

Napišite tok rada postavljanja za [PLATFORMA]. Trebao bi raditi samo na 'v*' tag. Cilj: [MEDIJI/OBLAK]. Pravila: - NIKADA ne pišite tajne u čistom tekstu, pozovite ih sa ${{ secrets.

3) Opišite postojeći cjevovod:

Opišite sljedeći [PLATFORMA] cjevovod red po red: šta radi svaki posao, kojim redoslijedom se izvodi, koju tajnu koristi i koje su njegove dvije najrizičnije tačke? Konačno, predložite 3 poboljšanja.Pipeline: [YAML CONTENT]

4) Ubrzati naftovod:

Sljedeći CI cjevovod radi sporo (trajanje: [X min]). Ispitajte korištenje keša, paralelne poslove i nepotrebne korake. Dajte 5 konkretnih, djelotvornih prijedloga za ubrzanje i zapišite procijenjeni uticaj svakog od njih. Cjevovod: [YAML]

Slaba prompt / Jaka prompt

Slabo: "Pisanje GitHub Actions toka posla."

Rezultat: nejasno je koji jezik, koji okidač, da li postoji implementacija; AI daje generičku instancu čvora, vjerovatno neće odgovarati vašem projektu i može tvrdo kodirati tajnu.

Jaka: "Napišite radni tok GitHub Actions. Python 3.12 projekat, pokrenite pytest + ruff u zahtjevu za povlačenje i glavnom push; BEZ implementacije; ubrzajte ovisnosti s pip kešom; nisu potrebne tajne. Izvezite YAML sa komentarima."

Razlika: drugi prompt daje jezik, okidač, opseg (bez implementacije), očekivane performanse i sigurnosno ograničenje. Izlaz radi direktno.

Uobičajene greške

  • Ugrađivanje tajne u YAML. Plaintext lozinka/token je najčešća CI ranjivost.
  • Previše široka dozvola. Dajte minimalnu potrebnu dozvolu umjesto pisanja svih.
  • Oslanjanje na nepostojeću akciju/šablon. Potvrdite upotrebu AI-a: linije na Marketplace-u.
  • Zbunjujuće Deploy sa CI. Test se može izvoditi pri svakom guranju, ali implementacija mora biti kontrolirana i odobrena.
  • Ne koristi keš memoriju. Instaliranje zavisnosti od nule pri svakom pokretanju usporava cevovod za nekoliko minuta.
  • Isprobavanje prvog toka posla direktno u glavnom spremištu. Prvo ga pokrenite u testnom spremištu.

Ukratko

CI/CD cjevovodi su automatizirane cijevi koje bezbedno prebacuju kod u prod i definisane su sa YAML-om. AI brzo proizvodi radne nacrte za GitHub Actions i GitLab CI — ali morate biti jasni u vezi platforme, jezika, pokretača i opsega implementacije. Postoje tri pravila u sigurnosti: pozvati tajne putem reference, dati minimalne privilegije, ne ispisivati ​​tajne u dnevniku. Vaša je odgovornost da provjerite da li svaka komponenta koristi:/include: zaista postoji i šta svaki korak radi.

Zadatak aplikacije

Odaberite jednostavan primjer projekta (čak i "zdravo svijet" na vašem jeziku može). Neka AI proizvede radni tok sa gornjim predloškom "Osnovni CI radni tok". Zatim: (1) napišite svojim riječima šta svaki korak čini; (2) provjeriti da nijedna tajna nije ugrađena i da su dozvole uske; (3) Ako je moguće, pustite ga u test tanku i promatrajte crveno-zeleno ponašanje.

kontrolna lista

  • [ ] Dodao sam platformu, jezik/okvir, okidač i opseg implementacije u svoj prompt.
  • [ ] Razumijem šta svaki posao i korak radi u generiranom YAML-u.
  • [ ] Nijedna tajna nije otvoreni tekst; sve ${{ secrets.X }} / CI varijabla.
  • [ ] Suzio sam dozvole na minimalno ovlaštenje.
  • [ ] Provjerio sam da sve pozvane akcije/šabloni stvarno postoje.
  • [ ] Napravio sam korak implementacije kontroliran uz odobrenje/zaštitu.