Unità 2 / 11

Iddisinjar ta' Pipelines CI/CD b'Intelliġenza Artifiċjali: Azzjonijiet GitHub u GitLab CI

Qligħ:

  • Kapaċità li tifhem il-kunċett CI/CD, l-anatomija tal-pipeline (trigger, job, step, runner, artifact) u d-differenzi bejn GitHub Actions u GitLab CI u li l-intelliġenza artifiċjali tipproduċi pipelines bil-kuntest it-tajjeb
  • Kapaċità li tiċċekkja u tiżgura referenzi sigrieti, permessi u l-eżistenza ta 'komponenti msejħa fil-pipeline prodotti minn intelliġenza artifiċjali
  • Kapaċità li tapplika l-prinċipji li ma tiktebx sigrieti f'test sempliċi, li tingħata awtorizzazzjoni minima, u li żżomm l-iskjerament ikkontrollat billi tisseparah mis-CI

Il-qalba tas-softwer modern huwa l-pipeline awtomatizzat li permezz tiegħu l-kodiċi jħalli l-kompjuter tal-iżviluppatur sakemm jilħaq il-klijent mingħajr periklu. Dan il-pajp jissejjaħ CI/CD. CI (Integrazzjoni Kontinwa) hija l-kumpilazzjoni u l-ittestjar awtomatiku ta 'kull bidla fil-kodiċi; L-iskop tiegħu huwa li jaqbad bug qabel ma l-iżviluppatur saħansitra jħalli t-tastiera. CD (Kunsinna/Deployment Kontinwu) hija l-preparazzjoni awtomatika jew saħansitra rilaxx tal-kodiċi ttestjat. Pipeline CI/CD huwa fajl ta' konfigurazzjoni li jiddefinixxi dawn il-passi fl-ordni — ġeneralment miktub f'YAML (format ta' test ta' konfigurazzjoni li jinqara mill-bniedem).

Il-kitba ta 'dawn il-fajls YAML bl-idejn hija tedious, verbose, u suxxettibbli għall-iżbalji; Jekk l-indentazzjoni tiżloq bi spazju wieħed, il-pipeline kollu jinqasam. Dan huwa fejn tidħol l-AI: bil-kuntest it-tajjeb, tipproduċi abbozz ta' ħidma f'sekondi. Iżda huwa xogħol tiegħek li tifhem u tivverifika x'jagħmel kull pass iġġenerat - għaliex dan huwa l-pajp li jġorr il-kodiċi tiegħek biex jipproduċi.

Anatomia tal-pipeline CI/CD

Kull pipeline jikkonsisti f'diversi kunċetti bażiċi. Ma tistax tikkontrolla l-output AI mingħajr ma tkun taf dawn:

  • Trigger: X'jibda l-Pipeline? Normalment push għal fergħa, talba ta 'ġibda (talba għall-għaqda), jew skeda.
  • Xogħol: Unità loġika li tesegwixxi serje ta 'passi; pereżempju "test", "build", "deploy".
  • Pass: Kmand jew azzjoni waħda fi ħdan xogħol.
  • Runner: Il-magna jew il-kontenitur virtwali li fuqhom jaħdmu l-impjiegi.
  • Artifact: L-output prodott minn xogħol wieħed u użat minn xogħlijiet sussegwenti (per eżempju, fajl ikkumpilat).
  • Sigriet: Informazzjoni kunfidenzjali li Pipeline tuża iżda m'għandhiex tibqa' f'test sempliċi fir-repożitorju.

GitHub Actions iżomm din id-definizzjoni f'fajls .github/workflows/*.yml; L-unità hija workflow → job → step ġerarkija. GitLab CI, min-naħa l-oħra, juża l-istadju → struttura tax-xogħol fil-fajl .gitlab-ci.yml. L-AI taf iż-żewġ sintassi, iżda trid tgħid espliċitament liema waħda trid.

Tip: Meta titlob lill-AI għal pipelines, dejjem speċifika: pjattaforma (Azzjonijiet GitHub jew GitLab CI), lingwa/qafas (Node, .NET, Python...), trigger, u jekk hux se jiġi skjerat. Dawn l-erba 'biċċiet ta' informazzjoni jirdoppjaw l-utilità tal-output.

Pass pass: Iddisinjar ta 'pipeline bl-AI

  1. Iċċara l-għan. Bħal "run testijiet fuq push to main, build image, iżda skjera biss meta t-tikketta tintefa'".
  2. Ikollhom l-iskeletru prodott. Staqsi lill-AI għall-fluss tax-xogħol bażiku.
  3. Aqra u tifhem il-passi. Ivverifika x'tagħmel kull run u użi linja.
  4. Iċċekkja r-referenzi Sigrieti. Is-sigrieti jissejħu b'${{ secrets.NAME }} jew huma inkorporati fil-kodiċi?
  5. Ipprova lokalment/CI. Mexxiha fuq repożitorju tat-test żgħir, ara l-imġieba aħmar-aħdar (fail-pass).
  6. Jespandu gradwalment. L-ewwel żid biss CI (test), imbagħad ibni, l-aħħar żid iskjera.

