Üksus 2 / 11

Tehisintellektiga CI/CD torujuhtmete projekteerimine: GitHub Actions ja GitLab CI

Kasu:

  • Võimalus mõista CI/CD kontseptsiooni, torujuhtme anatoomiat (päästik, töö, samm, jooksja, artefakt) ja GitHub Actionsi ja GitLab CI erinevusi ning lasta tehisintellektil toota õiges kontekstis torujuhtmeid
  • Võimalus kontrollida ja kaitsta tehisintellekti toodetud salajaste viidete, lubade ja kutsutud komponentide olemasolu torustikus
  • Võimalus rakendada põhimõtteid mitte kirjutada saladusi lihttekstina, anda minimaalsed volitused ja hoida juurutamist kontrolli all, eraldades selle CI-st

Kaasaegse tarkvara südameks on automatiseeritud torujuhe, mille kaudu kood lahkub arendaja arvutist, kuni see turvaliselt kliendini jõuab. Seda toru nimetatakse CI/CD-ks. CI (Continuous Integration) on iga koodimuudatuse automaatne kompileerimine ja testimine; Selle eesmärk on tabada viga enne, kui arendaja isegi klaviatuurilt lahkub. CD (Continuous Delivery/Deployment) on testitud koodi automaatne ettevalmistamine või isegi vabastamine. CI/CD konveier on konfiguratsioonifail, mis määratleb need sammud järjekorras – tavaliselt kirjutatud YAML-is (inimloetav konfiguratsiooniteksti vorming).

Nende YAML-failide käsitsi kirjutamine on tüütu, paljusõnaline ja vigadetundlik; Kui taane libiseb ühe tühiku võrra, katkeb kogu torujuhe. Siin tulebki appi AI: õiges kontekstis loob see töötava mustandi sekunditega. Kuid teie ülesanne on mõista ja kontrollida, mida iga loodud samm teeb – sest see on toru, mis kannab teie koodi tootesse.

CI/CD torujuhtme anatoomia

Iga torujuhe koosneb mitmest põhikontseptsioonist. Te ei saa AI väljundit juhtida, kui ei tea järgmist:

  • Päästiku: mis käivitab torujuhtme? Tavaliselt tõuge harule, tõmbamistaotlus (ühendamistaotlus) või ajakava.
  • Töö: loogiline üksus, mis täidab samme; näiteks "test", "build", "deploy".
  • Samm: üks käsk või toiming töö sees.
  • Runner: virtuaalne masin või konteiner, milles tööd käitatakse.
  • Artefakt: ühe töö toodetud ja järgnevate tööde kasutatav väljund (näiteks kompileeritud fail).
  • Salajane: konfidentsiaalne teave, mida Pipeline kasutab, kuid ei tohiks hoidlasse lihttekstina jääda.

