Što je CI/CD? Kontinuirana integracija i kontinuirana isporuka

Što je kontinuirana integracija (CI)?

Kontinuirana integracija je metoda razvoja softvera gdje članovi tima integriraju svoj rad barem jednom dnevno. U ovoj metodi, svaku integraciju provjerava automatizirana izrada kako bi se otkrile pogreške. Ovaj je koncept prvi put 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.

U kontinuiranoj integraciji nakon prihvaćanja koda, softver se gradi i testira odmah. U velikom projektu s mnogo programera, predaje se izvršavaju mnogo puta tijekom dana. Uz svaki commit kod se gradi i testira. Ako je test prošao, verzija se testira za implementaciju. Ako je implementacija uspješna, kod se gura u proizvodnju. Ovo uvrštavanje, izgradnja, testiranje i implementacija je kontinuirani proces, i otuda naziv kontinuirana integracija/deployment.

Što je kontinuirana isporuka (CD)?

Kontinuirano isporuke je metoda softverskog inženjeringa u kojoj tim razvija softverske proizvode u kratkom ciklusu. Osigurava da se softver može lako objaviti u bilo kojem trenutku. Glavni cilj kontinuirane isporuke je izgradnja, testiranje i izdavanje softvera s dobrom brzinom i učestalošću. Pomaže vam smanjiti troškove, vrijeme i rizik isporuke promjena dopuštajući česta ažuriranja u proizvodnji.

Koja je razlika između CI i CD-a?

CI protiv CD-a: Kontinuirana integracija (CI) je pristup testiranja svake promjene u bazi koda automatski, dok je Kontinuirana isporuka (CD) pristup za dobivanje promjena novih značajki, konfiguracije i ispravke grešaka.

Razvoj bez CI u odnosu na razvoj s CI

Evo ključnih razlika između razvoja pomoću CI-ja ili bez CI-ja:

Razvoj bez CI Razvoj s CI
Puno 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 Kontinuirano testiranje integracije događa se rano i često.
Postavljene probleme teže je popraviti Pronađite i riješite probleme brže i učinkovitije.
Slaba vidljivost projekta Bolja vidljivost projekta

Razlika između kompilacije i kontinuirane integracije

Aktivnosti u kontinuiranoj integraciji
Aktivnosti u kontinuiranoj integraciji

Dok kompilacija samo kompilira kod, CI radi sljedeće aktivnosti

DB integracija

  • Osigurajte sinkronizaciju baze podataka i koda
  • Automatizirano kreiranje baze podataka i testnih podataka.

Inspekcija koda

  • Osigurava zdravu bazu koda
  • Rano identificira probleme i primjenjuje najbolje prakse

Automatizirano postavljanje

  • Omogućuje vam puštanje proizvoda u promet bilo kada
  • Kontinuirano demo-sposobno stanje i radi na svakom stroju

Generiranje dokumenata

  • Provjerite je li dokumentacija aktualna
  • Uklanja spaljene programere
  • Proizvodi izvješća o izradi i metrike

Kompilacija

Kompilacija je proces koji računalo poduzima da pretvori kod programskog jezika visoke razine u strojni jezik koji računalo može razumjeti. Osigurava kompilator koda na svakoj ciljnoj platformi.

Kada ću graditi?

  • Pri svakoj prijavi
  • Svaki put kad se ovisnost promijeni

Koji su koraci kontinuirane integracije?

CI proces
CI proces
  • U idealnom slučaju, izgradnja bi trebala dolaziti iz naredbenog retka i ne bi trebala ovisiti o integriranom razvojnom okruženju (IDE).
  • Izgradnja bi se trebala odvijati kontinuirano koristeći namjenski Cl poslužitelj, a ne cron posao.
  • Izgrađeni CI trebao bi se pokrenuti prilikom svake prijave, a ne samo u ponoć
  • Izrada bi trebala pružiti trenutne povratne informacije i ne zahtijeva napor razvojnog programera
  • Identificirajte ključne metrike i pratite ih vizualno. Što je još važnije, odmah djelujte na njih

Što vam je potrebno za provođenje CI procesa?

Provedite CI proces

Ovdje su ključni elementi koji su vam potrebni za izvođenje cijelog CI procesa:

  • Sustav kontrole verzija (VCS): Nudi pouzdanu metodu za centralizaciju i očuvanje promjena napravljenih na vašem projektu tijekom vremena.
  • Virtualni stroj: Trebali biste imati rezervni poslužitelj ili barem jedan virtualni stroj za izgradnju vašeg sustava.
  • Hostirana rješenja CI alata: Kako biste izbjegli poslužitelje ili virtualne strojeve, trebali biste se odlučiti za hostirana rješenja CI alata. Ovaj alat pomaže u održavanju cijelog procesa i nudi lakšu skalabilnost.
  • Alati: Ako odaberete varijantu s vlastitim hostingom, morat ćete instalirati jednu od mnogih CI alati kao Jenkins, TeamCity, Bamboo, GitLab itd.

Kako funkcionira kontinuirana integracija?

Sigurno ste svjesni starog telefona Nokia. Nokia je provodila postupak koji se naziva noćna izgradnja. Nakon višestrukih obveza različitih programera tijekom dana, softver se gradio svake noći. Budući da se softver izrađuje samo jednom dnevno, velika je muka izolirati, identificirati i popraviti pogreške u velikoj bazi kodova.

Later, usvojili su pristup kontinuirane integracije. Softver je napravljen i testiran čim je programer upisao kod. Ako se otkrije bilo kakva pogreška, dotični programer može brzo popraviti nedostatak.

