Yksikkö 2 / 11

CI/CD-putkien suunnittelu tekoälyllä: GitHub Actions ja GitLab CI

Voitot:

  • Kyky ymmärtää CI/CD-konsepti, putkien anatomia (liipaisu, työ, askel, juoksija, artefakti) ja erot GitHub Actionsin ja GitLab CI:n välillä ja saada tekoäly tuottamaan putkia oikeassa kontekstissa
  • Kyky tarkistaa ja turvata salaiset viittaukset, luvat ja kutsuttujen komponenttien olemassaolo tekoälyn tuottamassa putkissa
  • Kyky soveltaa periaatteita, että salaisuuksia ei kirjoiteta pelkällä tekstillä, myönnetään vähimmäisvaltuutus ja pidetään käyttöönotto hallinnassa erottamalla se CI:stä

Nykyaikaisten ohjelmistojen sydän on automatisoitu putkisto, jonka kautta koodi lähtee kehittäjän tietokoneelta, kunnes se saavuttaa turvallisesti asiakkaan. Tämän putken nimi on CI/CD. CI (Continuous Integration) on jokaisen koodinmuutoksen automaattinen käännös ja testaus; Sen tarkoituksena on saada kiinni bugista ennen kuin kehittäjä edes poistuu näppäimistöltä. CD (Continuous Delivery/Deployment) on testatun koodin automaattinen valmistelu tai jopa julkaisu. CI/CD-liukuhihna on konfiguraatiotiedosto, joka määrittelee nämä vaiheet järjestyksessä – yleensä kirjoitettu YAML-kielellä (ihmisen luettava asetustekstimuoto).

Näiden YAML-tiedostojen kirjoittaminen käsin on työlästä, monisanaista ja virhealtista; Jos sisennys liukuu yhden välilyönnin verran, koko liukuhihna katkeaa. Tässä tekoäly tulee esiin: oikeassa kontekstissa se tuottaa toimivan luonnoksen sekunneissa. Mutta sinun tehtäväsi on ymmärtää ja varmistaa, mitä kukin luotu vaihe tekee – koska tämä on putki, joka kuljettaa koodisi tuotantoon.

CI/CD-putkilinjan anatomia

Jokainen putki koostuu useista peruskäsitteistä. Et voi hallita AI-lähtöä tietämättä näitä:

  • Trigger: Mikä käynnistää putkilinjan? Yleensä push haaraan, vetopyyntö (yhdistämispyyntö) tai aikataulu.
  • Työ: Looginen yksikkö, joka suorittaa sarjan vaiheita; esimerkiksi "testaa", "build", "deploy".
  • Vaihe: Yksi komento tai toiminto työn sisällä.
  • Runner: Virtuaalikone tai säilö, jossa työt suoritetaan.
  • Artefaktti: Yhden työn tuottama tulos, jota seuraavat työt käyttävät (esimerkiksi käännetty tiedosto).
  • Salainen: Luottamuksellisia tietoja, joita Pipeline käyttää, mutta joita ei pitäisi jäädä pelkkänä tekstinä arkistoon.