GitHub Actions säilitab selle määratluse .github/workflows/*.yml-failides; Üksus on töövoog → töö → sammude hierarhia. GitLab CI aga kasutab .gitlab-ci.yml failis etappi → tööstruktuuri. AI teab mõlemat süntaksit, kuid peate selgelt ütlema, millist neist soovite.

Näpunäide. Kui küsite tehisintellekti torujuhtmeid, määrake alati: platvorm (GitHubi toimingud või GitLab CI), keel/raamistik (Sõlm, .NET, Python…), päästik ja kas see juurutatakse. Need neli teavet kahekordistavad väljundi kasulikkust.

Samm-sammult: AI-ga torujuhtme kujundamine

  1. Selgitage eesmärk. Nagu "käivitage tõukepõhisele põhivõrgule testid, koostage pilt, kuid juurutage ainult siis, kui silt visatakse".
  2. Laske skelett toota. Küsige AI-lt põhitöövoogu.
  3. Lugege läbi ja mõistke samme. Kontrollige, mida iga käitamise ja kasutamise rida teeb.
  4. Kontrollige salajasi viiteid. Kas saladusi kutsutakse koodiga ${{ secrets.NAME }} või on need koodi sisse manustatud?
  5. Proovige seda kohapeal / CI. Käivitage see väikeses testihoidlas, vaadake puna-rohelist (tõrke-läbilaskmise) käitumist.
  6. Laiendage järk-järgult. Esmalt lihtsalt lisage CI (test), seejärel ehitage, viimati lisage juurutamine.

Turvalisus: salajane ja luba ettevalmistamisel

CI/CD on üks kohti, kust saladused kõige rohkem lekivad. Kolm kuldset reeglit:

  1. Ärge kunagi kirjutage YAML-is saladusi lihttekstina. Kasutage platvormi salajast hoidlat (GitHubi saladused, GitLabi CI/CD muutujad) ja kutsuge see koodiga ${{ secrets.X }}.
  2. Vähim privileeg. Pipeline'ile antud märgil on ainult nii palju volitusi, kui vaja. Kitsendage seda lubadega: blokeerige GitHub Actionsis.
  3. Ärge vajutage logile saladust. Jooned nagu kaja $TOKEN paljastavad logi saladuse. Platvormid maskeerivad, kuid olge ka ettevaatlik.
Ettevaatust. Mugavuse huvides paneb AI mõnikord manustatud väärtused, nagu parool: 123456 või liiga laiad load: kirjuta kõik näidiskonveieritesse. Parandage see alati: muutke salajane viide, ahendage luba.

võrdlustabel

kontseptsioon

GitHubi toimingud

GitLab CI

Konfiguratsioonifail

.github/workflows/*.yml

.gitlab-ci.yml

hooneüksus

töövoog → töö → samm

etapp → töö

päästik

kümme:

reeglid: / ainult:

Kutsu saladus välja

${{ saladused.NAME }}

$NAME (CI/CD muutujad)

Valmis komponent

kasutab: action@v4

sisaldab: /template

jooksja

pealejooks:

sildid:

kolm minikarpi

Juhtum 1 – lühendatud 6 tunnini ja 40 minutini. Meeskond soovis automatiseerida oma käsitsi testimise, koostamise ja juurutamise protsessi, kuid keegi polnud YAML-iga tuttav. Nad kirjeldasid YZ-d kui "Node.js projekti, GitHub Actions, npm test ja npm build in push to main, juurutatakse ainult v* sildis". AI valmistas töötava 40 joonest koosneva skeleti; Meeskond kontrollis iga sammu ja alustas otseülekannet 40 minuti pärast. Kui nad oleksid selle käsitsi kirjutanud, oleks see olnud päevane töö.

Juhtum 2 – autentimine tuvastas turvaauku. Insener palus tehisintellektil töövoogu juurutada. Väljund sisaldas õigusi: kirjuta kõik – see tähendab, et luba võis kirjutada hoidlasse, pakettidesse, kõigesse. Insener märkas seda ja piiras seda lubadega: { sisu: loe, paketid: kirjuta }. See välistas ohu, et kaaperdatud sõltuvus asendab kogu hoidla.

Juhtum 3 – hallutsinatsioonid. Üks meeskond kasutas tehisintellekti soovitatud kasutusviise: action/deploy-to-aws@v3 rida; Sellist ametlikku tegevust ei toimunud, AI mõtles nime välja. Torujuhe plahvatas teatega "Toimingut ei leitud". Õppetund: Kontrollige Marketplace'is, et iga komponent, mida kutsutakse koos uses:'iga, on tegelikult olemas.

Neli kopeeritavat malli

1) CI põhitöövoog:

Kirjutage GitHubi toimingute jaoks CI töövoog. Projekt: [LANGUAGE/FRAMEWORK]. Päästiku: lükake ja tõmba taotlus põhiharule. Sammud: installige sõltuvused, käivitage testid, käivitage lint. EI Deploy.Runner ubuntu-latest. Saladust pole vaja. Märkige YAML.

2) Juurutatud CD töövoog (turvaline):

Kirjutage [PLATFORM] juurutamise töövoog. See peaks töötama ainult sildiga „v*”. Sihtmärk: [MEDIA/CLOUD]. Reeglid: - ÄRGE KUNAGI kirjutage saladusi lihttekstina, helistage neile ${{ saladustega.

3) Kirjeldage olemasolevat torujuhet:

Kirjeldage järgmist [PLATFORM] konveieri ridade kaupa: mida iga töö teeb, mis järjekorras see töötab, millist saladust see kasutab ja millised on selle kaks kõige riskantsemat punkti? Lõpuks soovitage 3 täiustust. Torustik: [YAML CONTENT]

4) Torujuhtme kiirendamine:

Järgmine CI-konveier töötab aeglaselt (kestus: [X min]). Uurige vahemälu kasutamist, paralleelseid töid ja mittevajalikke samme. Andke 5 konkreetset ja rakendatavat kiirendussoovitust ja kirjutage üles igaühe hinnanguline mõju. Torujuhe: [YAML]

Nõrk viip / Tugev viip

Nõrk: "Kirjutage GitHubi toimingute töövoogu."

Tulemus: on ebaselge, mis keeles, mis käivitab, kas kasutuselevõtt on olemas; AI annab üldise sõlme eksemplari, tõenäoliselt ei sobi teie projektiga ja suudab saladuse kõvasti kodeerida.

Tugev: "Kirjutage GitHubi toimingute töövoogu. Python 3.12 projekt, käivitage pytest + ruff tõmbetaotluses ja põhitõukes; EI juuruta; kiirendage sõltuvusi pip-vahemälu abil; pole vaja saladusi. Eksportige YAML koos kommentaaridega."

Erinevus: teine ​​viip annab keele, päästiku, ulatuse (juurutamine puudub), jõudluse ootused ja turbepiirangud. Väljund töötab otse.

Levinud vead

  • Saladuse manustamine YAML-i. Lihtteksti parool/märk on kõige levinum CI haavatavus.
  • Liiga lai luba. Andke kõik kirjutamise asemel nõutav minimaalne luba.
  • Olematule tegevusele/mallile tuginemine. Kontrollige tehisintellekti poolt tehtud kasutusi: read Marketplace'is.
  • Segane juurutamine CI-ga. Testi saab läbi viia iga tõuke korral, kuid kasutuselevõttu peab kontrollima ja heaks kiitma.
  • Ei kasuta vahemälu. Sõltuvuste installimine nullist igal käivitamisel aeglustab torujuhtme tööd minutite võrra.
  • Esimese töövoo proovimine otse põhihoidlas. Käivitage see esmalt testihoidlas.

Kokkuvõttes

CI/CD torujuhtmed on automatiseeritud torud, mis liigutavad koodi ohutult tootesse ja on määratletud YAML-iga. AI koostab kiiresti GitHub Actionsi ja GitLab CI tööplaanid, kuid teil peab olema selge platvorm, keel, päästik ja juurutamise ulatus. Turvalisuses on kolm reeglit: helistage viitega saladustele, andke minimaalsed õigused, ärge printige logisse saladusi. Teie kohustus on kontrollida, kas iga uses:/include: komponent on tegelikult olemas ja mida iga samm teeb.

Rakenduse ülesanne

Valige lihtne näidisprojekt (isegi "tere maailm" teie keeles). Laske tehisintellektil toota töövoog ülaltoodud malliga „Basic CI töövoog”. Seejärel: (1) kirjuta oma sõnadega, mida iga samm teeb; (2) veenduge, et saladusi pole manustatud ja õigused on kitsad; (3) Kui võimalik, käivitage see katsepaagis ja jälgige punakasrohelist käitumist.

kontrollnimekiri

  • [ ] Lisasin oma viibale platvormi, keele/raamistiku, päästiku ja juurutamise ulatuse.
  • [ ] Ma saan aru, mida iga töö ja samm genereeritud YAML-is teeb.
  • [ ] Ükski saladus pole tavaline tekst; kõik ${{ secrets.X }} / CI muutuja.
  • [ ] Vähendasin õigusi minimaalse volituseni.
  • [ ] Kontrollisin, et kõik kutsutud toimingud/mallid on tegelikult olemas.
  • [ ] Tegin juurutamisetapi kontrollitavaks heakskiiduga/kaitsega.