Vienetas 2 / 11

CI / CD vamzdžių projektavimas su dirbtiniu intelektu: „GitHub Actions“ ir „GitLab CI“

Pelnas:

  • Gebėjimas suprasti CI / CD koncepciją, dujotiekio anatomiją (trigerį, darbą, žingsnį, bėgiką, artefaktą) ir GitHub Actions bei GitLab CI skirtumus ir dirbtinis intelektas gamina vamzdynus su tinkamu kontekstu.
  • Galimybė patikrinti ir apsaugoti slaptas nuorodas, leidimus ir iškviestų komponentų buvimą dirbtinio intelekto sukurtame vamzdyne
  • Gebėjimas taikyti principus nerašyti paslapčių paprastu tekstu, suteikti minimalų leidimą ir išlaikyti dislokavimo valdymą atskiriant jį nuo CI

Šiuolaikinės programinės įrangos širdis yra automatizuotas vamzdynas, per kurį kodas palieka kūrėjo kompiuterį, kol jis saugiai pasiekia klientą. Šis vamzdis vadinamas CI/CD. CI (Continuous Integration) – tai automatinis kiekvieno kodo pakeitimo kompiliavimas ir testavimas; Jo tikslas yra sugauti klaidą dar prieš kūrėjui paliekant klaviatūrą. CD (Continuous Delivery/Deployment) yra automatinis išbandyto kodo paruošimas ar net išleidimas. CI / CD konfigūracijos failas yra konfigūracijos failas, kuris apibrėžia šiuos veiksmus eilės tvarka – paprastai parašytas YAML (žmogaus skaitomas konfigūracijos teksto formatas).

Rašyti šiuos YAML failus ranka yra nuobodu, sudėtinga ir dažnai pasitaiko klaidų; Jei įduba paslysta per vieną tarpą, visas dujotiekis nutrūksta. Čia atsiranda AI: esant tinkamam kontekstui, jis per kelias sekundes sukuria darbinį juodraštį. Tačiau jūsų darbas yra suprasti ir patikrinti, ką daro kiekvienas sugeneruotas veiksmas, nes tai yra vamzdis, per kurį jūsų kodas perduodamas gaminiui.

CI/CD dujotiekio anatomija

Kiekvienas dujotiekis susideda iš kelių pagrindinių sąvokų. Negalite valdyti AI išvesties nežinodami šių dalykų:

  • Trigeris: nuo ko paleidžiamas vamzdynas? Paprastai siuntimas į filialą, ištraukimo užklausa (sujungimo užklausa) arba tvarkaraštis.
  • Darbas: Loginis vienetas, kuris atlieka keletą žingsnių; pavyzdžiui, „testuoti“, „kurti“, „diegti“.
  • Žingsnis: viena komanda arba veiksmas darbe.
  • Vykdytojas: virtuali mašina arba konteineris, kuriame vykdomos užduotys.
  • Artefaktas: vienos užduoties sukurta ir vėlesnių užduočių naudojama išvestis (pavyzdžiui, sudarytas failas).
  • Paslaptis: Konfidenciali informacija, kurią „Pupeline“ naudoja, tačiau saugykloje neturėtų likti paprastu tekstu.