GitHub Actions säilyttää tämän määritelmän .github/workflows/*.yml-tiedostoissa; Yksikkö on työnkulku → työ → askelhierarkia. GitLab CI puolestaan ​​käyttää vaihe → työrakennetta .gitlab-ci.yml-tiedostossa. Tekoäly tuntee molemmat syntaksit, mutta sinun on sanottava erikseen, kumman haluat.

Vinkki: Kun pyydät tekoälyä putkia varten, määritä aina: alusta (GitHub Actions tai GitLab CI), kieli/kehys (Node, .NET, Python…), triggeri ja otetaanko se käyttöön. Nämä neljä tietoa kaksinkertaistavat tulosteen hyödyllisyyden.

Askel askeleelta: putkilinjan suunnittelu tekoälyllä

  1. Selvitä tavoite. Kuten "suorita testit push to main -sovelluksella, rakentaa kuva, mutta ota käyttöön vain, kun tunniste heitetään".
  2. Tuo luuranko. Pyydä tekoälyltä perustyönkulku.
  3. Lue ja ymmärrä vaiheet. Tarkista, mitä kukin ajo- ja käyttörivi tekee.
  4. Tarkista salaiset viittaukset. Kutsutaanko salaisuudet koodilla ${{ secrets.NAME }} vai onko ne upotettu koodiin?
  5. Kokeile paikallisesti/CI. Suorita se pienessä testivarastossa, katso punavihreä (fail-pass) -käyttäytyminen.
  6. Laajenna vähitellen. Lisää ensin vain CI (testi), sitten rakentaa, viimeksi lisää käyttöönotto.

Turvallisuus: salaisuus ja lupa valmisteilla

CI/CD on yksi niistä paikoista, joissa salaisuudet vuotavat eniten. Kolme kultaista sääntöä:

  1. Älä koskaan kirjoita salaisuuksia pelkkänä tekstinä YAML:ssa. Käytä alustan salaista arkistoa (GitHub Secrets, GitLab CI/CD Variables) ja kutsu sitä koodilla ${{ secrets.X }}.
  2. Pienin etuoikeus. Pipelinelle antamallasi tunnuksella on vain niin paljon valtaa kuin on tarpeen. Rajaa tätä käyttöoikeuksilla: esto GitHub Actionsissa.
  3. Älä paina lokissa salaisuutta. Viivat, kuten echo $TOKEN, paljastavat lokin salaisuuden. Alustat peittävät, mutta ole myös varovainen.
Varoitus: Mukavuussyistä tekoäly asettaa joskus upotettuja arvoja, kuten salasana: 123456 tai liian laajat oikeudet: kirjoittaa kaikki malliputkiin. Korjaa tämä aina: muuta salaisuus viitteeksi, kutista lupa.

vertailukaavio

käsite

GitHub-toiminnot

GitLab CI

Asetustiedosto

.github/workflows/*.yml

.gitlab-ci.yml

rakennusyksikkö

työnkulku → työ → vaihe

vaihe → työ

laukaisinta

kymmenen:

säännöt: / vain:

Kutsu salaisuus

${{ salaisuudet.NAME }}

$NAME (CI/CD-muuttujat)

Valmis komponentti

käyttää: action@v4

sisältää: /malli

juoksija

päälleajo:

tunnisteet:

kolme minilaukkua

Tapaus 1 – Lyhennetty 6 tuntiin ja 40 minuuttiin. Ryhmä halusi automatisoida manuaalisen testaus-, rakennus- ja käyttöönottoprosessinsa, mutta kukaan ei ollut perehtynyt YAML:ään. He kuvasivat YZ:tä seuraavasti: "Node.js-projekti, GitHub-toiminnot, npm-testi ja npm-build in push to main, käyttöönotto vain v*-tagissa". Tekoäly tuotti toimivan 40 rivin luurangon; Tiimi vahvisti jokaisen vaiheen ja aloitti livelähetyksen 40 minuutissa. Jos he olisivat kirjoittaneet sen käsin, se olisi ollut päivän työ.

Tapaus 2 – Todennus havaitsi tietoturvahaavoittuvuuden. Insinööri pyysi tekoälyä ottamaan käyttöön työnkulun. Tuotos sisälsi luvat: kirjoitus-kaikki - eli merkki voisi kirjoittaa arkistoon, paketteihin, kaikkeen. Insinööri huomasi tämän ja rajasi sitä luvilla: { sisältö: lue, paketit: kirjoitus }. Tämä eliminoi riskin, että kaapattu riippuvuus korvaisi koko arkiston.

Tapaus 3 – Hallusinaatiot. Yksi tiimi suoritti tekoälyn ehdottamia käyttötapoja: rivit action/deploy-to-aws@v3; Tällaista virallista toimintaa ei ollut, tekoäly keksi nimen. Putkilinja räjähti sanomalla "Toiminta ei löydy". Oppitunti: Varmista Marketplacessa, että jokainen uses:lla kutsuttu komponentti on todella olemassa.

Neljä kopioitavaa mallia

1) CI:n perustyönkulku:

Kirjoita CI-työnkulku GitHub Actionsille. Projekti: [LANGUAGE/FRAMEWORK]. Laukaisu: työnnä ja vedä pyyntö päähaaralle. Vaiheet: asenna riippuvuudet, suorita testit, suorita nukka. EI Deploy.Runner ubuntu-latest. Ei vaadi salaisuutta. Merkitse YAML.

2) Käytetty CD-työnkulku (suojattu):

Kirjoita [PLATFORM] -käyttöönoton työnkulku. Sen pitäisi toimia vain 'v*'-tunnisteessa. Kohde: [MEDIA/PILVI]. Säännöt: - ÄLÄ KOSKAAN kirjoita salaisuuksia pelkkänä tekstinä, kutsu niitä ${{ secrets.

3) Kuvaile olemassa olevaa putkistoa:

Kuvaile seuraavaa [PLATFORM]-putkilinjaa rivi riviltä: mitä kukin työ tekee, missä järjestyksessä se suoritetaan, mitä salaisuutta se käyttää ja mitkä ovat sen kaksi riskialttiinta kohtaa? Ehdota lopuksi kolmea parannusta.Kauppa: [YAML CONTENT]

4) Nopeuta putkilinjaa:

Seuraava CI-putki toimii hitaasti (kesto: [X min]). Tarkista välimuistin käyttö, rinnakkaiset työt ja tarpeettomat vaiheet. Anna 5 konkreettista, toteutettavissa olevaa kiihdytysehdotusta ja kirjoita kunkin arvioitu vaikutus. Putkilinja: [YAML]

Heikko kehote / Vahva kehote

Heikko: "Kirjoita GitHub Actions -työnkulku."

Tulos: on epäselvää, mikä kieli, mikä laukaisee, onko käytössä; Tekoäly antaa yleisen Node-esiintymän, ei todennäköisesti sovi projektiisi ja voi koodata salaisuuden.

Vahva: "Kirjoita GitHub Actions -työnkulku. Python 3.12 -projekti, suorita pytest + ruff vetopyynnössä ja päätyönnössä; EI käyttöönottoa; nopeuta riippuvuuksia pip-välimuistilla; ei vaadi salaisuuksia. Vie YAML kommenteilla."

Ero: toinen kehote antaa kielen, liipaisimen, laajuuden (ei käyttöönottoa), suorituskykyodotuksen ja suojausrajoitteen. Lähtö toimii suoraan.

Yleisiä virheitä

  • Salaisuuden upottaminen YAML:iin. Plaintext-salasana/tunnus on yleisin CI-haavoittuvuus.
  • Liian laaja lupa. Anna vaadittava vähimmäislupa kaiken kirjoittamisen sijaan.
  • Luotetaan olemattomaan toimintaan/malliin. Tarkista tekoälyn tekemät käytöt: rivit Marketplacessa.
  • Sekava käyttöönotto CI:n kanssa. Testi voidaan suorittaa jokaisella työntöllä, mutta käyttöönottoa on valvottava ja hyväksyttävä.
  • Ei käytä välimuistia. Riippuvuuksien asentaminen tyhjästä jokaisella ajolla hidastaa putkilinjaa minuuteilla.
  • Kokeile ensimmäistä työnkulkua suoraan päävarastossa. Suorita se ensin testivarastolla.

Yhteenvetona

CI/CD-liukuhihnat ovat automatisoituja putkia, jotka siirtävät koodin turvallisesti tuotantoon ja jotka on määritelty YAML:lla. Tekoäly tuottaa nopeasti toimivat suunnitelmat GitHub Actionsille ja GitLab CI:lle – mutta sinun on oltava selkeä alustasta, kielestä, laukaisimesta ja käyttöönoton laajuudesta. Turvallisuudessa on kolme sääntöä: kutsu salaisuuksia viittauksella, myönnä vähimmäisoikeudet, älä tulosta salaisuuksia lokiin. Sinun vastuullasi on varmistaa, että jokainen uses:/include:-komponentti on todella olemassa ja mitä kukin vaihe tekee.

Sovellustehtävä

Valitse yksinkertainen esimerkkiprojekti (jopa "hello world" omalla kielelläsi käy). Pyydä tekoälyä tuottamaan työnkulku yllä olevan CI-perustyönkulkumallin avulla. Sitten: (1) kirjoita omin sanoin, mitä kukin vaihe tekee; (2) varmistaa, että salaisuuksia ei ole upotettu ja käyttöoikeudet ovat kapeat; (3) Jos mahdollista, käytä sitä testisäiliössä ja tarkkaile punavihreän käyttäytymistä.

tarkistuslista

  • [ ] Lisäsin kehotteeseeni alustan, kielen/kehyksen, triggerin ja käyttöönottoalueen.
  • [ ] Ymmärrän, mitä kukin työ ja vaihe tekevät luodussa YAML:ssa.
  • [ ] Mikään salaisuus ei ole selväkielinen; kaikki ${{ secrets.X }} / CI-muuttuja.
  • [ ] Rajoitin käyttöoikeudet minimiin.
  • [ ] Varmistin, että kaikki kutsutut toiminnot/mallit ovat todella olemassa.
  • [ ] Ohjasin käyttöönottovaiheen hyväksynnällä/suojauksella.