Ce este CI/CD? Integrare continuă și livrare continuă
⚡ Rezumat inteligent
Integrarea continuă este o practică de dezvoltare software în care membrii echipei își îmbină munca într-un depozit partajat cel puțin zilnic, iar fiecare commit declanșează o compilare și o testare automată pentru a detecta din timp erorile de integrare.

Ce este Integrarea Continuă (CI)?
Integrare continuă este o metodă de dezvoltare software prin care membrii echipei își integrează munca cel puțin o dată pe zi. Fiecare integrare este verificată printr-o versiune automată care detectează erorile. Conceptul a fost introdus în urmă cu peste două decenii pentru a evita „iadul integrării”, care se întâmplă atunci când integrarea este amânată până la sfârșitul unui proiect.
După o validare a codului, software-ul este construit și testat imediat. Într-un proiect mare, cu mulți dezvoltatori, validarea are loc de mai multe ori pe zi. Cu fiecare validare, codul este construit și testat; dacă testul trece, versiunea este verificată pentru implementare; iar dacă implementarea are succes, codul este pus în producție. Acest ciclu de validare, construire, testare și implementare este continuu, ceea ce dă numele practicii.
Ce este livrarea continuă (CD)?
Livrarea continuă este o metodă de inginerie software în care o echipă dezvoltă software în cicluri scurte și se asigură că acesta poate fi lansat în mod fiabil în orice moment. Scopul este de a construi, testa și lansa software cu o viteză și o frecvență bune, reducând costul, timpul și riscul de livrare a modificărilor prin actualizări frecvente de producție.
Diferența dintre CI și CD
Integrare continuă este o abordare de testare automată a fiecărei modificări a bazei de cod, în timp ce Livrarea Continuă este o abordare pentru a introduce în producție modificări precum noi caracteristici, configurații și remedieri de erori în siguranță și rapid.
Dezvoltare fără IC vs. Dezvoltare cu IC
| Dezvoltare fără CI | Dezvoltare cu CI |
|---|---|
| O mulțime de bug-uri | Mai puține bug-uri |
| Comite rare | Comite regulate |
| Eliberări rare și lente | Lansări regulate de lucru |
| Integrare dificilă | Integrare ușoară și eficientă |
| Testarea are loc târziu | Testarea are loc devreme și des |
| Problemele sunt mai greu de rezolvat | Problemele sunt găsite și rezolvate mai rapid |
| Vizibilitatea slabă a proiectului | O mai bună vizibilitate a proiectului |
Diferența dintre compilare și integrare continuă
În timp ce compilarea convertește doar codul în limbaj mașină, CI îndeplinește câteva activități mai ample:
- Integrare bază de date: Menține sincronizarea bazei de date și a codului și automatizează crearea bazei de date și a datelor de testare.
- Code inspecţie: Asigură o bază de cod sănătoasă, identifică problemele din timp și aplică cele mai bune practici.
- Implementare automată: Vă permite să lansați produsul oricând și îl menține într-o stare demo-abilabilă în permanență.
- Generarea documentelor: Menține documentația la zi și generează rapoarte și indicatori de construcție.
- Compilare: Convertește codul de nivel înalt în limbaj mașină și asigură compilarea acestuia pe fiecare platformă țintă.
În mod ideal, compilarea se execută din linia de comandă, în loc să depindă de un IDE, se întâmplă continuu pe un server CI dedicat (nu o activitate cron), este declanșată la fiecare check-in și oferă feedback imediat fără efortul dezvoltatorului.
De ce aveți nevoie pentru a desfășura procesul de CI?
- Sistemul de control al versiunilor (VCS): O metodă fiabilă pentru centralizarea și păstrarea modificărilor aduse proiectului dumneavoastră în timp.
- Mașină virtuală: Un server de rezervă sau cel puțin unul mașină virtuală pentru a vă construi sistemul.
- Soluții de instrumente CI găzduite: Pentru a evita gestionarea serverelor, soluțiile găzduite mențin întregul proces și oferă o scalabilitate mai ușoară.
- Unelte: Dacă alegeți o variantă auto-găzduită, instalați un instrument CI, cum ar fi Jenkins, TeamCity, Bamboo, sau GitLab.
Cum funcționează integrarea continuă?
Un exemplu vechi este Nokia, care folosea cândva o procedură numită nightly build. După multiple commit-uri de către mulți dezvoltatori pe parcursul zilei, software-ul era construit în fiecare noapte. Deoarece era construit o singură dată pe zi, izolarea, identificarea și corectarea erorilor într-o bază de cod mare era dificilă.
Later Echipa a adoptat integrarea continuă. Software-ul a fost construit și testat imediat ce un dezvoltator a completat codul, astfel încât orice eroare a fost detectată imediat, iar dezvoltatorul responsabil a putut remedia defectul rapid.
Caracteristicile CI
- Vă permite să mențineți un depozit cu o singură sursă.
- Vă permite să testați o clonă a mediului de producție, păstrată aproape de producție.
- Oferă disponibilitate constantă a unei versiuni curente.
- Face ca întregul proces de construire, testare și implementare să fie vizibil pentru toate părțile interesate.
De ce să folosiți CI?
- Te ajută să construiești software de calitate superioară și să efectuezi teste repetabile.
- Scalează rezultatul livrării echipelor de inginerie și permite dezvoltatorilor să lucreze la funcții în paralel.
- Crește vizibilitatea și comunicarea în cadrul echipei.
- Oferă feedback imediat atunci când apare o problemă și reduce riscul, făcând implementarea mai rapidă și mai previzibilă.
- Evită confuziile de ultim moment la momentul lansării.
Cele mai bune practici de utilizare a sistemelor CI
- Commiteți codul devreme și des și nu comitați niciodată codul defect.
- Remediați imediat erorile de compilare și acționați în funcție de indicatori.
- Construiește în fiecare mediu țintă și creează artefacte din fiecare compilare.
- Automatizează compilarea astfel încât să nu depindă de un IDE.
- Construiți și testați totul atunci când se modifică, inclusiv schema bazei de date.
- Mențineți construirea rapidă și utilizați implementarea automată.
Dezavantajele CI
- Este nevoie de timp inițial de configurare și instruire pentru a vă obișnui cu un server CI.
- Trebuie dezvoltate proceduri de testare adecvate, iar o suită de teste bine construită necesită resurse semnificative.
- Procesele familiare trebuie convertite și sunt necesare servere și medii suplimentare.
- Pot apărea timpi de așteptare atunci când mai mulți dezvoltatori doresc să își integreze codul în același timp.
Instrumente pentru procesul de integrare continuă
Jenkins
Jenkins este un instrument de integrare continuă open-source scris în JavaFacilitează testarea și raportarea în timp real a modificărilor izolate într-o bază de cod mai mare și ajută dezvoltatorii să găsească și să rezolve rapid defectele, automatizând în același timp testarea versiunii.
Bamboo
Bamboo este un server de compilare cu integrare continuă care efectuează compilare, testare și lansare automată într-un singur loc. Funcționează perfect cu Jira și Bitbucket și suportă multe tehnologii precum Docker, Git, SVN, Mercurial și AWS.
TeamCity
TeamCity este un server de integrare continuă cu multe funcții puternice. Menține serverul CI sănătos și stabil chiar și atunci când nu rulează nicio compilare și oferă o calitate mai bună a codului pentru orice proiect.