Primjer kontinuirane integracije
Primjer kontinuirane integracije

Značajke CI

Evo važnih značajki i prednosti kontinuirane integracije:

  • Omogućuje vam održavanje samo jednog izvornog repozitorija
  • Možete testirati klon proizvodnog CI okruženja
  • Izgrađeno okruženje mora biti blisko proizvodnom okruženju.
  • Jedna od prednosti kontinuirane integracije je stalna dostupnost trenutne verzije
  • Kompletan proces izgradnje, testiranja i implementacije trebao bi biti vidljiv svim nositeljima skupova.

Zašto koristiti CI?

Evo važnih razloga za korištenje kontinuirane integracije:

  • Pomaže vam da izgradite kvalitetniji softver
  • CI proces pomaže povećati broj zaposlenih i učinak isporuke inženjerskih timova.
  • CI omogućuje programerima softvera da rade neovisno na značajkama paralelno.
  • Pomaže vam da provedete ponovljivo testiranje
  • Povećajte vidljivost omogućujući veću komunikaciju
  • Pomaže u razvoju proizvoda koji se potencijalno može isporučiti za potpuno automatiziranu izradu
  • Pomaže vam smanjiti rizike čineći implementaciju bržom i predvidljivijom
  • trenutna povratna informacija kada problem stigne
  • Izbjegnite zabunu u zadnji čas oko datuma i vremena izlaska

Najbolje prakse korištenja CI sustava

Ovdje su neke važne najbolje prakse tijekom implementacije

  • Počinite rano i počinite često nikad ne pokrenite pokvareni kod
  • Odmah popravite greške u izradi
  • Djelujte prema metrici
  • Ugradite svako ciljno okruženje Stvorite artefakte iz svake građevine
  • Izrada softvera mora biti izvedena na način da se može automatizirati
  • Nemojte ovisiti o IDE-u
  • Izgradite i testirajte sve kada se promijeni
  • Shema baze podataka računa se kao sve
  • Pomaže vam da saznate ključne metrike i vizualno ih pratite
  • Prijava često i rano
  • Jača kontrola izvornog koda
  • Kontinuirana integracija izvodi jedinične testove svaki put kada predate kod
  • Automatizirajte izradu i testirajte sve
  • Održavajte brzu izgradnju uz automatiziranu implementaciju

Nedostaci CI

Evo nedostataka/nedostataka procesa kontinuirane integracije:

  • Za upoznavanje s Cl poslužiteljem potrebno je početno vrijeme postavljanja i obuka
  • Razvoj odgovarajućih ispitnih postupaka je ključan
  • Dobro razvijen testni paket zahtijevao je mnogo resursa za Cl poslužitelj
  • Pretvorba poznatih procesa
  • Zahtijeva dodatne poslužitelje i okruženja
  • Do vremena čekanja može doći kada više programera želi integrirati svoj kod otprilike u isto vrijeme

Alati za CI proces

Evo nekih najvažnijih CI/CD alata:

Jenkins

Jenkins

Jenkins je softver za kontinuiranu integraciju otvorenog koda. Napisana je pomoću Java programski jezik. Olakšava testiranje u stvarnom vremenu i izvješćivanje o izoliranim promjenama u masovnijoj bazi koda. Ovaj softver pomaže programerima da brzo pronađu i riješe nedostatke u svojoj bazi koda i automatiziraju testiranje svojih verzija.

Bamboo

Bamboo

Bamboo je poslužitelj za kontinuiranu integraciju koji izvodi – automatsku izgradnju, testiranje i izdanja na jednom mjestu. Radi besprijekorno s JIRA softverom i Bitbucketom. Bamboo podržava mnoge jezike i tehnologije kao što su CodeDeply, Docker, Git, SVN, Mercurial, AWS i Amazon S3 kante.

TeamCity

TeamCity

TeamCity je poslužitelj kontinuirane integracije koji podržava mnoge moćne značajke. Održava CI poslužitelj zdravim i stabilnim čak i kada nijedna verzija nije pokrenuta. Omogućuje bolju kvalitetu koda za svaki projekt

rezime

  • Definicija kontinuirane integracije: Kontinuirana integracija je metoda razvoja softvera gdje članovi tima mogu integrirati svoj rad barem jednom dnevno
  • CI/CD što znači kombinaciju kontinuirane integracije i kontinuirane isporuke ili kontinuirane implementacije.
  • Razvoj bez CI-ja stvara puno grešaka, dok razvoj s CI-jem nudi manje grešaka
  • Važne aktivnosti kontinuirane integracije su 1) integracija baze podataka, 2) inspekcija koda, 3) automatizirana implementacija, generiranje dokumenata i kompilacija.
  • Izgradnja bi se trebala odvijati kontinuirano koristeći namjenski Cl poslužitelj, a ne cron posao.
  • Važni elementi CI-ja su 1) sustav kontrole verzija 2) virtualni stroj 3) rješenja host CI alata 4) alati
  • Sustav kontinuirane integracije omogućuje vam održavanje samo jednog izvornog repozitorija
  • CI/CD proces vam pomaže da izgradite kvalitetniji softver
  • Najvažnije najbolje prakse Azure Kontinuirani integracijski proces je rano uvrštavanje i često nikad ukidanje pokvarenog koda
  • Glavni nedostatak od CI/CD cjevovod procesa je da je dobro razvijen testni paket zahtijevao mnogo resursa za Cl poslužitelj
  • Jenkins, Bambook, i Team City neki su korisni AWS Continuous Integracijski alati.