
Crearea primului lanț DevOps în cinci pași pentru începători.
DevOps a devenit panaceul pentru procesele de dezvoltare prea lente, fragmentate și alte probleme. Dar sunt necesare cunoștințe minime în DevOps. Aici vor fi abordate concepte precum lanțul DevOps și cum să-l creezi în cinci pași. Acesta nu este un ghid complet, ci doar o „bază” pe care o poți extinde. Să începem cu o istorie.
Întâlnirea mea cu DevOps
Cândva lucram cu cloud-uri la Citi Group și dezvoltam o aplicație web IaaS pentru a gestiona infrastructura cloud a Citi, dar întotdeauna m-a interesat cum să optimizez lanțul de dezvoltare și să îmbunătățesc cultura printre dezvoltatori. Greg Lavender, directorul nostru tehnic pe arhitectura și infrastructura cloud, mi-a recomandat o carte . Aceasta explică perfect principiile DevOps, citindu-se ca un roman.
În tabelul de pe verso este prezentat cât de des companiile lansează versiuni noi:
Cum reușesc Amazon, Google și Netflix să lanseze atât de multe? E simplu: au înțeles cum să creeze un lanț DevOps aproape perfect.
La Citi lucrurile nu stăteau deloc așa, până nu am trecut la DevOps. Atunci echipa mea avea diferite medii, dar livrarea pe serverul de dezvoltare se făcea manual. Toți dezvoltatorii aveau acces doar la un singur server de dezvoltare bazat pe IBM WebSphere Application Server Community Edition. Când încercam simultan să livrăm, serverul „cădea”, iar noi trebuia să ne „negociem dur” de fiecare dată. Mai aveam și o acoperire insuficientă a codului cu teste, un proces manual de livrare foarte laborios și nicio posibilitate de a urmări livrarea codului pe baza unei sarcini sau cerințe a clientului.
Era clar că trebuie să facem ceva urgent, așa că am găsit un coleg care împărtășea aceleași idei. Am decis să creăm împreună primul lanț DevOps – el a configurat o mașină virtuală și un server de aplicații Tomcat, iar eu m-am ocupat de Jenkins, integrarea cu Atlassian Jira și BitBucket, precum și de acoperirea codului cu teste. Proiectul a fost un succes: am automatizat complet lanțul de dezvoltare, am realizat aproape 100% timp de funcționare a serverului de dezvoltare, am putut urmări și îmbunătăți acoperirea codului cu teste, iar ramura Git putea fi legată de livrare și de sarcina Jira. Și aproape toate instrumentele cu care am construit lanțul DevOps erau open source.
În esență, lanțul a fost simplificat, deoarece nu am folosit configurații extinse cu Jenkins sau Ansible. Totuși, ne-a ieșit. Poate că este o consecință a principiului (sau regula 80/20).
Descriere scurtă a lanțului DevOps și CI/CD
DevOps are diverse definiții. DevOps, la fel ca Agile, implică diferite discipline. Însă cei mai mulți vor fi de acord cu următoarea definiție: DevOps este o metodă, sau ciclu, de dezvoltare a software-ului, al cărui principiu principal este crearea unei culturi în care dezvoltatorii și ceilalți angajați sunt 'pe aceeași lungime de undă', munca manuală este automatizată, fiecare se ocupă de ceea ce știe să facă cel mai bine, frecvența livrărilor crește, productivitatea muncii se îmbunătățește, iar flexibilitatea se îmbunătățește.
Și, deși uneltele singure nu sunt suficiente pentru a crea un mediu DevOps, fără ele nu se poate. Cea mai importantă dintre ele este integrarea continuă și livrarea continuă (CI/CD). În lanțul pentru fiecare mediu există diferite etape (de exemplu, DEV (dezvoltare), INT (integrare), TST (testare), QA (controlul calității), UAT (testare acceptată de utilizatori), STG (preparare), PROD (utilizare)), sarcinile manuale sunt automatizate, dezvoltatorii pot scrie cod de calitate, îl livrează și se pot adapta din ușor.
Această notă descrie cum să creezi un lanț DevOps în cinci pași, așa cum este ilustrat în imaginea de mai jos, folosind unelte cu cod sursă deschis.
Hai să trecem la treabă.
Pasul 1: Platforma CI/CD
În primul rând, ai nevoie de un instrument CI/CD. Jenkins este un instrument CI/CD open-source scris în Java, cu licență MIT, care a început popularizarea mișcării DevOps și care, de facto, a devenit standardul pentru CI/CD.
Dar ce este Jenkins? Imaginează-ți că ai o telecomandă magică pentru diverse servicii și instrumente. Instrumentul CI/CD, precum Jenkins, este inutil singur, dar cu diverse instrumente și servicii devine atotputernic.
Pe lângă Jenkins, există o mulțime de alte instrumente open-source, poți alege oricare.
Iată cum arată procesul DevOps cu un instrument CI/CD
Ai un instrument CI/CD pe localhost, dar pentru moment nu ai nimic de făcut. Să trecem la următorul pas.
Pasul 2: gestionarea versiunilor
Cea mai bună (și poate cea mai simplă) modalitate de a verifica magia instrumentului CI/CD este să-l integratezi cu un instrument de control al versiunilor (source control management, SCM). De ce ai nevoie de controlul versiunilor? Să presupunem că dezvolți o aplicație. O scrii în Java, Python, C++, Go, Ruby, JavaScript sau în orice alt limbaj, de care sunt o mulțime. Ceea ce scrii se numește cod sursă. La început, mai ales dacă lucrezi singur, poți salva totul într-un director local. Dar pe măsură ce proiectul crește și se alătură mai multe persoane, ai nevoie de o modalitate de a partaja modificările în cod, dar și de a evita conflictele la fuziunea acestora. Și, de asemenea, ai nevoie să restaurezi versiunile anterioare fără a folosi backup-uri și fără a aplica metoda copy-paste pentru fișierele cu cod.
Și aici SCM este esențial. SCM salvează codul în depozite, gestionează versiunile acestuia și coordonează munca între dezvoltatori.
Există multe instrumente SCM, dar standardul de facto a devenit pe bună dreptate Git. Îți recomand să folosești tocmai acesta, dar există și alte opțiuni.

