Ce inseamna CI / CD in domeniul IT?

In ultimele decenii, complexitatea proiectelor elaborate si livrate de companiile de IT a crescut exponential, lucru ce a venit natural odata cu dezvoltarea domeniului in sine, a tehnologiilor tot mai noi si mai numeroase care sunt implicate.

Din cauza complexitatii tot mai mari a proiectelor tehnice, a fost nevoie in paralel de elaborarea unor proceduri foarte bine stabilite, care sa conduca la procese mai rapide si eficiente de livrare a proiectelor din IT. In acest context a aparut si s-a dezvoltat in domeniul informatiei ceea ce este cunoscut drept CI / CD.

Ce inseamna CI / CD?

Desi suna destul de intrigant, fara sa ne duca cu gandul in mod necesar la o metodologie aplicata in procesele din IT, CI / CD chiar asta reprezinta, un mod de lucru care a aparut acum mai bine de doua decenii, derivat din nevoi practice privind rapiditatea si calitatea proceselor, precum este si DevOps-ul.

Fiind acronimul folosit extrem de des de la Continuous Integration / Continuous Delivery (si ulterior Deployment, dar ajungem mai tarziu si acolo), CI / CD este un mod extrem de eficient de organizare si livrare a proiectelor sau a noilor versiuni ale acestora, prin automatizarea unor etape.

Schema generala a procesului de CI / CD. Sursa imaginii.

1. Ce presupune Continuous Integration (CI)?

Integrarea continua, prima componenta fundamentala a procesului general de CI / CD, este acea metoda prin care diversele schimbari sau imbunatatiri ale codului (commit-uri in terminologia Git), sunt integrate direct si automat in fisierul central al proiectului (central repository ori Master branch).

In partea de CI, modificarile sunt trimise, integrate si testate automat, procesul fiind extrem de rapid (daca setup-ul e facut corect), si se evita o mai veche problema numita „integration hell”, cand integrarile se faceau de regula la finalul etapei de dezvoltare si cand trebuiau introduse in repo-ul central, apareau evident multe erori.

Astfel, prin CI se evita o mare parte dintre probleme, erori ale codului, erori de integrare sau defecte care sunt puse in evidenta aproape imediat de testele automate.

Pentru a intelege mai bine aceste notiuni destul de abstracte de teorie, putem sa luam un exemplu concret. Avem un proiect ce presupune un site de e-commerce (magazin online). Exista multi programatori grupati in mai multe echipe, fiecare dezvoltand o anumita componenta a magazinului (unii partea de UI, altii partea de baze de date, unii integrarea platformei cu alte servicii precum curieratul etc.). Rezulta de aici ca intr-o singura zi pot fi aduse la codul proiectului zeci, daca nu chiar sute de modificari, in timp real.

Cand unul dintre developeri face o modificare (un commit) la codul proiectului, acea modificare trece printr-o serie de pasi clar definita: este trecuta printr-un built si ulterior printr-o suita de teste automate care o verifica daca isi face treaba, apoi este integrata in repository-ul principal (Master branch) al proiectului nostru imaginar. Din acest moment, se poate trece ulterior la partea de deployment.

CI este foarte util pentru ca ne permite sa nu mai avem atat de multe ramuri diferite de lucru ce ulterior trebuiesc imbinate (operatia de merge), ci se pot integra aproape instantaneu.

2. Ce este Continuous Delivery (CD)?

In continuarea procesului de CI / CD, a doua componenta extrem de importanta este partea de livrarea continua, ori Continuous Delivery. Aceasta vine in mod natural in completarea etapei precedente, de integrare continua.

Dupa ce codul cu imbunatatiri a trecut prin CI, a fost testat si integrat, acesta ajunge sa fie integrat intr-un repository de pe GitHub, fiind deci testat automat in vederea asigurarii calitatii acestuia (in special pentru a preveni bug-urile de regresie). Ulterior, de pe GitHub sau de oriunde este stocat codul sursa al proiectului, se poate trece oricand la partea de deploy, adica de lansare a proiectului intr-un mediu de productie, la clientii si utilizatorii finali.

Scopul principal al etapei de Continuous Delivery este acela de a asigura cu mijloacele tehnice adecvate un efort cat mai minimal pentru a putea realiza lansarea propriu-zisa (deploy) a noii versiuni a proiectului.

Revenind la exemplul nostru cu site-ul de e-commerce, dupa ce au fost introduse o parte din modificari, au fost testate automat si merge-uite pe GitHub, in etapa de CD se face automat release catre acel repository al codului sursa, moment in care acesta poate fi in orice moment livrat catre mediul de productie, sau in cel de testare live (depinde de la caz la caz).

3. Continuarea procesului prin Continuous Deployment

O alta acceptiune a abrevierii CD este si cea de Continuous Deployment, ultima etapa care incheie ciclul de lucru al CI / CD. Aceasta a treia faza din proces se refera la momentul in care, dupa ce codul nostru a trecut de partea de integrare, testare automata, integrat si consolidat in repo-ul proiectului, ajunge in mod automat in mediul de productie, la clienti.

Partea de Continuous Deployment este foarte folositoare si pentru QA, deoarece ii ajuta sa verifice mult mai usor si rapid daca noul cod/ noua versiune este stabila si functionala, ori daca prezinta bug-uri ce opresc deploy-ul.

Astfel, in exemplu nostru ipotetic, site-ul de e-commerce ajunge acum la utilizatori, trecand prin toata succesiunea de pasi descrisa, in mod (mai) rapid si (mai) eficient, comparativ cu lipsa acestui proces.