„GitHub Actions“ išlaiko šį apibrėžimą .github/workflows/*.yml failuose; Vienetas yra darbo eiga → darbas → žingsnių hierarchija. Kita vertus, GitLab CI naudoja etapo → užduoties struktūrą .gitlab-ci.yml faile. AI žino abi sintakses, bet jūs turite aiškiai pasakyti, kurios iš jų norite.

Patarimas: Prašydami dirbtinio intelekto dėl konvejerių, visada nurodykite: platformą („GitHub Actions“ arba „GitLab CI“), kalbą / sistemą (mazgas, .NET, Python…), aktyviklį ir ar jis bus įdiegtas. Šios keturios informacijos dalys padvigubina išvesties naudingumą.

Žingsnis po žingsnio: dujotiekio projektavimas naudojant AI

  1. Išsiaiškinkite tikslą. Panašiai kaip „vykdyti „push to main“ testus, sukurti vaizdą, bet įdiegti tik tada, kai įvedama žyma“.
  2. Leiskite pagaminti skeletą. Paklauskite AI dėl pagrindinės darbo eigos.
  3. Perskaitykite ir supraskite veiksmus. Patikrinkite, ką daro kiekviena paleidimo ir naudojimo eilutė.
  4. Patikrinkite slaptas nuorodas. Ar paslaptys vadinamos ${{ secrets.NAME }}, ar jos yra įterptos į kodą?
  5. Išbandykite vietoje / CI. Paleiskite jį mažoje bandymų saugykloje, žr. raudonai žalią (nepavyko patvirtinti) elgseną.
  6. Plėsti palaipsniui. Pirmiausia tiesiog pridėkite CI (bandymas), tada sukurkite, paskutinį kartą pridėkite diegimą.

Saugumas: slapta ir leidimas ruošiamas

CI/CD yra viena iš vietų, kur paslaptys nuteka labiausiai. Trys auksinės taisyklės:

  1. Niekada nerašykite paslapčių paprastu tekstu YAML. Naudokite platformos slaptą saugyklą („GitHub Secrets“, „GitLab CI/CD Variables“) ir iškvieskite ją naudodami ${{ secrets.X }}.
  2. Mažiausia privilegija. Žetonas, kurį suteikiate „Pupeline“, turės tik tiek įgaliojimų, kiek reikia. Susiaurinkite tai naudodami leidimus: blokuoti „GitHub Actions“.
  3. Nespauskite paslapties žurnale. Tokios linijos kaip echo $TOKEN atskleidžia paslaptį žurnale. Platformos maskuoja, bet taip pat būkite atsargūs.
Įspėjimas: patogumo sumetimais AI kartais įdeda įterptąsias reikšmes, pvz., slaptažodį: 123456 arba pernelyg plačius leidimus: rašyti viską pavyzdiniuose konvejeriuose. Visada taisykite: pakeiskite paslaptį į nuorodą, sutraukite leidimą.

palyginimo diagrama

koncepcija

„GitHub“ veiksmai

GitLab CI

Konfigūracijos failas

.github/workflows/*.yml

.gitlab-ci.yml

pastato vienetas

darbo eiga → darbas → žingsnis

etapas → darbas

paleidiklis

dešimt:

taisyklės: / tik:

Iškviesti paslaptį

${{ paslaptys.NAME }}

$NAME (CI / CD kintamieji)

Paruoštas komponentas

naudoja: action@v4

įtraukti: /template

bėgikas

bėgimas:

žymos:

trys mini dėklai

1 atvejis – Sutrumpintas iki 6 valandų ir 40 minučių. Komanda norėjo automatizuoti savo rankinio testavimo, kūrimo ir diegimo procesą, tačiau niekas nebuvo susipažinęs su YAML. Jie apibūdino YZ kaip „Node.js projektas, GitHub Actions, npm test ir npm build in push to main, dislokuoti tik v* žymoje“. AI sukūrė darbinį 40 eilučių skeletą; Komanda patikrino kiekvieną žingsnį ir pradėjo transliuoti po 40 minučių. Jei būtų rašę ranka, tai būtų buvęs vienos dienos darbas.

2 atvejis – autentifikavimas užfiksavo saugos pažeidžiamumą. Inžinierius paprašė AI įdiegti darbo eigą. Išvestis apėmė leidimus: rašyti viską – tai reiškia, kad prieigos raktas gali įrašyti į saugyklą, paketus ir viską. Inžinierius tai pastebėjo ir susiaurino su leidimais: { turinys: skaityti, paketai: rašyti }. Tai pašalino riziką, kad užgrobta priklausomybė pakeis visą saugyklą.

3 atvejis – haliucinacinis veiksmas. Viena komanda naudojo AI siūlomus naudojimo būdus: eilutę action/deploy-to-aws@v3; Tokių oficialių veiksmų nebuvo, AI sugalvojo pavadinimą. Dujotiekis sprogo pranešus „veiksmas nerastas“. Pamoka: Marketplace patikrinkite, ar kiekvienas iškviestas komponentas su uses: iš tikrųjų egzistuoja.

Keturi kopijuojami šablonai

1) Pagrindinė CI darbo eiga:

Parašykite „GitHub“ veiksmų CI darbo eigą. Projektas: [LANGUAGE/FRAMEWORK]. Trigeris: stumti ir traukti užklausą į pagrindinę šaką. Veiksmai: įdiekite priklausomybes, paleiskite testus, paleiskite lint. NO Deploy.Runner ubuntu-latest. Paslapties nereikia. Komentuoti YAML.

2) Įdiegta kompaktinio disko darbo eiga (saugi):

Parašykite [PLATFORM] diegimo darbo eigą. Jis turėtų veikti tik su „v*“ žyma. Tikslas: [MEDIA / CLOUD]. Taisyklės: - NIEKADA nerašykite paslapčių paprastu tekstu, vadinkite jas su ${{ secrets.

3) Apibūdinkite esamą dujotiekį:

Eilutę po eilutės apibūdinkite šį [PLATFORM] dujotiekį: ką kiekvienas darbas atlieka, kokia tvarka jis vykdomas, kokią paslaptį naudoja ir kokie yra du rizikingiausi jo taškai? Galiausiai pasiūlykite 3 patobulinimus.Siūlymas: [YAML CONTENT]

4) Paspartinkite vamzdyną:

Šis CI dujotiekis veikia lėtai (trukmė: [X min.]). Patikrinkite talpyklos naudojimą, lygiagrečias užduotis ir nereikalingus veiksmus. Pateikite 5 konkrečius, įgyvendinamus pagreičio pasiūlymus ir užrašykite numatomą kiekvieno iš jų poveikį. Dujotiekis: [YAML]

Silpnas raginimas / Stiprus raginimas

Silpna: „Rašyti GitHub Actions darbo eigą“.

Rezultatas: neaišku, kokia kalba, kuris paleidiklis, ar yra diegimas; AI pateikia bendrą mazgo egzempliorių, tikriausiai netiks jūsų projektui ir gali užkoduoti paslaptį.

Stiprus: "Rašykite GitHub Actions darbo eigą. Python 3.12 projektas, paleiskite pytest + Ruff traukimo užklausoje ir pagrindiniame stūmime; NĖRA diegimo; paspartinkite priklausomybes naudodami pip talpyklą; nereikia jokių paslapčių. Eksportuokite YAML su komentarais."

Skirtumas: antrasis raginimas nurodo kalbą, aktyviklį, taikymo sritį (be diegimo), našumo lūkesčius ir saugos apribojimus. Išėjimas veikia tiesiogiai.

Dažnos klaidos

  • Paslapties įterpimas į YAML. Paprasto teksto slaptažodis / prieigos raktas yra labiausiai paplitęs CI pažeidžiamumas.
  • Per platus leidimas. Suteikite minimalų reikalingą leidimą, o ne viską rašydami.
  • Remiamasi neegzistuojančiu veiksmu/šablonu. Patikrinkite AI sukurtą naudojimą: eilutes Marketplace.
  • Paini diegimas su CI. Bandymas gali būti atliktas kiekvieną kartą paspaudus, tačiau diegimas turi būti kontroliuojamas ir patvirtintas.
  • Nenaudojant talpyklos. Priklausomybių įdiegimas nuo nulio kiekvieną kartą sulėtėja dujotiekis minutėmis.
  • Pirmosios darbo eigos išbandymas tiesiogiai pagrindinėje saugykloje. Pirmiausia paleiskite jį bandymų saugykloje.

Apibendrinant

CI / CD vamzdynai yra automatizuoti vamzdžiai, kurie saugiai perkelia kodą į gaminį ir yra apibrėžti naudojant YAML. AI greitai sukuria veikiančius „GitHub Actions“ ir „GitLab CI“ planus, tačiau turite aiškiai žinoti platformą, kalbą, aktyviklį ir diegimo apimtį. Yra trys saugumo taisyklės: iškviesti paslaptis pagal nuorodą, suteikti minimalias teises, nespausdinti paslapčių žurnale. Jūs privalote patikrinti, ar kiekvienas uses:/include: komponentas iš tikrųjų egzistuoja ir ką daro kiekvienas veiksmas.

Taikymo užduotis

Pasirinkite paprastą projekto pavyzdį (tiks net „labas pasaulis“ jūsų kalba). Leiskite dirbtiniam intelektui sukurti darbo eigą naudodami anksčiau pateiktą šabloną „Basic CI workflow“. Tada: (1) savais žodžiais parašykite, ką daro kiekvienas žingsnis; (2) patikrinkite, ar nėra įterptos jokios paslaptys, o leidimai yra siauri; (3) Jei įmanoma, paleiskite jį bandymo bake ir stebėkite raudonai žalios spalvos veikimą.

kontrolinis sąrašas

  • [ ] Prie raginimo pridėjau platformą, kalbą / sistemą, aktyviklį ir diegimo sritį.
  • [ ] Suprantu, ką kiekvienas darbas ir veiksmas atlieka sugeneruotame YAML.
  • [ ] Jokia paslaptis nėra paprastas tekstas; visi ${{ secrets.X }} / CI kintamasis.
  • [ ] Susiaurinau leidimus iki minimalių įgaliojimų.
  • [ ] Patikrinau, kad visi vadinami veiksmai / šablonai iš tikrųjų egzistuoja.
  • [ ] Diegimo etapą kontroliuojau patvirtinimu / apsauga.