Jedinica 2 / 11

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

Dobici:

  • Sposobnost razumijevanja CI/CD koncepta, anatomije cjevovoda (okidač, posao, korak, trkač, artefakt) i razlika između GitHub Actions i GitLab CI te omogućiti umjetnoj inteligenciji da proizvodi cjevovode s pravim kontekstom
  • Sposobnost provjere i osiguranja tajnih referenci, dopuštenja i postojanja pozvanih komponenti u cjevovodu koje proizvodi umjetna inteligencija
  • Sposobnost primjene načela nepisanja tajni u običnom tekstu, davanja minimalne autorizacije i držanja implementacije pod kontrolom odvajanjem od CI-ja

Srce modernog softvera je automatizirani cjevovod kroz koji kod napušta računalo razvojnog programera dok sigurno ne dođe do korisnika. Ova cijev se zove CI/CD. CI (Continuous Integration) je automatska kompilacija i testiranje svake promjene koda; Njegova je svrha uhvatiti bug prije nego što programer uopće napusti tipkovnicu. CD (Continuous Delivery/Deployment) je automatska priprema ili čak izdavanje testiranog koda. CI/CD cjevovod konfiguracijska je datoteka koja definira ove korake redoslijedom — obično napisana u YAML-u (ljudski čitljiv konfiguracijski tekstualni format).

Ručno pisanje ovih YAML datoteka je zamorno, opširno i podložno pogreškama; Ako udubljenje sklizne za jedno mjesto, pukne cijeli cjevovod. Ovdje stupa AI: s pravim kontekstom proizvodi radni nacrt u nekoliko sekundi. Ali vaš je posao razumjeti i provjeriti što radi svaki generirani korak — jer ovo je kanal koji prenosi vaš kod u proizvod.

Anatomija CI/CD cjevovoda

Svaki cjevovod se sastoji od nekoliko osnovnih pojmova. Ne možete kontrolirati AI izlaz ako ne znate ovo:

  • Okidač: Što pokreće cjevovod? Obično push to granu, zahtjev za povlačenjem (zahtjev za spajanje) ili raspored.
  • Posao: Logička jedinica koja izvršava niz koraka; na primjer "test", "build", "deploy".
  • Korak: Jedna naredba ili radnja unutar posla.
  • Runner: Virtualni stroj ili spremnik na kojem se pokreću poslovi.
  • Artefakt: Izlaz proizveden od jednog posla i korišten od strane sljedećih poslova (na primjer, kompajlirana datoteka).
  • Tajna: Povjerljive informacije koje Pipeline koristi, ali ne bi trebale ostati u obliku običnog teksta u repozitoriju.

