{"id":87467,"date":"2020-07-08T13:42:11","date_gmt":"2020-07-08T11:42:11","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn"},"modified":"2020-07-08T13:42:11","modified_gmt":"2020-07-08T11:42:11","slug":"rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","status":"publish","type":"post","link":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","title":{"rendered":"Ghid pentru \u00eencep\u0103tori: cre\u0103m un pipeline DevOps","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Dac\u0103 e\u0219ti nou \u00een DevOps, arunc\u0103 o privire asupra acestui ghid pentru a-\u021bi crea primul pipeline \u00een cinci etape.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Ghid pentru \u00eencep\u0103tori: cre\u0103m un pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/605ed7d81323d0b5e094f7f912f8c669.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>DevOps a devenit solu\u021bia standard pentru remedierea proceselor de dezvoltare software lente, fragmentate sau ineficiente. Problema este c\u0103, dac\u0103 e\u0219ti novice \u00een DevOps \u0219i nu \u0219tii de unde s\u0103 \u00eencepi, s-ar putea s\u0103 \u00ee\u021bi lipseasc\u0103 \u00een\u021belegerea acestor metode. \u00cen acest articol, vom defini pipeline-ul DevOps \u0219i va fi oferit un ghid pentru a-l crea \u00een cinci pa\u0219i. De\u0219i acest ghid nu este exhaustiv, ar trebui s\u0103 \u00ee\u021bi ofere o baz\u0103 pentru a-\u021bi \u00eencepe c\u0103l\u0103toria \u0219i a-\u021bi extinde cuno\u0219tin\u021bele \u00een viitor. Dar s\u0103 \u00eencepem cu o poveste.<\/p>\n<h3>C\u0103l\u0103toria mea \u00een DevOps<\/h3>\n<p>\n\u00cen trecut, am lucrat \u00een echipa de cloud a Citi Group, dezvolt\u00e2nd o aplica\u021bie web Infrastructure-as-a-Service (IaaS) pentru gestionarea infrastructurii cloud a Citi, dar am fost mereu interesat de cum s\u0103 fac procesul de dezvoltare mai eficient \u0219i s\u0103 aduc schimb\u0103ri culturale pozitive \u00een echipa de dezvoltare. R\u0103spunsul l-am g\u0103sit \u00een cartea recomandat\u0103 de Greg Lavender, directorul tehnic al Citi pentru arhitectura cloud \u0219i infrastructur\u0103. Cartea se numea \u201eProiectul Fenix\u201d (<noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/dp\/B078Y98RG8\/\">The Phoenix Project<\/a><\/noindex>), \u0219i explic\u0103 principiile DevOps, fiind citit\u0103 ca un roman.<\/p>\n<p>\u00cen tabelul de pe coperta din spate a c\u0103r\u021bii se arat\u0103 c\u00e2t de des diferite companii \u00ee\u0219i desf\u0103\u0219oar\u0103 sistemele \u00een mediul de lansare a versiunilor:<\/p>\n<p>Amazon: 23.000 pe zi<br \/>\nGoogle: 5.500 pe zi<br \/>\nNetflix: 500 pe zi<br \/>\nFacebook: O dat\u0103 pe zi<br \/>\nTwitter: De 3 ori pe s\u0103pt\u0103m\u00e2n\u0103<br \/>\nO companie tipic\u0103: O dat\u0103 la 9 luni<\/p>\n<p>Cum sunt posibile frecven\u021bele Amazon, Google \u0219i Netflix? Totul deoarece aceste companii au g\u0103sit solu\u021bia pentru a crea un pipeline DevOps aproape perfect.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nAm fost departe de acest lucru p\u00e2n\u0103 c\u00e2nd am implementat DevOps \u00een Citi. Atunci, echipa mea avea medii diverse, dar desf\u0103\u0219urarea pe serverul de dezvoltare era complet manual\u0103. To\u021bi dezvoltatorii aveau acces doar la un singur server de dezvoltare bazat pe IBM WebSphere Application Server Community Edition. Problema era c\u0103 serverul se \u00eenchidea de fiecare dat\u0103 c\u00e2nd mai mul\u021bi utilizatori \u00eencercau simultan s\u0103 efectueze desf\u0103\u0219urarea, a\u0219a c\u0103 dezvoltatorii trebuiau s\u0103 \u00ee\u0219i comunice inten\u021biile, ceea ce era destul de dificil. \u00cen plus, existau probleme cu acoperirea testelor la nivel de cod, cu procesele voluminoase de desf\u0103\u0219urare manual\u0103 \u0219i cu lipsa posibilit\u0103\u021bii de a urm\u0103ri desf\u0103\u0219urarea codului legat\u0103 de o anumit\u0103 sarcin\u0103 sau poveste utilizator.<\/p>\n<p>Am realizat c\u0103 trebuie s\u0103 fac ceva \u0219i am g\u0103sit un coleg cu acelea\u0219i viziuni. Am decis s\u0103 colabor\u0103m pentru a crea prima versiune a conveiului nostru DevOps \u2013 el a configurat o ma\u0219in\u0103 virtual\u0103 \u0219i serverul de aplica\u021bii Tomcat, \u00een timp ce eu am lucrat la Jenkins, am integrat Atlassian Jira \u0219i BitBucket \u0219i am lucrat la acoperirea testelor de cod. Acest proiect lateral a fost foarte de succes: am automatizat aproape complet multe procese, am ob\u021binut o func\u021bionalitate de aproape 100% a serverului nostru de dezvoltare, am asigurat urm\u0103rirea \u0219i am \u00eembun\u0103t\u0103\u021bit acoperirea testului de cod, precum \u0219i am ad\u0103ugat posibilitatea de a lega ramuri \u00een Git de sarcini \u00een Jira sau desf\u0103\u0219ur\u0103ri. Majoritatea instrumentelor pe care le-am folosit pentru a construi conveiul nostru DevOps erau cu surs\u0103 deschis\u0103.<\/p>\n<p>Acum \u00een\u021beleg c\u00e2t de simplu era conveiul nostru DevOps: nu foloseam extensii precum Jenkins files sau Ansible. Cu toate acestea, acest conveiu simplu a func\u021bionat bine, poate datorit\u0103 principiului Pareto (cunoscut \u0219i sub numele de regula 80\/20).<\/p>\n<h3>Introducere scurt\u0103 \u00een DevOps \u0219i conveiul CI\/CD<\/h3>\n<p>\nDac\u0103 \u00eentreba\u021bi c\u00e2\u021biva oameni: \u201eCe este DevOps?\u201d, probabil ve\u021bi ob\u021bine c\u00e2teva r\u0103spunsuri diferite. DevOps, la fel ca Agile, a evoluat pentru a cuprinde multe discipline diferite, dar majoritatea oamenilor vor fi de acord cu anumite lucruri: DevOps este o practic\u0103 de dezvoltare software sau un ciclu de via\u021b\u0103 al dezvolt\u0103rii software (SDLC), al c\u0103rei principiu central este schimbarea culturii \u00een care dezvoltatorii \u0219i non-dezvoltatorii coexist\u0103 \u00eentr-un mediu \u00een care:<\/p>\n<p>Opera\u021biunile care erau anterior efectuate manual sunt automatizate; <br \/>\nFiecare face ceea ce \u0219tie s\u0103 fac\u0103 cel mai bine;<br \/>\nNum\u0103rul de implement\u0103ri pe o anumit\u0103 perioad\u0103 de timp cre\u0219te; Capacitatea de lucru cre\u0219te; <br \/>\nFlexibilitatea dezvolt\u0103rii cre\u0219te.<\/p>\n<p>De\u0219i a avea instrumentele software potrivite nu este singurul lucru necesar pentru a crea un mediu DevOps, unele instrumente sunt esen\u021biale. Un instrument cheie este integrarea continu\u0103 \u0219i livrarea continu\u0103 (CI\/CD). \u00cen aceast\u0103 conduct\u0103, mediile au diferite etape (de exemplu, DEV, INT, TST, QA, UAT, STG, PROD), multe opera\u021biuni sunt automatizate, iar dezvoltatorii pot scrie cod de calitate superioar\u0103, ob\u021bin\u00e2nd flexibilitate \u00een dezvoltare \u0219i frecven\u021b\u0103 ridicat\u0103 a livr\u0103rilor.<\/p>\n<p>Acest articol descrie o abordare \u00een cinci pa\u0219i pentru a crea un conduct\u0103 DevOps, similar\u0103 cu cea ilustrat\u0103 \u00een diagrama urm\u0103toare, folosind instrumente cu surs\u0103 deschis\u0103.<\/p>\n<h3>Pasul 1: Metode CI\/CD<\/h3>\n<p>\nPrimul lucru de care ave\u021bi nevoie este un instrument pentru CI\/CD. Jenkins, un instrument cu surs\u0103 deschis\u0103 bazat pe Java \u0219i distribuit sub licen\u021ba MIT, este acel instrument care a popularizat direc\u021bia DevOps \u0219i a devenit standardul de facto.<\/p>\n<p>Ce este Jenkins mai exact? Considera\u021bi-l un fel de telecomand\u0103 magic\u0103 universal\u0103 care poate comunica cu diverse servicii \u0219i instrumente \u0219i le poate organiza. De unul singur, un instrument CI\/CD, cum ar fi Jenkins, este inutil, dar devine mai puternic pe m\u0103sur\u0103 ce se conecteaz\u0103 la diverse instrumente \u0219i servicii.<\/p>\n<p>Jenkins este doar unul dintre cele multe instrumente cu surs\u0103 deschis\u0103 pentru CI\/CD pe care le pute\u021bi folosi pentru a construi un conduct\u0103 DevOps.<\/p>\n<p>Jenkins: Creative Commons \u0219i MIT<br \/>\nTravis CI: MIT<br \/>\nCruiseControl: BSD<br \/>\nBuildbot: GPL<br \/>\nApache Gump: Apache 2.0<br \/>\nCabie: GNU<\/p>\n<p>Iat\u0103 cum arat\u0103 procesele DevOps cu un instrument CI\/CD:<\/p>\n<p><img decoding=\"async\" alt=\"Ghid pentru \u00eencep\u0103tori: cre\u0103m un pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/e937f3da170b24c53cb5d67a67a365bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Ave\u021bi un instrument CI\/CD care func\u021bioneaz\u0103 pe localhost, dar \u00een prezent nu pute\u021bi face prea multe. S\u0103 trecem la urm\u0103toarea etap\u0103 a c\u0103l\u0103toriei \u00een lumea DevOps.<\/p>\n<h3>Pasul 2: Gestionarea sistemelor de control al versiunilor<\/h3>\n<p>\nCea mai bun\u0103 (\u0219i, poate, cea mai simpl\u0103) modalitate de a verifica dac\u0103 instrumentul dvs. CI\/CD poate face minuni este s\u0103 se integreze cu un instrument de control al surselor (SCM). De ce ave\u021bi nevoie de controlul surselor? Presupun\u00e2nd c\u0103 dezvolta\u021bi o aplica\u021bie. De fiecare dat\u0103 c\u00e2nd crea\u021bi o aplica\u021bie, programa\u021bi, iar acest lucru este valabil indiferent dac\u0103 folosi\u021bi Java, Python, C++, Go, Ruby, JavaScript sau unul dintre zecile de mii de limbaje de programare. Codul pe care \u00eel scrie\u021bi se nume\u0219te cod surs\u0103. La \u00eenceput, mai ales c\u00e2nd lucra\u021bi singur, este probabil c\u0103 pute\u021bi pune totul \u00eentr-un director local. Dar c\u00e2nd proiectul devine mai mare \u0219i invita\u021bi alte persoane s\u0103 colaboreze, ave\u021bi nevoie de o modalitate de a preveni conflictele \u00een timp ce partaja\u021bi modific\u0103rile eficient. De asemenea, ave\u021bi nevoie de o modalitate de a recupera versiunile anterioare, deoarece crearea de copii de rezerv\u0103 \u0219i copierea\/\u00eenserarea acestora este deja dep\u0103\u0219it\u0103. Ave\u021bi (\u0219i echipa dvs.) nevoie de ceva mai bun.<\/p>\n<p>Aici este unde un instrument de control al versiunilor devine practic necesar. Acest instrument p\u0103streaz\u0103 codul dvs. \u00een depozite, \u021bine eviden\u021ba versiunilor \u0219i coordoneaz\u0103 activitatea participan\u021bilor la proiect.<\/p>\n<p>De\u0219i exist\u0103 multe instrumente de control al surselor, Git este standardul, \u0219i este adev\u0103rat. V\u0103 recomand cu c\u0103ldur\u0103 s\u0103 utiliza\u021bi Git, de\u0219i exist\u0103 \u0219i alte op\u021biuni cu surs\u0103 deschis\u0103, dac\u0103 prefera\u021bi.<\/p>\n<p>Git: GPLv2 \u0219i LGPL v2.1<br \/>\nSubversion: Apache 2.0<br \/>\nConcurrent Versions System (CVS): GNU<br \/>\nVesta: LGPL<br \/>\nMercurial: GNU GPL v2+<\/p>\n<p>Iat\u0103 cum arat\u0103 un pipeline DevOps cu instrumentele de control al surselor ad\u0103ugate.<\/p>\n<p><img decoding=\"async\" alt=\"Ghid pentru \u00eencep\u0103tori: cre\u0103m un pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/47793d73d3b496aa38e027ff116f729d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Instrumentul CI\/CD poate automatiza procesele de verificare, ob\u021binere a codului surs\u0103 \u0219i colaborare \u00eentre membri. Nu este r\u0103u? Dar cum transform\u0103m asta \u00eentr-o aplica\u021bie func\u021bional\u0103, astfel \u00eenc\u00e2t miliarde de oameni s\u0103 o poat\u0103 utiliza \u0219i aprecia?<\/p>\n<h3>Pasul 3: Crearea instrumentului de automatizare a construc\u021biei<\/h3>\n<p>\nExcelent! Pute\u021bi verifica codul \u0219i face modific\u0103ri \u00een sistemul de control al versiunilor, precum \u0219i invita prietenii s\u0103 colaboreze la dezvoltare. Dar nu a\u021bi creat \u00eenc\u0103 o aplica\u021bie. Pentru a face o aplica\u021bie web, trebuie s\u0103 fie compilat\u0103 \u0219i \u00eempachetat\u0103 \u00eentr-un format de pachet desf\u0103\u0219urabil sau s\u0103 fie rulat\u0103 ca un fi\u0219ier executabil. (Re\u021bine\u021bi c\u0103 un limbaj de programare interpretat, cum ar fi JavaScript sau PHP, nu necesit\u0103 compilare).<\/p>\n<p>Utiliza\u021bi un instrument de automatizare a construirii. Indiferent de instrumentul de automatizare a construirii pe care decide\u021bi s\u0103-l folosi\u021bi, toate au acela\u0219i scop: de a procesa codul surs\u0103 \u00eentr-un format dorit \u0219i de a automatiza sarcini precum cur\u0103\u021bAREA, compilAREA, testAREA \u0219i desf\u0103\u0219urAREA \u00een medii specifice. Instrumentele de construire vor varia \u00een func\u021bie de limbajul dumneavoastr\u0103 de programare, dar iat\u0103 c\u00e2teva op\u021biuni comune cu surs\u0103 deschis\u0103.<\/p>\n<p>Denumire<br \/>\nLicen\u021b\u0103<br \/>\nLimbaj de programare<\/p>\n<p>Maven<br \/>\nApache 2.0<br \/>\n Java<\/p>\n<p>Ant<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Gradle<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Bazel<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Make<br \/>\nGNU<br \/>\nN\/A<\/p>\n<p>Grunt<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>Gulp<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>Buildr<br \/>\nApache<br \/>\nRuby<\/p>\n<p>Rake<br \/>\nMIT<br \/>\nRuby<\/p>\n<p>A-A-P<br \/>\nGNU<br \/>\nPython<\/p>\n<p>SCons<br \/>\nMIT<br \/>\nPython<\/p>\n<p>BitBake<br \/>\nGPLv2<br \/>\nPython<\/p>\n<p>Cake<br \/>\nMIT<br \/>\nC#<\/p>\n<p>ASDF<br \/>\nExpat (MIT)<br \/>\nLISP<\/p>\n<p>Cabal<br \/>\nBSD<br \/>\nHaskell<\/p>\n<p>Minunat! Pute\u021bi plasa fi\u0219ierele de configurare ale instrumentului de automatizare a construirii \u00een sistemul de control al versiunilor \u0219i permite\u021bi instrumentului dumneavoastr\u0103 CI\/CD s\u0103 le integreze.<\/p>\n<p><img decoding=\"async\" alt=\"Ghid pentru \u00eencep\u0103tori: cre\u0103m un pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/573d613914d278e738a0fc7f05644b62.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Totul este bine, nu-i a\u0219a? Dar unde ve\u021bi desf\u0103\u0219ura aplica\u021bia dumneavoastr\u0103?<\/p>\n<h3>Pasul 4: Server pentru aplica\u021bii web<\/h3>\n<p>\nP\u00e2n\u0103 acum ave\u021bi un fi\u0219ier \u00eempachetat care poate fi fie executabil, fie instalabil. Pentru ca orice aplica\u021bie s\u0103 fie cu adev\u0103rat util\u0103, ea trebuie s\u0103 ofere un serviciu sau o interfa\u021b\u0103, dar ave\u021bi nevoie de un container pentru a g\u0103zdui aplica\u021bia.<\/p>\n<p>Serverul pentru aplica\u021bii web este exact acel container. Serverul ofer\u0103 un mediu \u00een care poate fi definit\u0103 logica pachetului desf\u0103\u0219urat. De asemenea, serverul ofer\u0103 o interfa\u021b\u0103 \u0219i ofer\u0103 servicii web, deschiz\u00e2nd socket-uri c\u0103tre lumea extern\u0103. Ave\u021bi nevoie de un server HTTP, precum \u0219i de un mediu (de exemplu, o ma\u0219in\u0103 virtual\u0103) pentru instalarea sa. \u00centre timp, s\u0103 presupunem c\u0103 ve\u021bi \u00eenv\u0103\u021ba despre acest lucru mai t\u00e2rziu (de\u0219i v\u0103 voi vorbi despre containere mai jos).<\/p>\n<p>Exist\u0103 mai multe servere pentru aplica\u021bii web cu surs\u0103 deschis\u0103.<\/p>\n<p>Denumire<br \/>\nLicen\u021b\u0103<br \/>\nLimbaj de programare<\/p>\n<p>Tomcat<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Jetty<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>WildFly<br \/>\nGNU Lesser Public<br \/>\nJava<\/p>\n<p>GlassFish<br \/>\nCDDL &amp; GNU Less Public<br \/>\nJava<\/p>\n<p>Django<br \/>\n3-Clause BSD<br \/>\nPython<\/p>\n<p>Tornado<br \/>\nApache 2.0<br \/>\nPython<\/p>\n<p>Gunicorn<br \/>\nMIT<br \/>\nPython<\/p>\n<p>Python<br \/>\nMIT<br \/>\nPython<\/p>\n<p>Rails<br \/>\nMIT<br \/>\nRuby<\/p>\n<p>Node.js<br \/>\nMIT<br \/>\nJavascript<\/p>\n<p>Pipelines-ul t\u0103u DevOps este aproape gata de utilizare. Bun\u0103 treab\u0103!<\/p>\n<p><img decoding=\"async\" alt=\"Ghid pentru \u00eencep\u0103tori: cre\u0103m un pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/9c314e8a42f154ded3b16ec7bdf01f99.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>De\u0219i te po\u021bi opri aici \u0219i s\u0103 te ocupi de integrare pe cont propriu, calitatea codului este un aspect important pentru dezvoltatorii de aplica\u021bii, \u0219i trebuie s\u0103 fie o preocupare.<\/p>\n<h3>Pasul 5: Acoperirea test\u0103rii codului<\/h3>\n<p>\nImplementarea testelor poate fi o alt\u0103 cerin\u021b\u0103 voluminoas\u0103, dar dezvoltatorii trebuie s\u0103 prind\u0103 orice eroare \u00een aplica\u021bie din fazele incipiente \u0219i s\u0103 \u00eembun\u0103t\u0103\u021beasc\u0103 calitatea codului pentru a garanta c\u0103 utilizatorii finali vor fi mul\u021bumi\u021bi. Din fericire, exist\u0103 o mul\u021bime de instrumente open-source pentru a testa codul t\u0103u \u0219i a oferi sugestii de \u00eembun\u0103t\u0103\u021bire a acestuia. Mai bine, majoritatea instrumentelor CI\/CD pot fi integrate cu aceste unelte \u0219i pot automatiza procesul.<\/p>\n<p>Testarea codului se \u00eemparte \u00een dou\u0103 p\u0103r\u021bi: framework-uri de testare a codului, care ajut\u0103 la scrierea \u0219i execu\u021bia testelor, \u0219i instrumente care ofer\u0103 sugestii pentru \u00eembun\u0103t\u0103\u021birea calit\u0103\u021bii codului.<\/p>\n<p><b>Sisteme de testare a codului<\/b><\/p>\n<p>Denumire<br \/>\nLicen\u021b\u0103<br \/>\nLimbaj de programare<\/p>\n<p>JUnit<br \/>\nLicen\u021ba Public\u0103 Eclipse<br \/>\nJava<\/p>\n<p>EasyMock<br \/>\nApache<br \/>\nJava<\/p>\n<p>Mockito<br \/>\nMIT<br \/>\nJava<\/p>\n<p>PowerMock<br \/>\nApache 2.0<br \/>\nJava<\/p>\n<p>Pytest<br \/>\n MIT<br \/>\nPython<\/p>\n<p>Hypothesis<br \/>\nMozilla<br \/>\nPython<\/p>\n<p>Tox<br \/>\nMIT<br \/>\nPython<\/p>\n<p><b>Sisteme de recomandare pentru \u00eembun\u0103t\u0103\u021birea codului<\/b><\/p>\n<p>Denumire<br \/>\nLicen\u021b\u0103<br \/>\nLimbaj de programare<\/p>\n<p>Cobertura<br \/>\nGNU<br \/>\nJava<\/p>\n<p>CodeCover<br \/>\nEclipse Public (EPL)<br \/>\nJava<\/p>\n<p>Coverage.py<br \/>\n Apache 2.0<br \/>\nPython<\/p>\n<p>Emma<br \/>\nLicen\u021ba Public\u0103 Comun\u0103<br \/>\nJava<\/p>\n<p>JaCoCo<br \/>\n Licen\u021ba Public\u0103 Eclipse<br \/>\nJava<\/p>\n<p>Hypothesis<br \/>\n Mozilla<br \/>\nPython<\/p>\n<p>Tox<br \/>\nMIT<br \/>\nPython<\/p>\n<p>Jasmine<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>Karma<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>Mocha<br \/>\n MIT<br \/>\nJavaScript<\/p>\n<p>Jest<br \/>\nMIT<br \/>\nJavaScript<\/p>\n<p>Re\u021bine c\u0103 majoritatea instrumentelor \u0219i framework-urilor men\u021bionate mai sus sunt scrise pentru Java, Python \u0219i JavaScript, deoarece C++ \u0219i C# sunt limbaje de programare proprietare (de\u0219i GCC are cod surs\u0103 deschis).<\/p>\n<p>Acum c\u0103 ai implementat instrumentele de acoperire a codului cu teste, pipeline-ul t\u0103u DevOps ar trebui s\u0103 arate ca diagrama prezentat\u0103 la \u00eenceputul acestui ghid.<\/p>\n<h3>Pa\u0219i suplimentari<\/h3>\n<p>\n<b>Containere<\/b><\/p>\n<p>A\u0219a cum am men\u021bionat, po\u021bi g\u0103zdui serverul pe o ma\u0219in\u0103 virtual\u0103 sau pe un server, dar containerele sunt o solu\u021bie popular\u0103.<\/p>\n<p>Ce sunt containerele? Pe scurt, o ma\u0219in\u0103 virtual\u0103 necesit\u0103 o cantitate considerabil\u0103 de memorie pentru sistemul de operare, dep\u0103\u0219ind dimensiunea aplica\u021biei, \u00een timp ce un container are nevoie doar de c\u00e2teva biblioteci \u0219i configura\u021bii pentru a rula aplica\u021bia. Evident, o ma\u0219in\u0103 virtual\u0103 are \u00eenc\u0103 aplica\u021bii importante, dar un container este o solu\u021bie u\u0219oar\u0103 pentru g\u0103zduirea aplica\u021biei, inclusiv a serverului de aplica\u021bii.<\/p>\n<p>De\u0219i exist\u0103 \u0219i alte tipuri de containere, cele mai populare sunt Docker \u0219i Kubernetes.<\/p>\n<p>Docker: Apache 2.0<br \/>\nKubernetes: Apache 2.0<\/p>\n<p><b>Instrumente intermediare de automatizare<\/b><\/p>\n<p>Pipeline-ul nostru DevOps se concentreaz\u0103 \u00een principal pe colaborarea \u00een crearea \u0219i desf\u0103\u0219urarea aplica\u021biilor, dar exist\u0103 multe alte lucruri care pot fi realizate cu instrumentele DevOps. Unul dintre acestea este utilizarea instrumentelor Infrastructure as Code (IaC), care sunt cunoscute \u0219i sub numele de instrumente intermediare de automatizare. Aceste instrumente ajut\u0103 la automatizarea instal\u0103rii, gestion\u0103rii \u0219i altor sarcini pentru software-ul intermediar. De exemplu, un instrument de automatizare poate extrage aplica\u021bii precum serverul aplica\u021biilor web, baza de date \u0219i instrumentul de monitorizare, cu configura\u021biile corecte \u0219i le poate desf\u0103\u0219ura pe serverul aplica\u021biilor.<\/p>\n<p>Iat\u0103 c\u00e2teva instrumente intermediare de automatizare cu surs\u0103 deschis\u0103:<\/p>\n<p>Ansible: GNU Public<br \/>\nSaltStack: Apache 2.0<br \/>\nChef: Apache 2.0<br \/>\nPuppet: Apache sau GPL<\/p>\n<p><img decoding=\"async\" alt=\"Ghid pentru \u00eencep\u0103tori: cre\u0103m un pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/148ef7317ca5780b412241ddaec9dc76.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Afla\u021bi detaliile despre cum s\u0103 ob\u021bine\u021bi o profesie solicitat\u0103 de la zero sau s\u0103 face\u021bi un Level Up pentru abilit\u0103\u021bi \u0219i salariu, parcurg\u00e2nd cursurile online cu plat\u0103 SkillFactory:<\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/devops?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=DEVOPS&amp;utm_term=regular&amp;utm_content=07072002\">Curs de DevOps<\/a><\/noindex> (12 luni)<\/li>\n<\/ul>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">alte cursuri<\/b><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/ml-programma-machine-learning-online?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=ML&amp;utm_term=regular&amp;utm_content=07072002\">Curs de Machine Learning<\/a><\/noindex> (12 s\u0103pt\u0103m\u00e2ni)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/data-scientist?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=DST&amp;utm_term=regular&amp;utm_content=07072002\">\u00cenv\u0103\u021barea profesiei Data Science de la zero<\/a><\/noindex> (12 luni)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/analytics?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=SDA&amp;utm_term=regular&amp;utm_content=07072002\">Profesia de analist cu orice nivel de \u00eenceput<\/a><\/noindex> (9 luni)<\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/skillfactory.ru\/python-for-web-developers?utm_source=infopartners&amp;utm_medium=habr&amp;utm_campaign=PWS&amp;utm_term=regular&amp;utm_content=07072002\">Cursul \u201ePython pentru dezvoltarea web\u201d<\/a><\/noindex> (9 luni)<\/li>\n<\/ul>\n<p><\/p>\n<h3>Util<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/503196\/\">450 de cursuri gratuite de la Ivy League<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/508450\/\">Tendin\u021bele \u00een Data Science 2020<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/508556\/\">Data Science a murit. Tr\u0103iasc\u0103 Business Science<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/506790\/\">Data Science pe steroizi: introducere \u00een Decision Intelligence<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/503504\/\">Cea mai de succes \u0219i controversat\u0103 \u201eData Science\u201d a proiectului: Cambridge Analytica<\/a><\/noindex><\/li>\n<\/ul>\n<p>Sursa: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/509964\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps, \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0438\u0437 \u043f\u044f\u0442\u0438 \u044d\u0442\u0430\u043f\u043e\u0432. DevOps \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u043c \u0434\u043b\u044f \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0445, \u0440\u0430\u0437\u043e\u0431\u0449\u0435\u043d\u043d\u044b\u0445 \u0438\u043b\u0438 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0433\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c \u0447\u0442\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps \u0438 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442\u0435, \u0441 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0430\u0442\u044c, \u0442\u043e \u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0442\u044c \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u044d\u0442\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432. \u0412 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":87468,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-87467","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps, \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0438\u0437 \u043f\u044f\u0442\u0438 \u044d\u0442\u0430\u043f\u043e\u0432.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"ro_RO\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445: \u0441\u043e\u0437\u0434\u0430\u0435\u043c DevOps-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps, \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0438\u0437 \u043f\u044f\u0442\u0438 \u044d\u0442\u0430\u043f\u043e\u0432.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-07-08T11:42:11+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-07-08T11:42:11+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Ghid pentru \u00eencep\u0103tori: cre\u0103m un pipeline DevOps | ProHoster","description":"Dac\u0103 e\u0219ti nou \u00een DevOps, arunc\u0103 o privire asupra acestui ghid pentru a-\u021bi crea primul pipeline \u00een cinci etape.","canonical_url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"ro_RO","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0420\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e \u0434\u043b\u044f \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445: \u0441\u043e\u0437\u0434\u0430\u0435\u043c DevOps-\u043f\u0430\u0439\u043f\u043b\u0430\u0439\u043d | ProHoster","og:description":"\u0415\u0441\u043b\u0438 \u0432\u044b \u043d\u043e\u0432\u0438\u0447\u043e\u043a \u0432 DevOps, \u0432\u0437\u0433\u043b\u044f\u043d\u0438\u0442\u0435 \u043d\u0430 \u044d\u0442\u0443 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u043f\u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044e \u0432\u0430\u0448\u0435\u0433\u043e \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u0430 \u0438\u0437 \u043f\u044f\u0442\u0438 \u044d\u0442\u0430\u043f\u043e\u0432.","og:url":"https:\/\/prohoster.info\/ro\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-07-08T11:42:11+00:00","article:modified_time":"2020-07-08T11:42:11+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"87467","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 13:50:31","updated":"2022-09-29 03:37:01","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/87467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/comments?post=87467"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/posts\/87467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media\/87468"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/media?parent=87467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/categories?post=87467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/ro\/wp-json\/wp\/v2\/tags?post=87467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}