Njësia 2 / 11

Projektimi i tubacioneve CI/CD me inteligjencë artificiale: GitHub Actions dhe GitLab CI

Fitimet:

  • Aftësia për të kuptuar konceptin CI/CD, anatominë e tubacionit (shkaku, puna, hapi, vrapuesi, objekti) dhe ndryshimet midis GitHub Actions dhe GitLab CI dhe të ketë inteligjencë artificiale të prodhojë tubacione me kontekstin e duhur
  • Aftësia për të kontrolluar dhe siguruar referencat sekrete, lejet dhe ekzistencën e komponentëve të quajtur në tubacion të prodhuar nga inteligjenca artificiale
  • Aftësia për të zbatuar parimet e mosshkrimit të sekreteve në tekst të thjeshtë, dhënies së autorizimit minimal dhe mbajtjes së kontrollit të vendosjes duke e ndarë atë nga CI

Zemra e softuerit modern është tubacioni i automatizuar përmes të cilit kodi largohet nga kompjuteri i një zhvilluesi derisa të arrijë në mënyrë të sigurt te klienti. Ky tub quhet CI/CD. CI (Integrimi i vazhdueshëm) është përpilimi dhe testimi automatik i çdo ndryshimi të kodit; Qëllimi i tij është të kapë një gabim përpara se zhvilluesi të largohet nga tastiera. CD (Continuous Delivery/Deployment) është përgatitja automatike apo edhe lëshimi automatik i kodit të testuar. Një tubacion CI/CD është një skedar konfigurimi që përcakton këto hapa sipas radhës — zakonisht i shkruar në YAML (një format teksti konfigurimi i lexueshëm nga njeriu).

Shkrimi i këtyre skedarëve YAML me dorë është i lodhshëm, i folur dhe i prirur ndaj gabimeve; Nëse dhëmbëzimi rrëshqet për një hapësirë, i gjithë tubacioni prishet. Këtu hyn AI: me kontekstin e duhur, ajo prodhon një draft pune në sekonda. Por është detyra juaj të kuptoni dhe verifikoni se çfarë bën çdo hap i gjeneruar - sepse ky është tubi që sjell kodin tuaj për të prodhuar.

Anatomia e tubacionit CI/CD

Çdo tubacion përbëhet nga disa koncepte bazë. Ju nuk mund të kontrolloni daljen e AI pa i ditur këto:

  • Shkaku: Çfarë e nis tubacionin? Zakonisht një shtytje për një degë, një kërkesë tërheqjeje (kërkesë për bashkim) ose një plan.
  • Puna: Njësi logjike që ekzekuton një sërë hapash; për shembull "test", "ndërtoj", "vendos".
  • Hapi: Një komandë ose veprim i vetëm brenda një pune.
  • Runner: Makina virtuale ose kontejneri në të cilin funksionojnë punët.
  • Artifact: Prodhimi i prodhuar nga një punë dhe i përdorur nga punët pasuese (për shembull, një skedar i përpiluar).
  • Sekret: Informacion konfidencial që përdor Pipeline, por nuk duhet të mbetet në tekst të thjeshtë në depo.