Iată cum arată pipeline-ul DevOps după adăugarea SCM.
Instrumentul CI/CD poate automatiza încărcarea și descărcarea codului sursă și colaborarea în echipă. Nu-i rău? Dar cum transformi acum asta într-o aplicație funcțională, iubită de miliarde de utilizatori?
Pasul 3: instrumentul de automatizare a compilării
Totul decurge conform planului. Poți descărca codul și înregistra modificările în sistemul de control al versiunilor, precum și invita prieteni să lucreze cu tine. Dar tu încă nu ai o aplicație. Pentru a fi o aplicație web, aceasta trebuie compilată și ambalată pentru livrare sau rulată ca un fișier executabil. (Un limbaj de programare interpretat, precum JavaScript sau PHP, nu trebuie compilat.)
Folosește un instrument de automatizare a compilării. Indiferent de instrumentul pe care îl alegi, acesta va compila codul în formatul necesar și va automatiza curățarea, compilarea, testarea și livrarea. Există diferite instrumente de compilare în funcție de limbaj, dar de obicei se folosesc următoarele opțiuni cu sursă deschisă.

Excelent! Acum să introducem fișierele de configurare ale instrumentului de automatizare a compilării în sistemul de control al versiunilor, pentru ca instrumentul CI/CD să le compileze.
Se pare că totul este în regulă. Dar unde să desfășori acum toate acestea?
Pasul 4: serverul aplicației web
Așadar, aveți un fișier comprimat care poate fi executat sau desfăcut. Pentru ca aplicația să fie cu adevărat utilă, aceasta trebuie să aibă un anumit serviciu sau interfață, dar trebuie să o plasați undeva.
O aplicație web poate fi gazduită pe un server de aplicații web. Serverul de aplicații oferă un mediu în care se poate executa logica programului din pachet, se poate realiza redarea interfeței și se pot deschide servicii web prin socket. Aveți nevoie de un server HTTP și de câteva alte medii (de exemplu, o mașină virtuală) pentru a instala serverul de aplicații. Deocamdată, să presupunem că vă descurcați cu toate acestea în proces (deși voi vorbi despre containere mai jos).
Există câteva servere de aplicații web open-source.
Am reușit deja o aproape funcțională lanț DevOps. Felicitări!
În principiu, aici puteți să vă opriți, mai departe vă descurcați singuri, dar merită să discutăm și despre calitatea codului.
Pasul 5: Acoperirea testării
Testarea ia mult timp și efort, dar este mai bine să descoperiți erorile din timp și să îmbunătățiți codul pentru a încânta utilizatorii finali. Pentru acest scop, există multe instrumente open-source care nu doar testează codul, ci oferă și sugestii despre cum să-l îmbunătățiți. Cele mai multe instrumente CI/CD se pot conecta la aceste instrumente și pot automatiza procesul.
Testarea este împărțită în două părți: cadre de testare pentru a scrie și executa teste şi instrumente cu sugestii pentru îmbunătățirea calității codului.
Cadre de testare
Instrumente cu sugestii pentru calitate
Majoritatea acestor instrumente și cadre sunt scrise pentru Java, Python și JavaScript, deoarece C++ și C# sunt proprietare (deși GCC are cod sursă deschis).
Am aplicat instrumente pentru acoperirea testării, iar acum lanțul DevOps ar trebui să arate ca în figura din începutul ghidului.
Pași suplimentari
Containere
Așa cum am spus, serverul de aplicații poate fi gazduit pe o mașină virtuală sau pe un server, dar containerele sunt mai populare.
? Вкратце, в виртуальной машине операционная система чаще всего занимает больше места, чем приложение, а контейнеру обычно достаточно нескольких библиотек и конфигурации. В некоторых случаях без виртуальных машин не обойтись, но контейнер вмещает приложение вместе с сервером без лишних затрат.
Pentru containere se folosesc de obicei Docker și Kubernetes, deși există și alte opțiuni.
Citiți articole despre Docker și Kubernetes pe :
Instrumente de automatizare a middleware-ului
Lanțul nostru DevOps este orientat spre colaborarea pentru construirea și livrarea aplicațiilor, dar cu uneltele DevOps se pot face și alte lucruri interesante. De exemplu, folosind uneltele de tip „infrastructură ca cod” (IaC), care sunt de asemenea cunoscute ca unelte de automatizare a intermediarului. Aceste unelte ajută la automatizarea instalării, gestionării și altor sarcini pentru intermediar. De exemplu, o unealtă de automatizare poate lua aplicații (server de aplicații web, bază de date, unelte de monitorizare) cu configurațiile corecte și le poate desfășura pe serverul aplicațiilor.
Iată câteva opțiuni de unelte deschise pentru automatizarea intermediarului:

Detalii în articolele de pe :
Și ce acum?
Aceasta este doar vârful aisbergului. Lanțul DevOps poate face mult mai mult. Începe cu o unealtă CI/CD și află ce altceva poți automatiza pentru a-ți simplifica munca. Nu uita de pentru o colaborare eficientă.
Iată și câteva articole bune despre DevOps pentru începători:
De asemenea, poți integra DevOps cu uneltele deschise pentru agile:
Sursa: habr.com
