Šta je CI/CD? Kontinuirana integracija i isporuka jednostavno
CI/CD je način isporuke softvera u kojem se svaka promjena koda automatski gradi, testira i, ako prođe, priprema za izdanje ili objavljuje. CI (continuous integration, kontinuirana integracija) znači da se promjene često spajaju i provjeravaju automatskim testovima svaki put. CD (continuous delivery ili deployment, kontinuirana isporuka ili postavljanje) znači da se promjene koje prođu pakuju i guraju prema korisnicima uz malo ili nimalo ručnog rada.
Poenta je jednostavna: uhvatiti greške nekoliko minuta nakon što su napravljene, a ne sedmicama kasnije, kada ih kupac otkrije.
Zašto je CI/CD važan kad gradite uz AI
AI alati za izradu brzo prave promjene u kodu. Jedan prompt može dotaknuti deset fajlova. Ta brzina je odlična dok promjena na stranici za plaćanje tiho ne pokvari prijavu, a niko to ne primijeti dok vam korisnik ne napiše e-mail.
CI/CD je mreža sigurnosti upravo za to. Umjesto da vjerujete da je svaka promjena u redu, pipeline izvršava iste provjere svaki put:
- Da li se aplikacija i dalje gradi bez grešaka?
- Da li automatski testovi i dalje prolaze?
- Da li kod prati pravila projekta (tipovi, formatiranje, sigurnosne provjere)?
Ako bilo koja provjera ne prođe, promjena se zaustavlja prije nego dođe do korisnika. Što su promjene koda brže, to je vrijednija provjera koja nikada ne posustaje i ne preskače korak.
Svakodnevna analogija
Zamislite pekaru koja svako jutro prodaje hljeb prodavnicama.
- Bez CI/CD-a, svaki pekar sedmicu radi na svojim tweakovima recepta, pa sve to spoje u petak uveče i nadaju se da će hljeb narasti. Kada ne naraste, niko ne zna čija je promjena to uzrokovala.
- Uz CI, svaka mala promjena recepta odmah se peče u probnom hlebu i provjerava: ukus, težina, oblik. Loša promjena se uhvati istog dana, i tačno znate koja je bila.
- Uz CD, hlebovi koji prođu kontrolu odlaze direktno u dostavno vozilo, zapakovani i označeni uvijek na isti način, umjesto da ih neko pakuje ručno u pet ujutro.
Kontrola ne čini pekare boljim. Ona čini njihove greške jeftinima.
Kako radi CI/CD pipeline
Pipeline je lista koraka koje CI/CD servis automatski izvršava kada se nešto dogodi, obično kada neko gurne kod u repozitorijum poput GitHuba. Tipičan pipeline izgleda ovako:
| Korak | Šta se dešava | Šta uhvati |
|---|---|---|
| 1. Okidač | Kod je gurnut ili je otvoren pull request | — |
| 2. Instalacija | Čista mašina preuzima kod i njegove zavisnosti | Nedostajuće ili pokvarene pakete |
| 3. Build | Aplikacija se kompajlira ili pakuje | Sintaksne i tipske greške, pokvarene importe |
| 4. Testovi | Pokreću se automatski testovi | Funkcije koje više ne rade |
| 5. Provjere | Linting, formatiranje, sigurnosni skenovi | Probleme sa stilom, poznate ranjive pakete, procurile ključeve |
| 6. Deploy na staging | Aplikacija ide na testnu kopiju produkcije | Probleme koji se pokažu samo u pravom okruženju |
| 7. Deploy na produkciju | Aplikacija ide uživo, automatski ili nakon odobrenja | — |
Svaki korak se izvršava na čistoj mašini, a ne na nečijem laptopu, pa izgovor „radi na mom računaru“ prestaje da važi. Ako korak ne uspije, pipeline se zaustavlja i javlja onome ko je napravio promjenu.
Koraci su definisani u konfiguracijskom fajlu koji živi uz kod. U GitHub Actions, na primjer, to je YAML fajl u folderu .github/workflows repozitorijuma.
Kontinuirana isporuka vs kontinuirano postavljanje
„CD“ je dvosmislen, i ljudi ga koriste na oba načina:
| Kontinuirana isporuka | Kontinuirano postavljanje | |
|---|---|---|
| Testovi se pokreću automatski | Da | Da |
| Izdanje se automatski pakuje | Da | Da |
| Ide uživo automatski | Ne, osoba klikne „izdaj“ | Da, svaka promjena koja prođe se objavljuje |
| Dobro za | Većinu malih timova, aplikacije s plaćajućim korisnicima | Timove s jakim pokrivanjem testovima i praćenjem |
Kontinuirano postavljanje dobro funkcioniše samo ako su testovi dobri. Ako vaši testovi ne pokrivaju blagajnu, kontinuirano postavljanje će rado isporučiti pokvarenu blagajnu.
Praktičan primjer: aplikacija za rezervacije s pipeline-om
Recimo da imate aplikaciju za rezervacije u salonu, a kod je u GitHub repozitorijumu. Od AI alata zatražite: „Dodaj 10% popusta za kupce koji su prvi put došli.“
- Promjena se gura u novu granu i otvara se pull request.
- Pipeline počinje. Instalira pakete i gradi aplikaciju. Ovo prolazi.
- Pokreću se testovi. Jedan test, „kupac koji se vraća plaća punu cijenu“, ne uspijeva: popust se primjenjuje na sve.
- Pull request pokazuje crveni krst. Promjena se ne može spojiti.
- Zamolite AI da ispravi. On gura ispravku; pipeline se ponovo pokreće i sve prolazi.
- Promjena se spaja. Pipeline je postavlja na staging okruženje, gdje probate test rezervaciju.
- Odobravate, i ide na produkciju.
Bez pipeline-a, korak 3 bi se dogodio u novčanicima vaših kupaca.
Ključni pojmovi
| Pojam | Značenje |
|---|---|
| Pipeline | Automatizovan niz koraka koji se izvršava na svaku promjenu. |
| Build | Pretvaranje izvornog koda u nešto što se može pokrenuti. |
| Automatski test | Kod koji provjerava da li drugi kod radi kako treba. |
| Pull request (PR) | Predložena promjena koju drugi (i pipeline) pregledaju prije spajanja. Pogledajte šta je GitHub. |
| Grana (branch) | Zasebna linija promjena, da rad u toku ne utiče na glavni kod. |
| Staging | Privatna kopija vaše aplikacije koja oslikava produkciju, za provjeru promjena prije nego ih korisnici vide. |
| Produkcija | Živa aplikacija koju koriste vaši korisnici. |
| Rollback | Vraćanje na prethodnu radnu verziju kada izdanje pođe po zlu. |
| Zeleni / crveni build | Pokretanje pipeline-a koje je prošlo / nije uspjelo. |
Česte zablude
- „CI/CD znači da je moja aplikacija testirana.“ Pipeline pokreće samo testove koje imate. Ako nema testova, CI dokazuje samo da se aplikacija gradi, ništa više. Zamolite AI da napiše testove za tokove koji su najvažniji.
- „CI/CD je samo za velike kompanije.“ Hostovani alati poput GitHub Actions trebaju kratak konfiguracijski fajl za podešavanje, i mali timovi ih koriste svakodnevno. Napor donose testovi, a ne alat.
- „Automatsko postavljanje znači da niko ništa ne provjerava.“ Dobri pipeline-i dodaju provjere, a ne uklanjaju ih. Mnogi timovi zadržavaju ljudsko odobravanje prije produkcije.
- „Ako je pipeline zelen, aplikacija radi.“ To znači da su automatske provjere prošle. I dalje biste trebali sami isprobati promjenu, idealno u pregledu ili na stagingu.
- „CI/CD zamjenjuje backupe.“ Ne zamjenjuje. Loša migracija baze koja prođe testove i dalje može oštetiti stvarne podatke. Zadržite backupe i način da se vratite na prethodno stanje.
Šta tražiti od vašeg AI alata za izradu
- „Napiši automatske testove za registraciju, prijavu i blagajnu, i pokaži mi kako ih pokrenuti.“
- „Postavi GitHub Actions workflow koji instalira zavisnosti, gradi aplikaciju i pokreće testove na svakom pull requestu.“
- „Dodaj provjeru tipova i linter u pipeline i neka padne na greškama.“
- „Objasni običnim jezikom šta svaki korak pipeline-a radi.“
- „Šta se dešava ako deploy padne napola? Kako da se vratim?“
- „Provjeri da nijedna tajna nije upisana u repozitorijum niti ispisana u logovima pipeline-a.“
Ako vaša aplikacija koristi API ključeve, pipeline ih također treba, pohranjene kao šifrovane tajne u CI alatu, nikada u konfiguracijskom fajlu. Pogledajte varijable okruženja i tajne.
CI/CD i Mythex
Mythex ne pokreće CI pipeline za vas, ali pokriva nekoliko istih potreba na svoj način:
- Checkpointi. Nakon svakog uspješnog poteza agenta, Mythex sačuva git checkpoint, a Vrati na ovu tačku vraća projekat unazad ako je promjena pošla po zlu. Pogledajte Chat.
- App Testing. Ukucajte
/testi agent klikće kroz vaš živi pregled kao korisnik i prijavljuje pokvarene tokove, što je korisno prije svakog objavljivanja. Pogledajte App Testing. - Objavljivanje je namjeran korak. Promjene se prvo pojavljuju u privatnom pregledu; vaša javna aplikacija se ažurira tek kada ponovo objavite, što je bliže kontinuiranoj isporuci nego kontinuiranom postavljanju.
- GitHub sinhronizacija (Pro). Sinhronizujte projekat s GitHub repozitorijumom i možete dodati vlastite GitHub Actions workflow-e za pokretanje testova pri svakom guranju. Pogledajte GitHub i izvoz.
Za listu šta testirati ručno prije lansiranja pogledajte kako testirati aplikaciju prije lansiranja, a za rad s verzijama kako koristiti Git s aplikacijom izgrađenom uz AI.
Pitanja
Šta znači CI/CD?
CI znači kontinuirana integracija: svaka promjena koda se često spaja i automatski gradi i testira. CD znači kontinuirana isporuka ili kontinuirano postavljanje: promjene koje prođu testove automatski se pripremaju za izdanje (isporuka) ili puštaju korisnicima bez ručnog koraka (postavljanje).
Koja je razlika između kontinuirane isporuke i kontinuiranog postavljanja?
Kod kontinuirane isporuke svaka promjena koja prođe pipeline spremna je za izdanje, ali osoba i dalje odlučuje kada će biti puštena uživo. Kod kontinuiranog postavljanja svaka promjena koja prođe ide uživo automatski, bez ljudskog odobravanja.
Treba li mi CI/CD za malu aplikaciju izgrađenu uz AI?
Ne od prvog dana. Mala aplikacija s nekoliko korisnika može proći s testiranjem u pregledu i ručnim objavljivanjem. CI/CD se isplati kada više ljudi mijenja kod, kada stvarni kupci zavise od aplikacije ili kada stalno kvarite stvari koje su ranije radile.
Koji se alati koriste za CI/CD?
Uobičajeni su GitHub Actions, GitLab CI/CD, CircleCI i Jenkins, plus ugrađeni deploy pipeline-i hosting platformi. Svi obavljaju isti osnovni posao: automatski izvršavaju listu koraka kad god se kod promijeni.