GitHub Actions e ruan këtë përkufizim në skedarët .github/workflows/*.yml; Njësia është rrjedha e punës → punë → hierarkia e hapave. GitLab CI, nga ana tjetër, përdor strukturën e punës → fazë në skedarin .gitlab-ci.yml. AI i njeh të dyja sintaksat, por ju duhet të thoni në mënyrë të qartë se cilën dëshironi.

Këshillë: Kur kërkoni AI për tubacione, specifikoni gjithmonë: platformën (GitHub Actions ose GitLab CI), gjuhën/kornizën (Node, .NET, Python…), aktivizimin dhe nëse do të vendoset. Këto katër pjesë të informacionit dyfishojnë dobinë e prodhimit.

Hap pas hapi: Projektimi i një tubacioni me AI

  1. Sqaroni qëllimin. Ashtu si "krye testet në shtytje në kryesore, imazhin e ndërtuar, por vendoset vetëm kur hidhet etiketa".
  2. Të prodhohet skeleti. Kërkoni nga AI për rrjedhën bazë të punës.
  3. Lexoni dhe kuptoni hapat. Verifikoni se çfarë bën çdo linjë ekzekutimi dhe përdorimi.
  4. Kontrolloni referencat sekrete. A thirren sekretet me ${{ secrets.NAME }} apo janë të ngulitura në kod?
  5. Provojeni në vend/CI. Ekzekutoni atë në një depo të vogël testimi, shikoni sjelljen e kuqe-jeshile (fail-pass).
  6. Zgjerojeni gradualisht. Së pari thjesht shtoni CI (test), më pas ndërtoni, së fundi shtoni vendosjen.

Siguria: sekret dhe leje në linjë

CI/CD është një nga vendet ku sekretet rrjedhin më shumë. Tre rregulla të arta:

  1. Asnjëherë mos shkruani sekretet në tekst të thjeshtë në YAML. Përdorni depon e fshehtë të platformës (GitHub Secrets, GitLab CI/CD Variables) dhe thirreni atë me ${{ secrets.X }}.
  2. Privilegji më i vogël. Shenja që i jepni Pipeline do të ketë vetëm aq autoritet sa është e nevojshme. Kufizojeni këtë me lejet: bllokoni në Veprimet e GitHub.
  3. Mos shtypni sekretin në regjistër. Linjat si echo $TOKEN zbulojnë sekretin në regjistër. Maska e platformave, por kini kujdes gjithashtu.
Kujdes: Për lehtësi, AI ndonjëherë vendos vlera të ngulitura si fjalëkalimi: 123456 ose leje tepër të gjera: shkruani të gjitha në tubacionet e mostrës. Rregullojeni gjithmonë këtë: ndryshoni sekretin në referencë, kolapsi lejen.

grafik krahasimi

koncept

Veprimet e GitHub

GitLab CI

Skedari i konfigurimit

.github/workflows/*.yml

.gitlab-ci.yml

njësi ndërtimi

rrjedha e punës → punë → hap

fazë → punë

shkas

dhjetë:

rregullat: / vetëm:

Thirr sekretin

${{ sekretet.NAME }}

$NAME (variablat CI/CD)

Komponent i gatshëm

përdor: action@v4

përfshijnë: /shabllon

vrapues

funksionon:

etiketa:

tre mini kuti

Rasti 1 - Reduktohet në 6 orë e 40 minuta. Një ekip donte të automatizonte procesin e tyre manual të testimit-ndërtimit-vendosjes, por askush nuk ishte i njohur me YAML. Ata e përshkruan YZ si "projekti Node.js, Veprimet GitHub, testi npm dhe ndërtimi npm në shtytje në kryesore, vendoset vetëm në etiketën v*". AI prodhoi një skelet pune prej 40 linjash; Ekipi verifikoi çdo hap dhe doli live në 40 minuta. Po ta kishin shkruar me dorë, do të ishte një ditë pune.

Rasti 2 - Autentifikimi kapi një cenueshmëri sigurie. Një inxhinier i kërkoi AI të vendoste rrjedhën e punës. Dalja përfshinte lejet: shkruani të gjitha - që do të thotë se token mund të shkruante në depo, paketa, gjithçka. Inxhinieri e vuri re këtë dhe e ngushtoi me leje: { përmbajtje: lexo, paketa: shkruaj }. Kjo eliminoi rrezikun e një varësie të rrëmbyer që zëvendësonte të gjithë depon.

Rasti 3 — Veprim halucinativ. Një ekip përdori përdorimet e sugjeruara nga AI: linja veprime/deploy-to-aws@v3; Nuk kishte një veprim të tillë zyrtar, AI e krijoi emrin. Tubacioni shpërtheu me "veprim nuk u gjet". Mësimi: Verifikoni në Marketplace që çdo komponent i thirrur me përdorime: ekziston në të vërtetë.

Katër shabllone të kopjueshëm

1) Rrjedha e punës bazë CI:

Shkruani një rrjedhë pune CI për GitHub Actions. Projekti: [LANGUAGE/FRAMEWORK]. Shkaktësi: shtytje dhe tërheq kërkesën në degën kryesore. Hapat: instaloni varësitë, ekzekutoni testet, ekzekutoni lint. JO Deploy.Runner ubuntu-latest. Asnjë sekret nuk kërkohet. Shënoni YAML.

2) Rrjedha e punës e vendosur në CD (e sigurt):

Shkruani rrjedhën e punës së vendosjes për [PLATFORM]. Duhet të funksionojë vetëm në etiketën 'v*'. Synimi: [MEDIA/RE]. Rregullat: - Asnjëherë mos i shkruani sekretet në tekst të thjeshtë, thirrini ato me sekrete ${{.

3) Përshkruani tubacionin ekzistues:

Përshkruani rresht pas rreshti tubacionin e mëposhtëm [PLATFORMA]: çfarë bën çdo punë, në çfarë rendi funksionon, çfarë sekreti përdor dhe cilat janë dy pikat e saj më të rrezikshme? Së fundi, sugjeroni 3 përmirësime. Pipeline: [YAML CONTENT]

4) Përshpejtoni tubacionin:

Gazsjellësi i mëposhtëm CI po funksionon ngadalë (kohëzgjatja: [X min]). Ekzaminoni për përdorimin e cache-it, punët paralele dhe hapat e panevojshëm. Jepni 5 sugjerime konkrete, të zbatueshme për përshpejtimin dhe shkruani ndikimin e vlerësuar të secilit. Tubacioni: [YAML]

Prompt i dobët / Prompt i fortë

E dobët: "Shkruani rrjedhën e punës së Veprimeve të GitHub."

Rezultati: është e paqartë se cila gjuhë, cili shkaktar, nëse ka një vendosje; AI jep një shembull të përgjithshëm Node, ndoshta nuk do të përshtatet me projektin tuaj dhe mund ta kodojë sekretin.

Strong: "Shkruani rrjedhën e punës GitHub Actions. Projekti Python 3.12, ekzekutoni pytest + ruff në kërkesën për tërheqje dhe shtytje kryesore; JO vendosje; përshpejtoni varësitë me cache pip; nuk kërkohen sekrete. Eksporto YAML me komente."

Dallimi: kërkesa e dytë jep gjuhën, shkasin, shtrirjen (pa vendosje), pritjet e performancës dhe kufizimin e sigurisë. Prodhimi funksionon drejtpërdrejt.

Gabimet e zakonshme

  • Përfshirja e sekretit në YAML. Fjalëkalimi/tokeni i tekstit të thjeshtë është cenueshmëria më e zakonshme e CI.
  • Leje tepër e gjerë. Jepni lejen minimale të kërkuar në vend të shkrimit të të gjitha.
  • Duke u mbështetur në veprim/shabllon inekzistent. Verifikoni përdorimet e bëra nga AI: linjat në Marketplace.
  • Konfuze Deploy me CI. Testi mund të kryhet në çdo shtytje, por vendosja duhet të kontrollohet dhe miratohet.
  • Nuk përdor cache. Instalimi i varësive nga e para në çdo drejtim e ngadalëson tubacionin me minuta.
  • Provimi i rrjedhës së parë të punës direkt në depon kryesore. Ekzekutoni atë fillimisht në një depo testimi.

Në përmbledhje

Tubacionet CI/CD janë tubacione të automatizuara që lëvizin kodin në mënyrë të sigurt drejt prodhimit dhe përcaktohen me YAML. AI prodhon shpejt plane funksionale për GitHub Actions dhe GitLab CI – por ju duhet të jeni të qartë për platformën, gjuhën, aktivizimin dhe shtrirjen e vendosjes. Ekzistojnë tre rregulla në siguri: thirrni sekretet me referencë, jepni privilegje minimale, mos shtypni sekretet në regjistër. Është përgjegjësia juaj të verifikoni që secili përdor:/përfshin: ekziston në të vërtetë komponenti dhe çfarë bën secili hap.

Detyra e aplikimit

Zgjidhni një projekt të thjeshtë shembull (edhe një "hello world" në gjuhën tuaj do ta bëjë). Lëreni AI të prodhojë një rrjedhë pune me shabllonin "Basic CI workflow" më sipër. Pastaj: (1) shkruani me fjalët tuaja se çfarë bën secili hap; (2) verifikoni që nuk ka sekrete dhe lejet janë të ngushta; (3) Nëse është e mundur, futeni atë në një rezervuar provë dhe vëzhgoni sjelljen kuq-jeshile.

listë kontrolli

  • [ ] Shtova platformën, gjuhën/kornizën, aktivizimin dhe shtrirjen e vendosjes në kërkesën time.
  • [ ] Unë e kuptoj se çfarë bën çdo punë dhe hap në YAML të krijuar.
  • [ ] Asnjë sekret nuk është tekst i thjeshtë; të gjitha ${{ sekretet.X }} / ndryshorja CI.
  • [ ] I ngushtova lejet në autoritetin minimal.
  • [ ] Kam verifikuar që të gjitha veprimet/shabllonet e quajtura ekzistojnë në të vërtetë.
  • [ ] E bëra hapin e vendosjes të kontrolluar me miratim/mbrojtje.