Scalare și optimizare CI/CD

Implementarea unui flux de lucru CI/CD pentru dezvoltarea aplicațiilor devine din ce în ce mai populară. În același timp, totuși, scalarea și optimizarea CI/CD reprezintă o provocare.

Astăzi vom discuta despre ce este această provocare și vom explora exact cum putem scala și optimiza CI/CD. Deci, urmați-vă!

În zilele noastre, dezvoltarea aplicațiilor se face de obicei în echipe formate din mai mulți dezvoltatori. Fiecare persoană sau echipă își are rolul său în proiect, avansând pe partea sa dedicată.

Ne aflăm apoi la sfârșitul proiectului cu mai multe bucăți de cod de compilat. În funcție de metodele de lucru ale fiecăruia, se poate pierde mult timp gestionând această integrare.

CI/CD, Integrarea continuă și Livrarea/Implementarea continuă reprezintă o soluție la această problemă și asigură că actualizările sunt lansate fără întârzieri și conflicte inutile. Să înțelegem acest proces.

Integrare continuă

CI sau Integrare continuă grupează procesele care vizează publicarea continuă a modificărilor și completărilor de cod la o ramură comună a proiectului. Permite testarea codului și îmbunătățirile și modificările în timp real. Scopul este de a testa fiecare element prin crearea de teste.

Această măsură permanentă face posibil să nu se verifice totul într-un singur bloc la sfârșit și să se evite lucrul la prea multe elemente simultan. Efectuarea testelor unitare este, prin urmare, foarte utilă pentru a asigura acest lucru. Astfel, este mai ușor să detectați erorile, asigurându-vă că codul se compilează bine și nu creează regresii.

Livrare continuă

Livrarea continuă sau CD-ul reunește integrarea și testarea continuă care pot fi incluse în containere și puse în producție. Adică, adună aceste coduri și testele efectuate și le pune în producție prin automatizare.

Chiar dacă necesită acțiune umană, se automatizează punând tot ceea ce s-a făcut „la aer” într-un mod integrat și complet. Concret, odată cu distribuția continuă, aplicația noastră este dezvoltată astfel încât să poată fi pusă în producție, indiferent când.

  8 Cel mai bun editor HTML în timp real pentru dezvoltare web

Implementare continuă

În timp ce conceptele de livrare continuă și implementare continuă sunt similare, există diferențe. Dacă obiectivul lor este același, adică implementarea aplicației în producție, mijloacele de realizare diferă. Ceea ce separă livrarea continuă de implementarea continuă este lansarea.

Într-adevăr, implementarea continuă face posibilă implementarea directă a fiecărei modificări care traversează diferitele etape ale conductei noastre. În timpul livrării continue, este necesar un pas de validare umană pentru ca implementarea să aibă loc.

Scalare CI/CD

Când numărul de microservicii crește, devine aproape inevitabil să scalați CI/CD-ul. Numărul crescut de microservicii are ca rezultat diferite conducte conectate la un singur depozit git, ceea ce crește sarcina serverului CI și scade performanța.

Pentru a scala CI/CD, este necesar să se creeze o conductă de dezvoltare standardizată și automată pentru toate echipele și, de acolo, să se asigure calitatea livrărilor de dezvoltatori individuali și a livrărilor de echipe. De asemenea, facilitează gestionarea conductei.

Scalare poate fi realizată prin definirea unui proces CI pentru executarea testelor unitare și validarea calității codului livrat.

Urmează un proces CD pentru construirea imaginilor și implementarea lor în medii în mod continuu și, în final, definirea unui proces pentru construirea imaginilor și implementarea lor în mediul de producție.

Pași pentru scalarea CI/CD

Primul pas este alinierea conductei cu arhitecții, implicând liderii de echipă. Urmează maparea ramurilor Git la medii (dezvoltare -> dezvoltare și master -> [homologation and production]). Urmează apoi lansarea CI Job la fiecare Pull Request și CD Job la fiecare schimbare a ramurilor mapate.

Un flux de joburi poate fi creat atât pentru CI cât și pentru CD care urmează să fie urmat.

Fluxul de locuri de muncă CI se dezvoltă în 7 pași:

  • Consultați filiala sursă și destinație Pull Request;
  • Verifică dacă îmbinarea nu are conflicte care necesită rezolvare manuală;
  • Efectuați teste unitare;
  • Construiți pachetul pentru a verifica integritatea și dacă codul este compilabil;
  • Validarea calității codului de declanșare;
  • Creșteți și trimiteți versiunea proiectului în ramura sursă;
  • Notificați depozitul Pull Request Git de succes sau eșec prin apelul Webhook sau API Rest (depozitul Git).

Fluxul de lucrări CD urmează următoarea cale:

  • Sucursala notificată este verificată.
  • Artefactul este construit folosind instrumentul de construire specific al proiectului la care se lucrează.
  • După ce apare artefactul, proiectele bibliotecii sunt trimise la Nexus pentru stocarea artefactului, iar fluxul este terminat.
  Monitorizați-vă site-ul și infrastructura aplicațiilor cu Uptime Kuma [Self-Hosted Solution]

Se efectuează următoarele acțiuni:

Pasul 1: O imagine Docker este creată pentru artefactul generat, aplicând versiunea artefactului imaginii Docker.

Pasul 2: Imaginea este încărcată în registrul Docker.

Pasul 3: Implementare prin lansarea imaginilor prin Kubernetes.

