Kitengo 2 / 11

Kubuni Mabomba ya CI/CD yenye Akili Bandia: Vitendo vya GitHub na GitLab CI

Faida:

  • Uwezo wa kuelewa dhana ya CI/CD, anatomia ya bomba (kichochezi, kazi, hatua, mkimbiaji, bandia) na tofauti kati ya Vitendo vya GitHub na GitLab CI na kuwa na akili bandia hutoa bomba na muktadha sahihi.
  • Uwezo wa kuangalia na kupata marejeleo ya siri, ruhusa na uwepo wa sehemu zinazoitwa kwenye bomba zinazozalishwa na akili ya bandia.
  • Uwezo wa kutumia kanuni za kutoandika siri kwa maandishi wazi, kutoa idhini ndogo, na kuweka uwekaji kudhibitiwa kwa kuitenganisha na CI.

Kiini cha programu ya kisasa ni bomba la kiotomatiki ambalo kupitia msimbo huacha kompyuta ya msanidi programu hadi ifike kwa mteja kwa usalama. Bomba hili linaitwa CI/CD. CI (Ushirikiano Unaoendelea) ni mkusanyiko otomatiki na majaribio ya kila mabadiliko ya nambari; Madhumuni yake ni kupata hitilafu kabla ya msanidi programu hata kuondoka kwenye kibodi. CD (Utoaji Unaoendelea/Usambazaji) ni maandalizi ya kiotomatiki au hata kutolewa kwa msimbo uliojaribiwa. Bomba la CI/CD ni faili ya usanidi inayofafanua hatua hizi kwa mpangilio - kwa kawaida huandikwa katika YAML (umbizo la maandishi ya usanidi unaoweza kusomeka na binadamu).

Kuandika faili hizi za YAML kwa mkono ni kazi ya kuchosha, ya kitenzi, na yenye makosa; Ikiwa uingilizi unateleza kwa nafasi moja, bomba zima huvunjika. Hapa ndipo AI inapoingia: ikiwa na muktadha unaofaa, hutoa rasimu ya kufanya kazi kwa sekunde. Lakini ni kazi yako kuelewa na kuthibitisha kile ambacho kila hatua inayozalishwa hufanya - kwa sababu hili ndilo bomba ambalo hubeba msimbo wako kwa uzalishaji.

Anatomy ya bomba la CI/CD

Kila bomba lina dhana kadhaa za msingi. Hauwezi kudhibiti pato la AI bila kujua haya:

  • Kichochezi: Nini kinaanzisha Bomba? Kawaida kushinikiza kwa tawi, ombi la kuvuta (unganisha ombi), au ratiba.
  • Kazi: Kitengo cha kimantiki kinachotekeleza mfululizo wa hatua; kwa mfano "test", "build", "deploy".
  • Hatua: Amri moja au kitendo ndani ya kazi.
  • Runner: Mashine pepe au kontena ambalo kazi zinaendeshwa.
  • Vizalia vya programu: Pato linalotolewa na kazi moja na kutumiwa na kazi zinazofuata (kwa mfano, faili iliyokusanywa).
  • Siri: Maelezo ya Siri ambayo Pipeline hutumia lakini hayafai kubaki katika maandishi wazi kwenye hazina.

