Ieguvumi:
- Spēja izprast CI/CD koncepciju, konveijera anatomiju (trigeris, darbs, solis, skrējējs, artefakts) un atšķirības starp GitHub Actions un GitLab CI, kā arī panākt, lai mākslīgais intelekts radītu cauruļvadus ar pareizo kontekstu.
- Spēja pārbaudīt un nodrošināt slepenās atsauces, atļaujas un izsaukto komponentu esamību mākslīgā intelekta radītajā cauruļvadā
- Spēja piemērot principus nerakstīt noslēpumus vienkāršā tekstā, piešķirt minimālu atļauju un kontrolēt izvietošanu, atdalot to no CI
Mūsdienu programmatūras sirds ir automatizēts cauruļvads, pa kuru kods atstāj izstrādātāja datoru, līdz tas droši sasniedz klientu. Šo cauruli sauc par CI/CD. CI (Continuous Integration) ir katras koda maiņas automātiska apkopošana un pārbaude; Tās mērķis ir novērst kļūdu, pirms izstrādātājs pat atstāj tastatūru. CD (Continuous Delivery/Deployment) ir pārbaudīta koda automātiska sagatavošana vai pat izlaišana. CI/CD konveijers ir konfigurācijas fails, kas definē šīs darbības secībā — parasti rakstīts YAML (cilvēkam lasāms konfigurācijas teksta formāts).
Šo YAML failu rakstīšana ar roku ir nogurdinoša, detalizēta un ar kļūdu iespējamība; Ja ievilkums paslīd par vienu atstarpi, viss cauruļvads saplīst. Šeit parādās AI: pareizajā kontekstā tas dažu sekunžu laikā izveido darba melnrakstu. Taču jūsu uzdevums ir izprast un pārbaudīt katra ģenerētā soļa darbību, jo šī ir caurule, kas pārnēsā jūsu kodu uz prod.
CI/CD cauruļvada anatomija
Katrs cauruļvads sastāv no vairākiem pamatjēdzieniem. Jūs nevarat kontrolēt AI izvadi, ja nezināt:
- Iedarbinātājs: kas iedarbina cauruļvadu? Parasti nosūtīšana uz filiāli, piesaistes pieprasījums (apvienošanas pieprasījums) vai grafiks.
- Darbs: Loģiska vienība, kas izpilda virkni darbību; piemēram, "pārbaudīt", "veidot", "izvietot".
- Solis: viena komanda vai darbība darba ietvaros.
- Runner: virtuālā mašīna vai konteiners, kurā tiek izpildīti darbi.
- Artefakts: viena uzdevuma izvade, ko izmanto nākamie darbi (piemēram, apkopots fails).
- Noslēpums: konfidenciāla informācija, ko Pipeline izmanto, taču tai nevajadzētu palikt repozitorijā vienkārša teksta veidā.
GitHub Actions saglabā šo definīciju .github/workflows/*.yml failos; Vienība ir darbplūsma → darbs → soļu hierarhija. Savukārt GitLab CI failā .gitlab-ci.yml izmanto posmu → darba struktūru. AI zina abas sintakses, taču jums ir skaidri jānorāda, kuru no tām vēlaties.
Padoms. Pieprasot AI par konveijeriem, vienmēr norādiet platformu (GitHub Actions vai GitLab CI), valodu/ietvaru (Node, .NET, Python…), trigeri un to, vai tas tiks izvietots. Šīs četras informācijas daļas dubulto izvades lietderību.
Soli pa solim: cauruļvada projektēšana ar AI
- Noskaidro mērķi. Piemēram, "palaist testus push to main, veidot attēlu, bet izvietot tikai tad, kad tiek izmests tags".
- Lieciet izgatavot skeletu. Jautājiet AI par pamata darbplūsmu.
- Izlasiet un izprotiet darbības. Pārbaudiet, ko dara katra palaišanas un izmantošanas līnija.
- Pārbaudiet slepenās atsauces. Vai noslēpumi tiek izsaukti ar ${{ secrets.NAME }}, vai arī tie ir iegulti kodā?
- Izmēģiniet to lokāli/CI. Palaidiet to nelielā testa repozitorijā, skatiet sarkano zaļo (neatbilstošā) darbību.
- Paplašiniet pakāpeniski. Vispirms vienkārši pievienojiet CI (tests), pēc tam izveidojiet, pēdējo reizi pievienojiet izvietošanu.
Drošība: noslēpums un atļauja tiek gatavota
CI/CD ir viena no vietām, kur noslēpumi noplūst visvairāk. Trīs zelta likumi:
- YAML nekad nerakstiet noslēpumus vienkāršā tekstā. Izmantojiet platformas slepeno repozitoriju (GitHub Secrets, GitLab CI/CD Variables) un izsauciet to ar ${{ secrets.X }}.
- Mazākā privilēģija. Tokenam, ko piešķirsiet Pipeline, būs tikai tik daudz pilnvaru, cik nepieciešams. Sašauriniet to ar atļaujām: bloķēt pakalpojumā GitHub Actions.
- Nespiediet uz žurnāla noslēpumu. Tādas līnijas kā atbalss $TOKEN atklāj žurnāla noslēpumu. Platformas maskē, taču esiet arī uzmanīgi.
Uzmanību! Ērtības labad mākslīgais intelekts dažkārt ievieto iegultās vērtības, piemēram, paroli: 123456 vai pārāk plašas atļaujas: rakstīt visu parauga konveijeros. Vienmēr labojiet šo: mainiet noslēpumu uz atsauci, sakļaut atļauju.
salīdzināšanas diagramma
koncepcija
GitHub darbības
GitLab CI
Konfigurācijas fails
.github/workflows/*.yml
.gitlab-ci.yml
ēkas vienība
darbplūsma → darbs → solis
posms → darbs
sprūda
desmit:
noteikumi: / tikai:
Izsaukt noslēpumu
${{ noslēpumi.NAME }}
$NAME (CI/CD mainīgie)
Gatavs komponents
izmanto: action@v4
ietver: /template
skrējējs
uzbrauciens:
tagi:
trīs mini futrāļi
1. gadījums — samazināts līdz 6 stundām un 40 minūtēm. Komanda vēlējās automatizēt savu manuālās pārbaudes, veidošanas un izvietošanas procesu, taču neviens nebija pazīstams ar YAML. Viņi aprakstīja YZ kā "Node.js projektu, GitHub Actions, npm testu un npm build in push to main, izvietot tikai v* tagā". AI izveidoja 40 līniju darba skeletu; Komanda pārbaudīja katru soli un sāka tiešraidi 40 minūšu laikā. Ja viņi to būtu rakstījuši ar roku, tas būtu dienas darbs.
2. gadījums — autentifikācijas laikā tika konstatēta drošības ievainojamība. Inženieris lūdza AI izvietot darbplūsmu. Izvade ietvēra atļaujas: rakstīt visu — tas nozīmē, ka marķieris varēja rakstīt krātuvē, pakotnēs, viss. Inženieris to pamanīja un sašaurināja to ar atļaujām: { saturs: lasīt, pakotnes: rakstīt }. Tādējādi tika novērsts risks, ka nolaupīta atkarība varētu aizstāt visu repozitoriju.
3. gadījums — halucinācijas darbība. Viena komanda veica AI ieteiktos lietojumus: darbības/deploy-to-aws@v3 līnija; Šādas oficiālas darbības nebija, AI izdomāja nosaukumu. Cauruļvads eksplodēja ar "darbība nav atrasta". Nodarbība: pārbaudiet vietnē Marketplace, vai katrs izsauktais komponents ar uses: patiešām pastāv.
Četras kopējamas veidnes
1) CI pamata darbplūsma:
Uzrakstiet CI darbplūsmu GitHub darbībām. Projekts: [LANGUAGE/FRAMEWORK]. Sprūda: nospiediet un velciet pieprasījumu galvenajai filiālei. Darbības: instalējiet atkarības, palaidiet testus, palaidiet savārstījumu. NO Deploy.Runner ubuntu-latest. Nav nepieciešams noslēpums. Anotējiet YAML.
2) Izvietotā kompaktdiska darbplūsma (droša):
Uzrakstiet [PLATFORM] izvietošanas darbplūsmu. Tam vajadzētu darboties tikai ar tagu “v*”. Mērķis: [MEDIA/CLOUD]. Noteikumi: - NEKAD nerakstiet noslēpumus vienkāršā tekstā, izsauciet tos ar ${{ secrets.
3) Aprakstiet esošo cauruļvadu:
Aprakstiet šo [PLATFORM] konveijera līniju pa rindiņai: ko katrs darbs dara, kādā secībā tas darbojas, kādu noslēpumu tas izmanto un kādi ir divi tā riskantākie punkti? Visbeidzot, iesakiet 3 uzlabojumus. Cauruļvads: [YAML CONTENT]
4) Paātrināt cauruļvadu:
Šis CI konveijers darbojas lēni (ilgums: [X min]). Pārbaudiet kešatmiņas lietojumu, paralēlus darbus un nevajadzīgas darbības. Sniedziet 5 konkrētus, īstenojamus paātrinājuma ieteikumus un pierakstiet katra paredzamo ietekmi. Cauruļvads: [YAML]
Vāja uzvedne / spēcīga uzvedne
Vāji: “Rakstīt GitHub darbību darbplūsmu”.
Rezultāts: nav skaidrs, kurā valodā, kas izraisa, vai ir izvietošana; AI sniedz vispārīgu mezgla gadījumu, iespējams, tas neatbilst jūsu projektam un var kodēt noslēpumu.
Spēcīgs: "Rakstīt GitHub Actions darbplūsmu. Python 3.12 projekts, palaist pytest + rupjš izvilkšanas pieprasījumā un galvenajā nosūtīšanā; NEVIENA izvietošanu; paātriniet atkarības, izmantojot pip kešatmiņu; nav nepieciešami noslēpumi. Eksportējiet YAML ar komentāriem."
Atšķirība: otrā uzvedne norāda valodu, aktivizētāju, darbības jomu (bez izvietošanas), veiktspējas cerības un drošības ierobežojumu. Izvade darbojas tieši.
Biežas kļūdas
- Noslēpuma iegulšana YAML. Vienkāršā teksta parole/marķieris ir visizplatītākā CI ievainojamība.
- Pārāk plaša atļauja. Piešķiriet minimālo nepieciešamo atļauju, nevis rakstīt visu.
- Paļaušanās uz neesošu darbību/veidni. Pārbaudiet AI veiktos lietojumus: rindas pakalpojumā Marketplace.
- Mulsinoša izvietošana ar CI. Testu var veikt ar katru grūdienu, taču izvietošana ir jākontrolē un jāapstiprina.
- Neizmanto kešatmiņu. Atkarību instalēšana no jauna katrā darbības reizē palēninās konveijera darbību par minūtēm.
- Pirmās darbplūsmas izmēģināšana tieši galvenajā repozitorijā. Vispirms palaidiet to testa repozitorijā.
Rezumējot
CI/CD konveijeri ir automatizētas caurules, kas droši pārvieto kodu uz prod un ir definētas ar YAML. AI ātri izveido darba plānus GitHub Actions un GitLab CI — taču jums ir skaidri jāzina platforma, valoda, aktivizētājs un izvietošanas joma. Drošībā ir trīs noteikumi: izsauciet noslēpumus pēc atsauces, piešķiriet minimālās privilēģijas, nedrukājiet noslēpumus žurnālā. Jūs esat atbildīgs par to, lai pārbaudītu, vai katrs komponents izmanto:/include: patiešām eksistē un katra darbība.
Lietojumprogrammas uzdevums
Izvēlieties vienkāršu projekta paraugu (derēs pat "sveiki pasaule" jūsu valodā). Ļaujiet mākslīgajam intelektam izveidot darbplūsmu, izmantojot iepriekš norādīto veidni "Pamata CI darbplūsma". Pēc tam: (1) uzrakstiet saviem vārdiem, ko dara katrs solis; (2) pārbaudiet, vai nav iegulti noslēpumi un vai atļaujas ir ierobežotas; (3) Ja iespējams, palaidiet to testa tvertnē un novērojiet sarkano-zaļo darbību.
kontrolsaraksts
- [ ] Es savai uzvednei pievienoju platformu, valodu/ietvaru, aktivizētāju un izvietošanas tvērumu.
- [ ] Es saprotu, ko katrs darbs un solis dara ģenerētajā YAML.
- [ ] Neviens noslēpums nav vienkāršs teksts; visi ${{ secrets.X }} / CI mainīgais.
- [ ] Es samazināju atļaujas līdz minimālajai pilnvarai.
- [ ] Es pārbaudīju, vai visas izsauktās darbības/veidnes patiešām pastāv.
- [ ] Izvēršanas darbību kontrolēju ar apstiprinājumu/aizsardzību.