Sigurtà: sigriet u permess fil-pipeline

CI/CD huwa wieħed mill-postijiet fejn is-sigrieti jnixxu l-aktar. Tliet regoli tad-deheb:

  1. Qatt ma tikteb sigrieti f'test sempliċi f'YAML. Uża r-repożitorju sigriet tal-pjattaforma (GitHub Secrets, GitLab CI/CD Variables) u sejjaħlu b'${{ secrets.X }}.
  2. L-inqas privileġġ. It-token li tagħti lil Pipeline se jkollu biss awtorità kemm meħtieġ. Dejjaq dan bil-permessi: imblokka fl-Azzjonijiet GitHub.
  3. Tagħfasx sigriet fuq il-ġurnal. Linji bħal echo $TOKEN jiżvelaw is-sigriet fil-ġurnal. Il-pjattaformi jaħbu, imma oqgħod attent ukoll.
Attenzjoni: Għall-konvenjenza, l-AI kultant tpoġġi valuri inkorporati bħal password: 123456 jew permessi wesgħin iżżejjed: ikteb kollox fil-pipelines tal-kampjun. Dejjem irranġa dan: ibdel is-sigriet għal referenza, kollass il-permess.

tabella ta 'tqabbil

kunċett

Azzjonijiet GitHub

GitLab CI

Fajl ta' konfigurazzjoni