Pentru proiecte de aplicație care se află într-un mediu de aprobare/producție, urmați pașii 1 și 2 de mai sus și apoi următorii:

  • Implementați prin lansarea imaginilor prin Kubernetes în mediul de aprobare;
  • Lucrarea ia o pauză pentru a aștepta ca lansarea să fie aprobată pentru producție;
  • Dacă este aprobată, imaginea care este aprobată este promovată pentru producție;
  • În caz contrar, derulează înapoi imaginea pentru aprobare.

Optimizare CI/CD

CI/CD îmbunătățește ciclul de dezvoltare a aplicațiilor și rezolvă problema cauzată de integrarea codului nou și creșterea frecvenței de livrare.

Iată cum puteți optimiza în continuare utilizarea CI/CD:

Prioritizează remedierea unei versiuni corupte

Când o construcție se defectează, remedierea acesteia ar trebui să fie prioritatea echipei. Dacă versiunea nu poate fi remediată în câteva minute, echipa trebuie să decidă dacă elimină codul sau dezactivează semnalizarea caracteristicii.

Ideea din spatele remedierii unei build rupte este că build-ul va produce întotdeauna cod de lucru care poate fi lansat.

Mici implementări frecvente

În general, stabilitatea aplicației este în pericol de fiecare dată când are loc o implementare. Prin urmare, avem tendința de a distanța implementările unul de celălalt. Problema acestei abordări este că acumulăm prea multe schimbări. Una dintre aceste modificări ar putea merge prost, forțându-ne să le anulăm pe celelalte care funcționau.

Aplicați modelul strangler și împărțiți modificările complicate în unele mici și simple. Dacă implementați mai des și lucrați în loturi mici, riscul de implementare este mai mic.

Automatizați testele QA pentru atenuarea riscurilor

Probabil că toți am fost implicați în scenariul „a lucrat la mașina mea locală”, deoarece mediile de dezvoltare locală diferă adesea. Pot exista multe lucruri diferite între mediul local și locul în care intri în producție. Puteți optimiza CI/CD prin automatizarea sarcinilor de asigurare a calității (QA), cum ar fi testarea browserului, atenuând riscul ca o eroare să ajungă la aplicația live.

Aveți încredere în testele automate

Pentru a valida momentul în care un dezvoltator integrează cod nou, CI se bazează pe o suită de testare automată și fiabilă. Dacă trebuie să compilați cod, primul test este că se compilează. Apoi puteți adăuga câte teste considerați critice.

  Cum să vedeți o „Foaie de cheat” ascunsă a comenzilor rapide de la tastatură pe iPad

Câte teste ar trebui incluse? Pentru a determina acest lucru, amintiți-vă că scopul CI este de a oferi feedback cât mai repede posibil. Dacă un dezvoltator trebuie să aștepte o oră pentru a primi feedback, acesta nu va funcționa. Întotdeauna veți rata lucruri, dar când observați o eroare în producție, creați un caz de testare și includeți-l în bucla CI.

Luați în considerare întotdeauna securitatea

Luați în considerare securitatea unui instrument CI/CD, deoarece se integrează în configurațiile sau mediile existente. CI/CD necesită ca toate instrumentele de testare de securitate să fie apelate programatic și rezultatele lor agregate într-un singur loc. Căutați instrumente care au API-uri pentru audituri automate de criptare.

Beneficiile scalarii si optimizarii CI/CD

Pe lângă creșterea eficienței echipelor de dezvoltare, scalarea și optimizarea CI/CD au și alte beneficii, dintre care unele sunt:

Regim redus

Orele de dezvoltare sunt de obicei facturabile, dar cum rămâne cu timpul petrecut pentru implementarea manuală a codului sau a fișierelor? Automatizarea unor părți mari din fluxul dvs. va economisi timp pentru munca facturabilă, lucru pe care toată lumea îl poate aprecia. De asemenea, testarea automată vă permite să eșuați mai devreme decât să găsiți erori în QA sau producție sau, mai rău, clientul le găsește. Mai multe erori remediate în aceeași perioadă de timp este un câștig clar.

Livrare cu mai puține erori și mai puțin risc

Detectați erori mult mai devreme în procesul de dezvoltare, lansând mai des modificări minore. Când implementați teste automate în toate etapele de dezvoltare, nu riscați să mutați codul eșuat în etapa următoare și este mai ușor să anulați modificările minore atunci când este necesar.

Răspundeți mai rapid la condițiile pieței

Condițiile pieței se schimbă constant. Să presupunem că descoperiți că un produs nou pierde venituri sau că mai mulți clienți accesează site-ul dvs. de pe smartphone-uri decât de pe laptopuri. În acest caz, este mult mai ușor să faci o schimbare rapidă dacă ai optimizat livrarea continuă.

Încredere

Dacă ați optimizat CI/CD, ceea ce înseamnă că aveți o suită de teste robustă, încrederea dvs. în a nu trimite o eroare crește foarte mult. Dacă sunteți transparent cu procesul dvs. și educați restul echipei și clienții, încrederea acestora în dvs. ca echipă de dezvoltare crește și ea.

Cuvinte finale

CI/CD vă face integrările și livrările mai rapide. Cu toate acestea, este important să-l scalați și să îl optimizați pentru a evita ca procesul să devină contraproductiv din cauza complexității tot mai mari.

Puteți, de asemenea, să vă uitați la unele dintre cele mai bune instrumente CI.