Vitendo vya GitHub huweka ufafanuzi huu katika faili za .github/workflows/*.yml; Sehemu ni mtiririko wa kazi → kazi → daraja la hatua. GitLab CI, kwa upande mwingine, hutumia hatua → muundo wa kazi katika faili ya .gitlab-ci.yml. AI inajua syntaxes zote mbili, lakini lazima useme wazi ni ipi unayotaka.

Kidokezo: Unapouliza AI kwa mabomba, bainisha kila wakati: jukwaa (Vitendo vya GitHub au GitLab CI), lugha/mfumo (Njia, .NET, Python…), kichochezi, na iwapo kitatumwa. Sehemu hizi nne za habari mara mbili ya manufaa ya pato.

Hatua kwa hatua: Kubuni bomba na AI

  1. Fafanua lengo. Kama "fanya majaribio kwenye push to main, jenga taswira, lakini toa tu wakati lebo inapotupwa".
  2. Toa mifupa. Uliza AI kwa mtiririko wa msingi wa kazi.
  3. Soma na uelewe hatua. Thibitisha kile kila mstari unaoendesha na unatumia hufanya.
  4. Angalia marejeleo ya Siri. Je, siri hizo zinaitwa na ${{ secrets.NAME }} au zimepachikwa kwenye msimbo?
  5. Ijaribu ndani ya nchi/CI. Iendeshe kwenye hazina ndogo ya majaribio, angalia tabia nyekundu-kijani (kutofaulu-kupita).
  6. Panua hatua kwa hatua. Kwanza ongeza tu CI (mtihani), kisha ujenge, ongeza mwisho kupeleka.

Usalama: siri na ruhusa katika bomba

CI/CD ni mojawapo ya maeneo ambayo siri huvuja zaidi. Sheria tatu za dhahabu:

  1. Usiandike kamwe siri kwa maandishi wazi katika YAML. Tumia hazina ya siri ya jukwaa (GitHub Secrets, GitLab CI/CD Variables) na uiite ukitumia ${{ secrets.X }}.
  2. Upendeleo mdogo. Tokeni utakayotoa kwa Pipeline itakuwa na mamlaka kadri inavyohitajika. Punguza hii kwa ruhusa: zuia katika Vitendo vya GitHub.
  3. Usibonye siri kwenye logi. Mistari kama echo $TOKEN hufichua siri iliyo kwenye kumbukumbu. Mask ya majukwaa, lakini kuwa mwangalifu pia.
Tahadhari: Kwa urahisi, AI wakati mwingine huweka thamani zilizopachikwa kama nenosiri: 123456 au ruhusa pana kupita kiasi: andika-yote katika sampuli za mabomba. Rekebisha hili kila wakati: badilisha siri iwe rejeleo, ukunja ruhusa.

chati ya kulinganisha

dhana

Vitendo vya GitHub

GitLab CI

Faili ya usanidi

.github/workflows/*.yml

.gitlab-ci.yml

kitengo cha ujenzi

mtiririko wa kazi → kazi → hatua

hatua → kazi

kichochezi

kumi:

sheria: / pekee:

Kuitisha siri

${{ siri.NAME }}

$NAME (Vigezo vya CI/CD)

Tayari sehemu

hutumia: action@v4

ni pamoja na: /template

mkimbiaji

inaendeshwa:

tagi:

kesi tatu ndogo

Kesi ya 1 - Imepunguzwa hadi saa 6 na dakika 40. Timu ilitaka kufanyia kazi mchakato wao wa uwekaji wa jaribio la kujenga kiotomatiki, lakini hakuna aliyeifahamu YAML. Walielezea YZ kama "mradi wa Node.js, Vitendo vya GitHub, jaribio la npm na npm kujenga kwa kushinikiza kwenda kuu, peleka tu katika lebo ya v*". AI ilizalisha mifupa ya kufanya kazi ya mistari 40; Timu ilithibitisha kila hatua na ikawa hewani baada ya dakika 40. Ikiwa wangeiandika kwa mkono, ingekuwa kazi ya siku moja.

Kesi ya 2 - Uthibitishaji ulipata athari ya kiusalama. Mhandisi aliuliza AI kupeleka mtiririko wa kazi. Matokeo ni pamoja na ruhusa: andika-yote - ikimaanisha ishara inaweza kuandika kwa hazina, vifurushi, kila kitu. Mhandisi aligundua hili na akalipunguza kwa ruhusa: { contents: read, packages: write }. Hii iliondoa hatari ya utegemezi uliotekwa nyara kuchukua nafasi ya hazina nzima.

Kesi ya 3 - Hatua ya hallucinatory. Timu moja iliendesha matumizi yaliyopendekezwa na AI: vitendo/deploy-to-aws@v3 line; Hakukuwa na hatua rasmi kama hiyo, AI iliunda jina. Bomba lililipuka na "hatua haijapatikana". Somo: Thibitisha katika Soko kwamba kila sehemu inayoitwa na matumizi: ipo.

Violezo vinne vinavyoweza kunakiliwa

1) Mtiririko wa kimsingi wa CI:

Andika mtiririko wa kazi wa CI kwa Vitendo vya GitHub. Mradi: [LUGHA/MFUMO].Kichochezi: sukuma na kuvuta ombi kwa tawi kuu. Hatua: sakinisha vitegemezi, endesha majaribio, endesha lint. NO Deploy.Runner ubuntu-karibuni. Hakuna siri inayohitajika. Fafanua YAML.

2) Mtiririko wa kazi wa CD (salama):

Andika mtiririko wa kazi wa [PLATFORM]. Inapaswa kufanya kazi kwenye lebo ya 'v*' pekee. Lengo: [MEDIA/CLOUD]. Sheria: - USIWAHI kuandika siri kwa maandishi wazi, zipigie kwa ${{ siri.

3) Eleza bomba lililopo:

Eleza mstari wa bomba wa [PLATFORM] ufuatao kwa mstari: kila kazi hufanya nini, inaendeshwa kwa mpangilio gani, inatumia siri gani, na pointi zake mbili hatari zaidi ni zipi? Hatimaye, pendekeza maboresho 3. Bomba: [YAML MAUDHUI]

4) Kuongeza kasi ya bomba:

Bomba la CI lifuatalo linafanya kazi polepole (muda: [dakika X]). Chunguza matumizi ya akiba, kazi sambamba na hatua zisizo za lazima. Toa mapendekezo 5 ya kuongeza kasi yanayoweza kutekelezeka na uandike makadirio ya athari ya kila moja. Bomba: [YAML]

Mwongozo dhaifu / Mwongozo thabiti

Dhaifu: "Andika mtiririko wa kazi wa Vitendo vya GitHub."

Matokeo: haijulikani ni lugha gani, ambayo husababisha, ikiwa kuna kupelekwa; AI inatoa mfano wa Nodi ya jumla, labda haitatoshea mradi wako, na inaweza kuweka siri kwa bidii.

Imara: "Andika mtiririko wa kazi wa Vitendo vya GitHub. Mradi wa Python 3.12, endesha pytest + ruff katika ombi la kuvuta na msukumo mkuu; HAKUNA kupeleka; ongeza kasi ya utegemezi kwa kache ya bomba; hakuna siri zinazohitajika. Hamisha YAML na maoni."

Tofauti: kidokezo cha pili kinatoa lugha, kichochezi, upeo (hakuna uwekaji), matarajio ya utendakazi, na kizuizi cha usalama. Pato hufanya kazi moja kwa moja.

Makosa ya kawaida

  • Kupachika Siri katika YAML. Nenosiri/tokeni ya maandishi wazi ndiyo hatari inayojulikana zaidi ya CI.
  • Ruhusa pana kupita kiasi. Toa ruhusa ya chini zaidi inayohitajika badala ya kuandika yote.
  • Kutegemea kitendo/kiolezo kisichokuwepo. Thibitisha matumizi yaliyotengenezwa na AI: mistari kwenye Soko.
  • Inachanganya Usambazaji na CI. Jaribio linaweza kufanya kazi kwa kila msukumo, lakini uwekaji lazima udhibitiwe na kuidhinishwa.
  • Haitumii kache. Kufunga vitegemezi kutoka mwanzo kwenye kila kukimbia kunapunguza kasi ya bomba kwa dakika.
  • Kujaribu mtiririko wa kwanza wa kazi moja kwa moja kwenye hazina kuu. Iendeshe kwenye hazina ya majaribio kwanza.

Kwa muhtasari

Mabomba ya CI/CD ni mirija ya kiotomatiki ambayo husogeza msimbo kwa usalama hadi kwa uzalishaji na hufafanuliwa kwa YAML. AI hutoa haraka mipango inayofanya kazi ya Vitendo vya GitHub na GitLab CI - lakini unahitaji kuwa wazi kuhusu jukwaa, lugha, kichochezi, na upeo wa kusambaza. Kuna sheria tatu katika usalama: piga siri kwa kumbukumbu, toa marupurupu ya chini, usichapishe siri kwenye logi. Ni wajibu wako kuthibitisha kwamba kila moja inatumia:/pamoja na: sehemu halisi ipo na kila hatua hufanya nini.

Jukumu la maombi

Chagua mradi rahisi wa sampuli (hata "ulimwengu wa habari" katika lugha yako utafanya). Acha AI itoe mtiririko wa kazi na kiolezo cha "Basic CI workflow" hapo juu. Kisha: (1) andika kwa maneno yako mwenyewe kile ambacho kila hatua hufanya; (2) kuthibitisha kwamba hakuna siri iliyopachikwa na ruhusa ni finyu; (3) Ikiwezekana, iendeshe kwenye tanki la majaribio na uangalie tabia nyekundu-kijani.

orodha ya ukaguzi

  • [ ] Niliongeza jukwaa, lugha/mfumo, kianzisha na kupeleka upeo kwenye kidokezo changu.
  • [ ] Ninaelewa kila kazi na hatua hufanya nini katika YAML iliyotolewa.
  • [ ] Hakuna siri ni maandishi wazi; zote ${{ secrets.X }} / CI tofauti.
  • [ ] Nilipunguza ruhusa kwa mamlaka ya chini zaidi.
  • [ ] Nilithibitisha kuwa vitendo/violezo vyote vinavyoitwa vipo.
  • [ ] Nilifanya hatua ya kusambaza kudhibitiwa kwa idhini/ulinzi.