Što je CI/CD? Kontinuirana integracija i kontinuirana isporuka
⚡ Pametni sažetak
Kontinuirana integracija je praksa razvoja softvera u kojoj članovi tima spajaju svoj rad u zajednički repozitorij barem jednom dnevno, a svako potvrđivanje (commit) pokreće automatiziranu izgradnju i testiranje kako bi se rano otkrile pogreške u integraciji.

Što je kontinuirana integracija (CI)?
Kontinuirana integracija je metoda razvoja softvera u kojoj članovi tima integriraju svoj rad barem jednom dnevno. Svaku integraciju provjerava automatizirana izrada koja otkriva pogreške. Koncept je uveden prije više od dva desetljeća kako bi se izbjegao „integracijski pakao“, koji se događa kada se integracija odgodi do kraja projekta.
Nakon commit-a koda, softver se odmah gradi i testira. U velikom projektu s mnogo programera, commit-ovi se događaju mnogo puta dnevno. Sa svakim commit-om, kod se gradi i testira; ako test prođe, provjerava se izrada za implementaciju; a ako implementacija uspije, kod se šalje u produkciju. Ovaj ciklus commit-a, izgradnje, testiranja i implementacije je kontinuiran, što je praksi i dalo ime.
Što je kontinuirana isporuka (CD)?
Kontinuirano isporuke je metoda softverskog inženjerstva u kojoj tim razvija softver u kratkim ciklusima i osigurava da se može pouzdano objaviti u bilo kojem trenutku. Cilj je izgraditi, testirati i objaviti softver dobrom brzinom i učestalošću, smanjujući troškove, vrijeme i rizik isporuke promjena kroz česta ažuriranja produkcije.
Razlika između CI i CD
Kontinuirana integracija je pristup automatskog testiranja svake promjene u kodnoj bazi, dok je kontinuirana isporuka pristup sigurnom i brzom uvođenju promjena poput novih značajki, konfiguracije i ispravka grešaka u produkciju.
Razvoj bez CI u odnosu na razvoj s CI
| Razvoj bez CI | Razvoj s CI |
|---|---|
| Mnogo grešaka | Manje grešaka |
| Rijetke obveze | Redoviti obvezi |
| Rijetka i spora otpuštanja | Redovita radna izdanja |
| Teška integracija | Jednostavna i učinkovita integracija |
| Testiranje se odvija kasno | Testiranje se provodi rano i često |
| Probleme je teže riješiti | Problemi se brže otkrivaju i rješavaju |
| Slaba vidljivost projekta | Bolja vidljivost projekta |
Razlika između kompilacije i kontinuirane integracije
Dok kompilacija samo pretvara kod u strojni jezik, CI obavlja nekoliko širih aktivnosti:
- Integracija baze podataka: Održava bazu podataka i kod sinkroniziranima te automatizira stvaranje baze podataka i testnih podataka.
- Code inspekcija: Osigurava zdravu kodnu bazu, rano identificira probleme i primjenjuje najbolje prakse.
- Automatizirano postavljanje: Omogućuje vam objavljivanje proizvoda u bilo kojem trenutku i stalno ga održava u stanju za demonstraciju.
- Generiranje dokumenta: Održava dokumentaciju ažurnom i izrađuje izvješća i metrike o izgradnji.
- Kompilacija: Pretvara visokorazinski kod u strojni jezik i osigurava njegovo kompajliranje na svakoj ciljnoj platformi.
Idealno bi bilo da se izgradnja izvršava iz naredbenog retka, a ne ovisi o IDE-u, da se odvija kontinuirano na namjenskom CI poslužitelju (ne kao cron zadatak), da se pokreće pri svakoj prijavi i da pruža trenutne povratne informacije bez napora programera.
Što vam je potrebno za provođenje CI procesa?
- Sustav kontrole verzija (VCS): Pouzdana metoda za centralizaciju i očuvanje promjena napravljenih na vašem projektu tijekom vremena.
- Virtualni stroj: Rezervni server ili barem jedan virtualni stroj za izgradnju vašeg sustava.
- Rješenja hostiranih CI alata: Kako bi se izbjeglo upravljanje poslužiteljima, hostana rješenja održavaju cijeli proces i nude lakšu skalabilnost.
- Alati: Ako odaberete samostalno hostanu varijantu, instalirajte CI alat kao što je Jenkins, TeamCity, Bambooili GitLab.
Kako funkcionira kontinuirana integracija?
Stari primjer je Nokia, koja je nekoć koristila postupak zvan noćna izrada. Nakon višestrukih commit-ova od strane mnogih programera tijekom dana, softver se gradio svake noći. Budući da se gradio samo jednom dnevno, izoliranje, identificiranje i ispravljanje pogrešaka u velikoj kodnoj bazi bilo je bolno.
Later Tim je usvojio kontinuiranu integraciju. Softver je izgrađen i testiran čim bi programer potvrdio kod, tako da je svaka greška odmah otkrivena i odgovorni programer mogao ju je brzo ispraviti.
Značajke CI
- Omogućuje vam održavanje jednog izvornog repozitorija.
- Omogućuje vam testiranje klona produkcijskog okruženja, koji se čuva blizu produkcije.
- Pruža stalnu dostupnost trenutne verzije.
- Čini cijeli proces izgradnje, testiranja i implementacije vidljivim svim dionicima.
Zašto koristiti CI?
- Pomaže vam u izradi kvalitetnijeg softvera i provođenju ponovljivih testiranja.
- Skalira rezultate isporuke inženjerskih timova i omogućuje programerima paralelni rad na značajkama.
- Povećava vidljivost i komunikaciju unutar tima.
- Pruža trenutnu povratnu informaciju kada se pojavi problem i smanjuje rizik bržim i predvidljivijim raspoređivanjem.
- Izbjegava zbrku u zadnji čas prilikom objavljivanja.
Najbolje prakse korištenja CI sustava
- Commitajte rano i često i nikada ne commitajte oštećeni kod.
- Odmah ispravite greške u izgradnji i reagirajte na temelju metrika.
- Gradite u svakom ciljnom okruženju i stvarajte artefakte iz svake gradnje.
- Automatizirajte izgradnju tako da ne ovisi o IDE-u.
- Izgradite i testirajte sve kada se promijeni, uključujući shemu baze podataka.
- Održavajte brzu izgradnju i koristite automatizirano postavljanje.
Nedostaci CI
- Za navikavanje na CI poslužitelj potrebno je početno vrijeme postavljanja i obuka.
- Moraju se razviti prikladni postupci testiranja, a dobro izgrađen skup testova zahtijeva značajne resurse.
- Poznati procesi moraju se konvertirati, a potrebni su i dodatni poslužitelji i okruženja.
- Vrijeme čekanja može se pojaviti kada više programera želi istovremeno integrirati svoj kod.
Alati za CI proces
Jenkins
Jenkins je alat za kontinuiranu integraciju otvorenog koda napisan u JavaOmogućuje testiranje u stvarnom vremenu i izvještavanje o izoliranim promjenama u većoj kodnoj bazi te pomaže programerima da brzo pronađu i riješe nedostatke, a istovremeno automatizira testiranje izgradnje.
Bamboo
Bamboo je poslužnik za kontinuiranu integraciju koji izvodi automatiziranu izgradnju, testiranje i objavljivanje na jednom mjestu. Besprijekorno radi s Jirom i Bitbucket i podržava mnoge tehnologije kao što su Docker, Git, SVN, Mercurial i AWS.
TeamCity
TeamCity je poslužitelj za kontinuiranu integraciju s mnogim moćnim značajkama. Održava CI poslužitelj zdravim i stabilnim čak i kada se ne izvode nikakve izgradnje i pruža bolju kvalitetu koda za bilo koji projekt.
