Hvað er CI/CD? Samfelld samþætting og afhending útskýrt einfaldlega
CI/CD er leið til að senda hugbúnað þar sem sérhver kóðabreyting er sjálfkrafa byggð, prófuð og, ef hún stenst, undirbúin fyrir útgáfu eða gefin út. CI (continuous integration) þýðir að breytingar eru sameinaðar oft og athugaðar með sjálfvirkum prófum í hvert sinn. CD (continuous delivery eða deployment) þýðir að breytingarnar sem standast eru pakkaðar og sendar áleiðis til notenda með litilli eða engri handavinnu.
Markmiðið er einfalt: finna mistök nokkrum mínútum eftir að þau eru gerð, ekki vikum síðar þegar viðskiptavinur finnur þau.
Af hverju CI/CD skiptir máli þegar þú byggir með gervigreind
Gervigreindarsmiðir gera kóðabreytingar hratt. Ein fyrirmæli geta snert tíu skrár. Sá hraði er frábær þar til breyting á afgreiðslusíðunni brýtur óvart innskráningarsíðuna, og enginn tekur eftir því fyrr en notandi sendir þér póst.
CI/CD er öryggisnetið fyrir einmitt þetta. Í stað þess að treysta því að hver breyting sé í lagi keyrir keðjan sömu athuganir í hvert skipti:
- Byggist appið enn án villna?
- Standast sjálfvirku prófin enn?
- Fylgir kóðinn reglum verkefnisins (týpur, sniði, öryggisathuganir)?
Ef einhver athugun mistekst er breytingin stöðvuð áður en hún nær notendum. Því hraðar sem kóðinn þinn breytist, því verðmætari er athugun sem þreytist aldrei og sleppir aldrei skrefi.
Dæmisaga úr daglegu lífi
Hugsaðu um bakarí sem selur brauð til verslana á hverjum morgni.
- Án CI/CD vinnur hver bakari að sínum uppskriftabreytingum í viku, og svo blanda allir þeim saman á föstudagskvöldi og vona að brauðið lyftist enn. Þegar það gerist ekki veit enginn hvers breyting olli því.
- Með CI er sérhver lítil uppskriftabreyting bökuð í prufubrauð strax og athuguð: bragð, þyngd, lögun. Slæm breyting finnst sama dag, og þú veist nákvæmlega hver hún var.
- Með CD fara brauð sem standast skoðun beint í sendibílinn, pökkuð og merkt á sama hátt í hvert sinn, í stað þess að einhver pakki kössum í höndunum klukkan fimm að morgni.
Skoðunin gerir bakarana ekki betri. Hún gerir mistökin þeirra ódýr.
Hvernig CI/CD keðja virkar
Keðja (pipeline) er listi af skrefum sem CI/CD-þjónusta keyrir sjálfkrafa þegar eitthvað gerist, yfirleitt þegar einhver ýtir kóða í geymslu eins og GitHub. Dæmigerð keðja lítur svona út:
| Skref | Hvað gerist | Hvað það grípur |
|---|---|---|
| 1. Kveikja | Kóði er ýttur eða beiðni um sameiningu (pull request) opnuð | — |
| 2. Uppsetning | Ný vél sækir kóðann og pakka hans | Vantandi eða bilaða pakka |
| 3. Smíði | Appið er þýtt eða pakkað | Málfræðivillur, týpuvillur, bilaðar innflutningar |
| 4. Próf | Sjálfvirk próf keyra | Eiginleika sem virka ekki lengur |
| 5. Athuganir | Lint, sniðathuganir, öryggisskoðanir | Stílvandamál, þekkt varasöm pakka, lekin lyklar |
| 6. Innleiðing í forskoðun | Appið fer í prófunareintak af framleiðslu | Vandamál sem koma aðeins fram í raunverulegu umhverfi |
| 7. Innleiðing í framleiðslu | Appið fer í loftið, sjálfkrafa eða eftir samþykki | — |
Hvert skref keyrir á hreinni vél, ekki í fartölvu einhvers, svo „það virkar í minni tölvu“ er ekki lengur afsökun. Ef skref mistekst stöðvast keðjan og lætur þann vita sem gerði breytinguna.
Skrefin eru skilgreind í stillingaskrá sem liggur með kóðanum. Í GitHub Actions er það til dæmis YAML-skrá í möppunni .github/workflows í geymslunni.
Samfelld afhending vs samfelld innleiðing
„CD“ er tvírætt og fólk notar það á báða vegu:
| Samfelld afhending | Samfelld innleiðing | |
|---|---|---|
| Próf keyra sjálfkrafa | Já | Já |
| Útgáfa er pökkuð sjálfkrafa | Já | Já |
| Fer sjálfkrafa í loftið | Nei, manneskja smellir á „gefa út“ | Já, sérhver breyting sem stenst fer í loftið |
| Hentar best fyrir | Flest lítil teymi, öpp með greiðandi notendur | Teymi með sterka prófþekju og vöktun |
Samfelld innleiðing virkar aðeins vel ef prófin eru góð. Ef prófin þín ná ekki yfir útskráningu mun samfelld innleiðing glaðlega senda út bilaða útskráningu.
Vinnudæmi: bókunarapp með keðju
Segjum að þú sért með bókunarapp fyrir hársnyrtistofu og kóðinn er í GitHub-geymslu. Þú biður gervigreindarsmið um „bættu við 10% afslætti fyrir fyrstu bókun viðskiptavina“.
- Breytingin er ýtt á nýja grein og sameiningarbeiðni (pull request) er opnuð.
- Keðjan fer af stað. Hún sækir pakka og smíðar appið. Það gengur.
- Hún keyrir prófin. Eitt próf, „viðskiptavinur sem kemur aftur borgar fullt verð“, mistekst: afslátturinn er settur á alla.
- Sameiningarbeiðnin sýnir rauðan kross. Breytinguna er ekki hægt að sameina.
- Þú biður gervigreindina um að laga það. Hún ýtir leiðréttingu; keðjan keyrir aftur og allt stenst.
- Breytingin er sameinuð. Keðjan innleiðir hana í forskoðunarumhverfi (staging), þar sem þú prófar bókun.
- Þú samþykkir, og hún er innleidd í framleiðslu.
Án keðjunnar hefði skref 3 gerst í veskjum viðskiptavina þinna.
Lykilhugtök
| Hugtak | Merking |
|---|---|
| Keðja (pipeline) | Sjálfvirka röð skrefa sem keyrir á hverri breytingu. |
| Smíði (build) | Að breyta frumkóða í eitthvað sem getur keyrt. |
| Sjálfvirkt próf | Kóði sem athugar að annar kóði geri það sem hann á að gera. |
| Sameiningarbeiðni (pull request, PR) | Tillaga að breytingu sem aðrir (og keðjan) yfirfara áður en hún er sameinuð. Sjá hvað GitHub er. |
| Grein (branch) | Sérstök röð breytinga, svo vinna í vinnslu hafi ekki áhrif á aðalkóðann. |
| Forskoðun (staging) | Einkaeintak af appinu sem speglar framleiðslu, til að athuga breytingar áður en notendur sjá þær. |
| Framleiðsla (production) | Lifandi appið sem notendurnir nota. |
| Afturrúlla (rollback) | Að fara aftur í síðustu virku útgáfu þegar útgáfa klikkar. |
| Græn / rauð smíði | Keyrsla keðju sem stóðst / mistókst. |
Algengar misskilningar
- „CI/CD þýðir að appið mitt sé prófað.“ Keðja keyrir aðeins þau próf sem þú hefur. Ef engin próf eru til staðfestir CI aðeins að appið byggist, ekkert meira. Biddu gervigreindina að skrifa próf fyrir þau flæði sem skipta mestu máli.
- „CI/CD er aðeins fyrir stór fyrirtæki.“ Hýst verkfæri eins og GitHub Actions taka stutta stillingaskrá að setja upp, og lítil teymi nota þau alla daga. Það er prófunin, ekki verkfærið, sem kostar fyrirhöfn.
- „Sjálfvirk innleiðing þýðir að enginn athugar neitt.“ Góðar keðjur bæta við athugunum, þær taka þær ekki í burtu. Mörg teymi halda mannlegu samþykkisskrefi áður en farið er í framleiðslu.
- „Ef keðjan er græn virkar appið.“ Það þýðir að sjálfvirku athuganirnar stóðust. Þú ættir samt að prófa breytinguna sjálf(ur), helst í forskoðun eða á staging.
- „CI/CD kemur í stað afritunar.“ Svo er ekki. Slæm gagnagrunnsflutningur sem stenst próf getur samt skemmt raunveruleg gögn. Hafðu afrit og leið til að rúlla til baka.
Hvað á að biðja gervigreindarsmiðinn þinn um
- „Skrifaðu sjálfvirk próf fyrir nýskráningu, innskráningu og útskráningu, og sýndu mér hvernig á að keyra þau.“
- „Settu upp GitHub Actions-flæði sem setur upp pakka, smíðar appið og keyrir prófin á sérhverri sameiningarbeiðni.“
- „Bættu týpuathugun og lint við keðjuna og láttu hana mistakast við villur.“
- „Útskýrðu á einföldu máli hvað hvert skref keðjunnar gerir.“
- „Hvað gerist ef innleiðing mistekst í miðju? Hvernig rúlla ég til baka?“
- „Gakktu úr skugga um að engin leyndarmál séu skrifuð inn í geymsluna eða prentuð í skrár keðjunnar.“
Ef appið þitt notar API-lykla þarf keðjan þá líka, geymda sem dulkóðuð leyndarmál í CI-verkfærinu, aldrei í stillingaskránni. Sjá umhverfisbreytur og leyndarmál.
CI/CD og Mythex
Mythex keyrir ekki CI-keðju fyrir þig, en það sinnir nokkrum sömu þörfum á sinn hátt:
- Eftirlitsstöðvar (checkpoints). Eftir hverja vel heppnaða umferð fulltrúans vistar Mythex git-eftirlitsstöð, og Snúa aftur á þennan stað rúllar verkefninu til baka ef breyting fór úrskeiðis. Sjá Spjall.
- Prófun á appinu. Skrifaðu
/testog fulltrúinn smellir sig í gegnum lifandi forskoðun þína eins og notandi og skilar skýrslu um biluð flæði. Gagnlegt áður en þú birtir. Sjá Prófun á appinu. - Birting er viljandi skref. Breytingar birtast fyrst í einkaforskoðun; opinbert app uppfærist aðeins þegar þú birtir aftur. Nær samfelldri afhendingu en samfelldri innleiðingu.
- GitHub-samstilling (Pro). Samstilltu verkefnið við GitHub-geymslu og þú getur bætt þínum eigin GitHub Actions-flæðum við til að keyra próf í hvert sinn sem er ýtt. Sjá GitHub og útflutningur.
Fyrir gátlista yfir það sem þú prófar handvirkt áður en þú ferð í loftið, sjá hvernig þú prófar appið þitt fyrir opnun, og fyrir vinnu með útgáfustýringu, hvernig þú notar Git með appi sem gervigreind smíðar.
Spurningar
Fyrir hvað stendur CI/CD?
CI stendur fyrir samfellda samþættingu (continuous integration): hver kóðabreyting er sameinuð oft og byggð og prófuð sjálfkrafa. CD stendur fyrir samfellda afhendingu (continuous delivery) eða samfellda innleiðingu (continuous deployment): breytingar sem standast prófin eru sjálfkrafa undirbúnar fyrir útgáfu (afhending) eða gefnar notendum án handvirks skrefs (innleiðing).
Hver er munurinn á samfelldri afhendingu og samfelldri innleiðingu?
Með samfelldri afhendingu er sérhver breyting sem stenst keðjuna tilbúin til útgáfu, en manneskja ákveður enn hvenær hún fer í loftið. Með samfelldri innleiðingu fer sérhver breyting sem stenst prófin í loftið sjálfkrafa, án samþykkisskrefs.
Þarf ég CI/CD fyrir lítið app sem gervigreind smíðar?
Ekki fyrsta daginn. Lítið app með handfylli notenda kemst af með að prófa í forskoðun og birta handvirkt. CI/CD borgar sig þegar nokkrir breyta kóðanum, þegar raunverulegir viðskiptavinir reiða sig á appið, eða þegar þú heldur áfram að brjóta hluti sem áður virkuðu.
Hvaða verkfæri eru notuð í CI/CD?
Algeng eru GitHub Actions, GitLab CI/CD, CircleCI og Jenkins, auk innbyggðra birtingarkeðja hýsingarvettvanga. Þau gera öll sama grunnverkið: keyra lista af skrefum sjálfkrafa þegar kóðinn breytist.