De mentionat o diferenta importanta intre Delivery si Deployment: partea de Delivery este manuala, in sensul ca aprobarea pentru aceasta etapa se face de catre un om, pe cand partea de Deployment este complet automatizata, iar daca nu a picat vreun test precedent, atunci modificarea este direct lansata catre clienti.

Etapele din CI / CD. Sursa imaginii.

Instrumente pentru CI / CD

Procesul de CI / CD necesita, in mod firesc, o infrastructura corespunzator adaptata, compusa din mai multe instrumente de lucru specifica. In continuare voi prezenta cateva astfel de instrumente pe care le putem regasi in acest ciclu, cu mentiunea ca numarul lor este unul foarte mare, deci nu este o lista exhaustiva.

Un prim instrument foarte folosit pe partea de CI, unul dintre cele mai cunoscute din aceasta categorie, este Jenkins. Acesta este un tool de tip open-source, avand ca baza o comunitate extrem de mare de contributori. Jenkins a pornit ca un tool pentru CI, fiind dedicat programelor scrise in limbaj Java. Ulterior, Jenkins a fost extins si pe partea de CD cu ajutorul unor plug-in-uri, insa nu e recomandat in acest scop deoarece exista tool-uri specifice pentru aceasta etapa.

Un al doilea tool de CI / CD este Buddy. Acesta a fost realizat in special pentru partea de delivery / deployment pentru web, si este destul de util pentru a face tranzitia spre metodologia DevOps. Buddy are incorporate functii legate de development, testare si deployment pentru cod, fiind un instrument fiabil, stabil si care suporta la randul sau mai multe limbaje de programare si framework-uri diferite.

Bitbucket Pipelines este un alt tool din aceasta categorie. Fiind dezvoltat de compania Atlassian, Bitbucket Pipelines permite atat partea de build, cat si testarea si livrarea (deploy) codului. Deoarece este un produs Atlassian, Bitbucket Pipelines permite totodata integrari extrem de utile cu Jira (cunoscutul tool de project management) si Trello.

De asemenea, GitLab CI/CD este o alta optiune re(cunoscuta) in domeniu care ajuta echipele sa eficientizeze integrarea, testarea, consolidarea si livrarea ulterioara a proiectelor. Aceasta este o solutie buna de lucru cu atat mai mult daca este folosit si platforma lor proprie de versionare si managemetn al codului cu sistem Git, existand si aici mai multe functionalitati utile.

Avantajele CI / CD

Dupa cum am mentionat si incidental de-a lungul prezentarii, metodologia de lucru CI / CD ofera in mod net o serie de avantaje pentru dezvoltarea de proiecte in IT, in general.

Primul si cel mai important avantaj este acela al coerentei acestui ciclu, unde fiecare etapa este foarte bine stabilita si definita, si conduce in final la cel mai inalt nivel de calitate posibil cu cea mai mica cantitate de timp necesara.

Un al doilea avantaj este acela ca, din perspectiva testarii software, procesul de CI / CD conduce la o verificare automatizata a codului, accelerand totodata validarea lui dar si posibilitatea de remediere a bug-urilor, daca sunt de regresie, astfel incat sa nu se piarda timp ulterior. Fiind testat mai des, este deci mai putin probabil ca respectivul cod sa prezinte bug-uri majore.

De asemenea, existand posibilitatea sa facem deploy oricand la noile proiecte, compania poate aduce in timp real imbunatatiri semnificative produselor sale si sa castige o cota de piata mai mare. Nu trebuie sa mai astepte X luni / ani pana livreaza un feature care este cerut in acest moment, lucru ce conduce la cresterea business-ului.

Mai mult, procesul de CI / CD contribuie in mod foarte avantajos la relocare distributiei timpului alocat de developeri si testeri. Acestia nu mai trebuie sa piarda timp cu verificarea manuala a fiecarei linii de cod sau sa faca merge manual in repository, toate aceste lucruri fiind automatizate, iar timpul si atentia lor se indreapta spre lucruri ce tin de analiza, de imbunatatirea proceselor si a ideilor din proiect.

Astfel, se reduce si posibilitatea de burnout a celor implicati, pentru ca dispar o mare parte din problemele ce puteau sa apara in lipsa implementarii CI / CD, precum erori la build, erori de integrare, bug-uri care blocau aplicatia si stopau faza de deploy si multe altele.

Concluzii

In incheiere, procesul de CI / CD este unul esential pentru dezvoltarea moderna a proiectelor din domeniul IT. Acesta nu reprezinta de fapt decat eficientizarea si automatizarea in limita posibilului a unor etape care accelereaza verificarea, integrarea si ulterior livrarea produsului catre clientii finali.

Chiar daca prin rolul avut nu luam parte direct la CI / CD, in special daca suntem la inceputul carierei in IT, este extrem de important sa cunoastem totusi reperele acestui ciclu, deoarece ne va ajuta substantial sa intelegem mai bine munca din IT, cum se livreaza produsele, si cum se poate eficientiza lucrul cu instrumentele adecvate.

Surse consultate si aditionale

Informatii generale despre CI / CD si ce presupune fiecare componenta sunt 1️⃣ aici, 2️⃣ aici si in 3️⃣ acest articol.

Un articol de la GitLab despre CI / CD si avantajele sale.

O lista cu 14 tool-uri de CI / CD.

O privire comparativa asupra Continuous Integration vs. Continuous Delivery vs. Continuous Deployment.

Mircea-Gabriel Macarie

https://www.linkedin.com/in/mirceamacarie/

Tech enthusiast și QA engineer, membru al comunității Vlog De IT. Interesat de testare software (QA) în general, de User Experience și Web Development.

Related post

Leave a Reply

Your email address will not be published. Required fields are marked *