GitHub Actions čuva ovu definiciju u .github/workflows/*.yml datotekama; Jedinica je tijek rada → posao → hijerarhija koraka. GitLab CI, s druge strane, koristi strukturu stage → posao u datoteci .gitlab-ci.yml. AI poznaje obje sintakse, ali morate izričito 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 hoće li biti implementiran. Ove četiri informacije udvostručuju korisnost rezultata.

Korak po korak: Dizajniranje cjevovoda pomoću umjetne inteligencije

  1. Pojasnite cilj. Kao "pokreni testove na push to mainu, izgradi sliku, ali implementiraj samo kada se oznaka izbaci".
  2. Neka se izradi kostur. Zatražite AI za osnovni tijek rada.
  3. Pročitajte i razumite korake. Provjerite što svaki redak za pokretanje i korištenje radi.
  4. Provjerite tajne reference. Pozivaju li se tajne s ${{ secrets.NAME }} ili su ugrađene u kod?
  5. Pokušajte lokalno/CI. Pokrenite ga na malom testnom repozitoriju, pogledajte crveno-zeleno (neuspješan prolaz) ponašanje.
  6. Postupno se širite. Prvo samo dodajte CI (test), zatim izgradite, na kraju dodajte implementaciju.

Sigurnost: tajna i dozvola u cjevovodu

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

  1. Nikada nemojte pisati tajne u običnom tekstu u YAML-u. Upotrijebite tajno spremište platforme (GitHub Secrets, GitLab CI/CD varijable) i pozovite ga s ${{ secrets.X }}.
  2. Najmanja privilegija. Token koji date Pipelineu imat će onoliko ovlaštenja koliko je potrebno. Suzite to dopuštenjima: blokiraj u GitHub radnjama.
  3. Ne pritiskajte tajnu na zapisniku. Redovi poput echo $TOKEN otkrivaju tajnu u zapisniku. Platforme maska, ali budite i oprezni.
Oprez: radi praktičnosti, AI ponekad stavlja ugrađene vrijednosti poput lozinke: 123456 ili preširokih dopuštenja: pisanje-sve u uzorke cjevovoda. Uvijek popravi ovo: promijeni tajnu u referencu, suzi dozvolu.

usporedna tablica

koncept

GitHub radnje

GitLab CI

Konfiguracijska datoteka

.github/workflows/*.yml

.gitlab-ci.yml

građevna jedinica

tijek rada → posao → korak

pozornica → posao

okidač

deset:

pravila: / samo:

Prizovite tajnu

${{ secrets.NAME }}

$NAME (CI/CD varijable)

Spremna komponenta

koristi: action@v4

uključuju: /template

trkač

trčanje:

oznake:

tri mini kućišta

Slučaj 1 — Smanjeno na 6 sati i 40 minuta. Tim je želio automatizirati svoj ručni proces testiranja, izrade i postavljanja, ali nitko nije bio upoznat s YAML-om. Opisali su YZ kao "Node.js projekt, GitHub radnje, npm test i npm build in push to main, implementacija samo u v* oznaci". AI je proizveo radni kostur od 40 linija; Tim je provjerio svaki korak i pustio uživo za 40 minuta. Da su to rukom napisali, bio bi to dan posla.

Slučaj 2 — Autentifikacija je uhvatila sigurnosnu ranjivost. Inženjer je zatražio od umjetne inteligencije da implementira tijek rada. Izlaz je uključivao dopuštenja: pisanje-sve — što znači da token može pisati u repozitorij, pakete, sve. Inženjer je to primijetio i suzio ga dopuštenjima: { contents: read, packages: write }. Ovo je eliminiralo rizik da preuzeta ovisnost zamijeni cijelo spremište.

Slučaj 3 — halucinantno djelovanje. Jedan tim pokrenuo je upotrebu koju je predložio AI: akcije/deploy-to-aws@v3 redak; Nije bilo takve službene akcije, AI je izmislio ime. Cjevovod je eksplodirao s "radnja nije pronađena". Lekcija: Provjerite na Marketplaceu da svaka komponenta pozvana sa uses: stvarno postoji.

Četiri predloška za kopiranje

1) Osnovni CI tijek rada:

Napišite CI tijek rada za GitHub Actions. Projekt: [JEZIK/OKVIR]. Okidač: push and pull zahtjev glavnoj grani. Koraci: instalirajte ovisnosti, pokrenite testove, pokrenite lint. NE Deploy.Runner ubuntu-latest. Tajna nije potrebna. Označite YAML.

2) Ugrađeni tijek rada CD-a (siguran):

Napišite tijek rada implementacije za [PLATFORMU]. Trebalo bi raditi samo na oznaci 'v*'. Cilj: [MEDIJI/OBLAK]. Pravila: - NIKADA ne pišite tajne u običnom tekstu, nazovite ih s ${{ secrets.

3) Opišite postojeći cjevovod:

Opišite sljedeći [PLATFORMA] cjevovod red po red: što svaki posao radi, kojim redoslijedom se izvodi, koju tajnu koristi i koje su njegove dvije najrizičnije točke? Na kraju, predložite 3 poboljšanja. Cjevovod: [YAML SADRŽAJ]

4) Ubrzajte cjevovod:

Sljedeći CI cjevovod radi sporo (trajanje: [X min]). Ispitajte upotrebu predmemorije, paralelne poslove i nepotrebne korake. Dajte 5 konkretnih, djelotvornih prijedloga za ubrzanje i zapišite procijenjeni učinak svakog od njih. Cjevovod: [YAML]

Slab upit / Jak upit

Slabo: "Napišite tijek rada GitHub Actions."

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

Snažno: "Napišite radni tijek GitHub Actions. Python 3.12 projekt, pokrenite pytest + ruff u zahtjevu za povlačenjem i glavnom guranju; NEMA implementacije; ubrzajte ovisnosti s pip cacheom; nisu potrebne tajne. Izvezite YAML s komentarima."

Razlika: drugi prompt daje jezik, okidač, opseg (bez implementacije), očekivanu izvedbu i sigurnosno ograničenje. Izlaz radi izravno.

Uobičajene greške

  • Ugradnja tajne u YAML. Lozinka/token za čisti tekst najčešća je ranjivost CI-ja.
  • Preširoka dozvola. Dajte minimalno potrebno dopuštenje umjesto pisanja svega.
  • Oslanjanje na nepostojeću akciju/predložak. Provjerite AI-made uses: linije na Marketplaceu.
  • Zbunjujući Deploy i CI. Test se može izvoditi pri svakom pritisku, ali postavljanje mora biti kontrolirano i odobreno.
  • Ne koristi predmemoriju. Instaliranje ovisnosti od nule pri svakom pokretanju usporava cjevovod za nekoliko minuta.
  • Isprobavanje prvog tijeka rada izravno u glavnom spremištu. Najprije ga pokrenite na testnom repozitoriju.

Ukratko

CI/CD cjevovodi su automatizirani kanali koji sigurno premještaju kod u proizvod i definirani su pomoću YAML-a. AI brzo proizvodi radne nacrte za GitHub Actions i GitLab CI — ali morate biti jasni oko platforme, jezika, okidača i opsega implementacije. Postoje tri sigurnosna pravila: pozvati tajne referencom, dati minimalne privilegije, ne ispisivati ​​tajne u dnevniku. Vaša je odgovornost provjeriti postoji li svaka komponenta uses:/include: i što svaki korak radi.

Zadatak aplikacije

Odaberite jednostavan ogledni projekt (čak će poslužiti i "zdravo svijete" na vašem jeziku). Neka umjetna inteligencija proizvede tijek rada pomoću gornjeg predloška "Osnovni CI tijek rada". Zatim: (1) napišite svojim riječima što svaki korak čini; (2) provjeriti da nema ugrađenih tajni i da su dopuštenja uska; (3) Ako je moguće, pokrenite ga u ispitnom spremniku i promatrajte ponašanje crveno-zelene boje.

popis za provjeru

  • [ ] U upit sam dodao platformu, jezik/okvir, okidač i opseg implementacije.
  • [ ] Razumijem što svaki posao i korak radi u generiranom YAML-u.
  • [ ] Nijedna tajna nije otvoreni tekst; sve ${{ secrets.X }} / CI varijabla.
  • [ ] Suzio sam dopuštenja na minimalne ovlasti.
  • [ ] Potvrdio sam da sve pozvane akcije/predlošci stvarno postoje.
  • [ ] Napravio sam korak implementacije kontroliran odobrenjem/zaštitom.