.github/workflows/*.yml

.gitlab-ci.yml

unità tal-bini

fluss tax-xogħol → xogħol → pass

stadju → xogħol

grillu

għaxra:

regoli: / biss:

Issejjaħ sigriet

${{ secrets.NAME }}

$NAME (Vjabbli CI/CD)

Komponent lest

juża: action@v4

jinkludu: /template

runner

run-on:

tags:

tliet każijiet żgħar

Każ 1 — Mnaqqsa għal 6 sigħat u 40 minuta. Tim ried awtomat il-proċess manwali tat-test-build-deploy tagħhom, iżda ħadd ma kien familjari mal-YAML. Huma ddeskrivew YZ bħala "proġett Node.js, Azzjonijiet GitHub, test npm u npm build in push to main, deploy only in v* tag". AI pproduċiet skeletru ta 'ħidma ta' 40 linja; It-tim ivverifika kull pass u beda jgħix f'40 minuta. Kieku kitbuha bl-idejn, kienet tkun ġurnata xogħol.

Każ 2 — L-awtentikazzjoni qabdet vulnerabbiltà tas-sigurtà. Inġinier talab lill-AI biex tuża fluss tax-xogħol. L-output kien jinkludi permessi: write-all — jiġifieri t-token jista’ jikteb lir-repożitorju, pakketti, kollox. L-inġinier innota dan u naqas bil-permessi: { contents: read, packages: write }. Dan elimina r-riskju li dipendenza maħtufa tissostitwixxi r-repożitorju kollu.

Każ 3 — Azzjoni alluċinattiva. Tim wieħed mexxa l-użi ssuġġeriti mill-AI: actions/deploy-to-aws@v3 line; Ma kien hemm l-ebda azzjoni uffiċjali bħal din, AI għamlet l-isem. Il-pipeline sploda b'"azzjoni mhux misjuba". Lezzjoni: Ivverifika fis-Suq li kull komponent imsejjaħ bl-użi: jeżisti fil-fatt.

Erba' mudelli li jistgħu jiġu kkupjati

1) Fluss tax-xogħol CI bażiku:

Ikteb fluss tax-xogħol CI għall-Azzjonijiet GitHub. Proġett: [LINGWA/QAFAS].Trigger: imbotta u iġbed it-talba għall-fergħa prinċipali. Passi: installa dipendenzi, agħmel testijiet, mexxi lint. LE Deploy.Runner ubuntu-latest. Ebda sigriet meħtieġ. Annota YAML.

2) Fluss tax-xogħol tas-CD skjerat (sikur):

Ikteb il-fluss tax-xogħol tal-iskjerament għal [PLATFORM]. Għandu jaħdem biss fuq it-tikketta 'v*'. Mira: [MEDIA/CLOUD]. Regoli: - QATT ma tikteb sigrieti f'test sempliċi, sejjaħhom b'${{ sigrieti.

3) Iddeskrivi l-pipeline eżistenti:

Iddeskrivi l-[PLATTFORM] pipeline linja b'linja li ġejja: x'jagħmlu kull xogħol, f'liema ordni jaħdem, liema sigriet juża, u x'inhuma ż-żewġ punti l-aktar riskjużi tiegħu? Fl-aħħarnett, issuġġerixxi 3 titjib. Pipeline: [KONTENUT YAML]

4) Tħaffef il-Pipeline:

Il-pipeline CI li ġej qed jaħdem bil-mod (tul: [X min]). Eżamina għall-użu tal-cache, impjiegi paralleli u passi mhux meħtieġa. Agħti 5 suġġerimenti ta' aċċelerazzjoni konkreti u azzjonabbli u ikteb l-impatt stmat ta' kull wieħed. Pipeline: [YAML]

Pront dgħajjef / Pront qawwi

Dgħajjef: "Write GitHub Actions workflow."

Riżultat: mhuwiex ċar liema lingwa, liema jikkawżaw, jekk hemmx skjerament; AI tagħti eżempju Node ġeneriku, probabbilment mhux se jaqbel mal-proġett tiegħek, u jista 'hardcode is-sigriet.

Qawwija: "Write GitHub Actions workflow. Python 3.12 project, run pytest + ruff in pull request and main push; NO skjerament; aċċellera dipendenzi b'pip cache; ebda sigrieti meħtieġa. Esportazzjoni YAML b'kummenti."

Differenza: it-tieni pront jagħti l-lingwa, grillu, ambitu (l-ebda skjerament), aspettattiva ta 'prestazzjoni, u restrizzjoni ta' sigurtà. L-output jaħdem direttament.

Żbalji komuni

  • Inkorporazzjoni tas-Sigriet f'YAML. Il-password/token tat-test sempliċi hija l-aktar vulnerabbiltà komuni tas-CI.
  • Permess wiesa' żżejjed. Agħti l-permess minimu meħtieġ minflok tikteb kollox.
  • Jiddependu fuq azzjoni/mudell ineżistenti. Ivverifika l-użi magħmula mill-AI: linji fis-Suq.
  • Skjerament ta' konfużjoni ma' CI. It-test jista 'jseħħ fuq kull spinta, iżda l-iskjerament għandu jiġi kkontrollat ​​u approvat.
  • Mhux qed tuża cache. L-installazzjoni tad-dipendenzi mill-bidu fuq kull ġirja tnaqqas il-pipeline b'minuti.
  • Jippruvaw l-ewwel fluss tax-xogħol direttament fir-repożitorju prinċipali. Mexxiha fuq repożitorju tat-test l-ewwel.

Fil-qosor

Il-pipelines CI/CD huma pajpijiet awtomatizzati li jimxu l-kodiċi b'mod sikur għall-prod u huma definiti b'YAML. L-AI malajr tipproduċi blueprints ta' ħidma għal GitHub Actions u GitLab CI — iżda trid tkun ċar dwar il-pjattaforma, il-lingwa, il-bidu, u l-ambitu tal-iskjerament. Hemm tliet regoli fis-sigurtà: issejjaħ sigrieti b'referenza, agħti privileġġi minimi, tipprintjax sigrieti fil-log. Hija r-responsabbiltà tiegħek li tivverifika li kull komponent juża:/inkludi: jeżisti fil-fatt u x'jagħmel kull pass.

Kompitu ta' applikazzjoni

Agħżel proġett kampjun sempliċi (anke "hello world" fil-lingwa tiegħek se tagħmel). Ħalli l-AI tipproduċi fluss tax-xogħol bil-mudell "Fluss tax-xogħol CI Bażiku" hawn fuq. Imbagħad: (1) ikteb fi kliemek x’jagħmel kull pass; (2) tivverifika li l-ebda sigriet ma jkun inkorporat u l-permessi huma dojoq; (3) Jekk possibbli, mexxiha f'tank tat-test u osserva l-imġieba ħamra-aħdar.

lista ta' kontroll

  • [ ] Żid il-pjattaforma, il-lingwa/il-qafas, il-bidu u l-iskjerament tal-ambitu mal-pront tiegħi.
  • [ ] Nifhem x'jagħmel kull xogħol u pass fil-YAML ġġenerat.
  • [ ] L-ebda sigriet mhu sempliċi; il-varjabbli ${{ secrets.X }} / CI kollha.
  • [ ] Naqqas il-permessi għall-awtorità minima.
  • [ ] Ivverifikajt li l-azzjonijiet/mudelli kollha msejħa fil-fatt jeżistu.
  • [ ] Għamilt il-pass tal-iskjerament ikkontrollat ​​b'approvazzjoni/protezzjoni.