{"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\/it\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","title":{"rendered":"Guida per principianti: creiamo una pipeline DevOps","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><i>Se sei un principiante nel DevOps, dai un'occhiata a questa guida per creare il tuo primo pipeline in cinque fasi.<\/i><\/p>\n<p><img decoding=\"async\" alt=\"Guida per principianti: creiamo una pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/605ed7d81323d0b5e094f7f912f8c669.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Il DevOps \u00e8 diventato la soluzione standard per correggere processi di sviluppo software lenti, disconnessi o malfunzionanti. Il problema \u00e8 che, se sei un principiante nel DevOps e non sai da dove cominciare, potresti non avere una comprensione di questi metodi. In questo articolo parler\u00f2 della definizione di un pipeline DevOps e fornir\u00f2 una guida alla sua creazione in cinque passi. Anche se questa guida non \u00e8 esaustiva, dovrebbe darti una base per iniziare il tuo percorso e ampliare le tue conoscenze in futuro. Ma iniziamo con la storia.<\/p>\n<h3>Il mio viaggio nel DevOps<\/h3>\n<p>\nIn passato ho lavorato nel team cloud della Citi Group, sviluppando un'app web Infrastructure-as-a-Service (IaaS) per gestire l'infrastruttura cloud di Citi, ma sono sempre stato interessato a come rendere il processo di sviluppo pi\u00f9 efficiente e a portare cambiamenti culturali positivi nel team di sviluppo. La risposta l'ho trovata in un libro raccomandato da Greg Lavender, Chief Technology Officer di Citi per l'architettura cloud e l'infrastruttura. Il libro si intitolava \"The Phoenix Project\"<noindex><a rel=\"nofollow\" href=\"https:\/\/www.amazon.com\/dp\/B078Y98RG8\/\">The Phoenix Project<\/a><\/noindex>, e spiega i principi del DevOps, presentandosi come un romanzo.<\/p>\n<p>Nella tabella sul retro del libro viene mostrato con quale frequenza diverse aziende distribuiscono i loro sistemi in ambienti di rilascio:<\/p>\n<p>Amazon: 23.000 al giorno<br \/>\nGoogle: 5.500 al giorno<br \/>\nNetflix: 500 al giorno<br \/>\nFacebook: Una volta al giorno<br \/>\nTwitter: 3 volte a settimana<br \/>\nAzienda tipica: Una volta ogni 9 mesi<\/p>\n<p>Come sono possibili le frequenze di Amazon, Google e Netflix? \u00c8 tutto perch\u00e9 queste aziende hanno trovato un modo per creare quasi un pipeline DevOps ideale.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nEravamo lontani da questo fino a quando non abbiamo implementato DevOps in Citi. All'epoca nella mia squadra c'erano diversi ambienti, ma il deployment sul server di sviluppo era completamente manuale. Tutti gli sviluppatori avevano accesso solo a un server di sviluppo basato su IBM WebSphere Application Server Community Edition. Il problema era che il server si spegneva ogni volta che pi\u00f9 utenti tentavano di eseguire il deployment contemporaneamente, quindi gli sviluppatori dovevano avvisarsi a vicenda delle proprie intenzioni, il che era piuttosto frustrante. Inoltre, c'erano problemi con la copertura del codice a basso livello, i processi ingombranti del deployment manuale e l'assenza della possibilit\u00e0 di tracciare il deployment del codice collegato a un compito specifico o a una storia utente.<\/p>\n<p>Ho capito che dovevo fare qualcosa e ho trovato un collega con la mia stessa visione. Abbiamo deciso di collaborare per creare il nostro primo pipeline DevOps: lui ha installato una macchina virtuale e un server applicativo Tomcat, mentre io lavoravo su Jenkins, integravo Atlassian Jira e BitBucket e mi occupavo della copertura del codice. Questo progetto secondario \u00e8 stato molto fruttuoso: abbiamo automatizzato quasi completamente molti processi, raggiunto praticamente il 100% di operativit\u00e0 del nostro server di sviluppo, garantito tracciabilit\u00e0 e migliorato la copertura del codice, oltre ad aver aggiunto la possibilit\u00e0 di collegare i branch in Git con i compiti in Jira o con il deployment. La maggior parte degli strumenti che abbiamo utilizzato per costruire la nostra pipeline DevOps erano open source.<\/p>\n<p>Ora capisco quanto fosse semplice la nostra pipeline DevOps: non abbiamo utilizzato estensioni come Jenkins files o Ansible. Tuttavia, questa semplice pipeline funzionava bene, forse grazie al principio di Pareto (noto anche come regola 80\/20).<\/p>\n<h3>Una breve introduzione a DevOps e alla pipeline CI\/CD<\/h3>\n<p>\nSe chiedi a diverse persone: \u00abCos'\u00e8 DevOps?\u00bb, probabilmente riceverai diverse risposte. DevOps, proprio come Agile, si \u00e8 evoluto per comprendere molte discipline diverse, ma la maggior parte delle persone sar\u00e0 d'accordo su alcune cose: DevOps \u00e8 una pratica di sviluppo software o un ciclo di vita dello sviluppo software (SDLC), il cui principio centrale \u00e8 il cambiamento della cultura in cui sviluppatori e non sviluppatori esistono in un ambiente in cui:<\/p>\n<p>Le operazioni che una volta venivano eseguite manualmente sono automatizzate; <br \/>\nOgnuno fa ci\u00f2 in cui \u00e8 migliore;<br \/>\nIl numero di implementazioni in un dato intervallo di tempo aumenta; Aumenta la capacit\u00e0; <br \/>\nAumenta la flessibilit\u00e0 nello sviluppo.<\/p>\n<p>Sebbene avere gli strumenti software giusti non sia l'unica cosa necessaria per creare un ambiente DevOps, alcuni strumenti sono essenziali. Uno strumento chiave \u00e8 l'integrazione continua e il deployment continuo (CI\/CD). In questo pipeline, l'ambiente ha diverse fasi (ad esempio, DEV, INT, TST, QA, UAT, STG, PROD), molte operazioni sono automatizzate e gli sviluppatori possono scrivere codice di alta qualit\u00e0, ottenere flessibilit\u00e0 nello sviluppo e un'alta frequenza di distribuzioni.<\/p>\n<p>Questo articolo descrive un approccio a cinque fasi per creare un pipeline DevOps, simile a quello illustrato nel diagramma seguente, utilizzando strumenti open source.<\/p>\n<h3>Passo 1: Metodi CI\/CD<\/h3>\n<p>\nLa prima cosa di cui hai bisogno \u00e8 uno strumento per CI\/CD. Jenkins, uno strumento open source basato su Java e distribuito con licenza MIT, \u00e8 il mezzo che ha reso popolare la direzione DevOps ed \u00e8 diventato lo standard di fatto.<\/p>\n<p>Ma cos'\u00e8 Jenkins? Consideralo come un telecomando universale magico che pu\u00f2 comunicare con vari servizi e strumenti e metterli in ordine. Da solo, uno strumento CI\/CD come Jenkins \u00e8 inutile, ma diventa pi\u00f9 potente man mano che si collega a vari strumenti e servizi.<\/p>\n<p>Jenkins \u00e8 solo uno dei tanti strumenti open source per CI\/CD che puoi utilizzare per costruire un pipeline DevOps.<\/p>\n<p>Jenkins: Creative Commons e MIT<br \/>\nTravis CI: MIT<br \/>\nCruiseControl: BSD<br \/>\nBuildbot: GPL<br \/>\nApache Gump: Apache 2.0<br \/>\nCabie: GNU<\/p>\n<p>Ecco come appaiono i processi DevOps con lo strumento CI\/CD:<\/p>\n<p><img decoding=\"async\" alt=\"Guida per principianti: creiamo una pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/e937f3da170b24c53cb5d67a67a365bb.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Hai uno strumento CI\/CD in esecuzione sul tuo localhost, ma per il momento puoi fare poco. Passiamo alla fase successiva del viaggio nel mondo DevOps.<\/p>\n<h3>Passo 2: Gestione dei sistemi di controllo del codice sorgente<\/h3>\n<p>\nIl modo migliore (e forse pi\u00f9 semplice) per verificare che il tuo strumento CI\/CD possa fare magie \u00e8 integrarsi con uno strumento di controllo del codice sorgente (SCM). Perch\u00e9 hai bisogno del controllo del codice sorgente? Supponiamo che tu stia sviluppando un'applicazione. Ogni volta che crei un'applicazione, programmi, indipendentemente dal fatto che tu stia utilizzando Java, Python, C++, Go, Ruby, JavaScript o uno dei miliardi di linguaggi di programmazione. Il codice che scrivi \u00e8 chiamato codice sorgente. All'inizio, specialmente quando lavori da solo, \u00e8 probabile che tu possa mettere tutto in una directory locale. Ma quando il progetto cresce e inviti altre persone a collaborare, hai bisogno di un modo per evitare conflitti durante uno scambio efficace delle modifiche. Hai anche bisogno di un modo per ripristinare versioni precedenti, perch\u00e9 fare backup e copiare\/incollare in esse \u00e8 ormai obsoleto. Hai bisogno di qualcosa di meglio.<\/p>\n<p>\u00c8 qui che uno strumento di controllo del codice sorgente diventa praticamente indispensabile. Questo strumento salva il tuo codice nei repository, tiene traccia delle versioni e coordina il lavoro dei partecipanti al progetto.<\/p>\n<p>Sebbene esistano molti strumenti di controllo del codice sorgente, Git \u00e8 lo standard, e questo \u00e8 vero. Ti consiglio vivamente di utilizzare Git, anche se, se vuoi, ci sono altre opzioni open source.<\/p>\n<p>Git: GPLv2 e 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>Ecco come appare un pipeline DevOps con l'aggiunta di strumenti di controllo del codice sorgente.<\/p>\n<p><img decoding=\"async\" alt=\"Guida per principianti: creiamo una pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/47793d73d3b496aa38e027ff116f729d.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Lo strumento CI\/CD pu\u00f2 automatizzare i processi di verifica, recupero del codice sorgente e collaborazione tra i membri. Non male? Ma come trasformarlo in un'applicazione funzionante, in modo che miliardi di persone possano utilizzarla e apprezzarla?<\/p>\n<h3>Passo 3: Creazione di uno strumento di automazione della build<\/h3>\n<p>\nOttimo! Puoi controllare il codice e apportare modifiche al sistema di controllo del codice sorgente, oltre a invitare i tuoi amici a collaborare allo sviluppo. Ma non hai ancora creato un'applicazione. Per creare un'applicazione web, deve essere compilata e impacchettata in un formato di pacchetto distribuibile o eseguita come file eseguibile. (Nota che un linguaggio di programmazione interpretato, come JavaScript o PHP, non necessita di compilazione).<\/p>\n<p>Utilizza uno strumento di automazione della build. Indipendentemente dallo strumento di automazione della build che decidi di utilizzare, tutti perseguono lo stesso obiettivo: compilare il codice sorgente in un formato desiderato e automatizzare il compito di pulizia, compilazione, test e distribuzione in un ambiente specifico. Gli strumenti di build varieranno a seconda del tuo linguaggio di programmazione, ma ecco alcune opzioni comuni open source.<\/p>\n<p>Nome<br \/>\nLicenza<br \/>\nLinguaggio di programmazione<\/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>Fantastico! Puoi inserire i file di configurazione dello strumento di automazione della build nel sistema di gestione del codice sorgente e permettere al tuo strumento CI\/CD di assemblare tutto insieme.<\/p>\n<p><img decoding=\"async\" alt=\"Guida per principianti: creiamo una pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/573d613914d278e738a0fc7f05644b62.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Tutto bene, vero? Ma dove distribuire la tua applicazione?<\/p>\n<h3>Passo 4: Server per applicazioni web<\/h3>\n<p>\nFinora hai un file impacchettato, che pu\u00f2 essere sia eseguibile che installabile. Affinch\u00e9 qualsiasi applicazione sia veramente utile, deve fornire qualche servizio o interfaccia, ma hai bisogno di un contenitore per ospitare la tua applicazione.<\/p>\n<p>Un server per applicazioni web \u00e8 proprio quel contenitore. Fornisce un ambiente in cui pu\u00f2 essere definita la logica del pacchetto distribuito. Il server fornisce anche un'interfaccia e offre servizi web, aprendo socket al mondo esterno. Hai bisogno di un server HTTP, oltre a un certo ambiente (ad esempio, una macchina virtuale) per la sua installazione. Nel frattempo, supponiamo che tu ne sappia di pi\u00f9 in seguito (anche se di seguito parler\u00f2 dei contenitori).<\/p>\n<p>Esistono diversi server per applicazioni web open source.<\/p>\n<p>Nome<br \/>\nLicenza<br \/>\nLinguaggio di programmazione<\/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>Il tuo pipeline DevOps \u00e8 quasi pronto per l'uso. Ottimo lavoro!<\/p>\n<p><img decoding=\"async\" alt=\"Guida per principianti: creiamo una pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/9c314e8a42f154ded3b16ec7bdf01f99.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Anche se puoi fermarti qui e gestire l'integrazione da solo, la qualit\u00e0 del codice \u00e8 un aspetto fondamentale per un sviluppatore di applicazioni, e su questo bisogna prestare attenzione.<\/p>\n<h3>Passo 5: Copertura dei test del codice<\/h3>\n<p>\nL'implementazione dei test pu\u00f2 rappresentare un ulteriore impegno, ma gli sviluppatori devono rilevare eventuali errori nell'applicazione nelle fasi iniziali e migliorare la qualit\u00e0 del codice per garantire che gli utenti finali siano soddisfatti. Fortunatamente, esistono numerosi strumenti open source per testare il tuo codice e generare suggerimenti per migliorare la sua qualit\u00e0. Anche meglio, la maggior parte degli strumenti CI\/CD pu\u00f2 integrarsi con questi strumenti e automatizzare il processo.<\/p>\n<p>Il testing del codice si compone di due parti: framework di testing del codice, che aiutano a scrivere e eseguire i test, e strumenti per generare suggerimenti, che aiutano a migliorare la qualit\u00e0 del codice.<\/p>\n<p><b>Sistemi di testing del codice<\/b><\/p>\n<p>Nome<br \/>\nLicenza<br \/>\nLinguaggio di programmazione<\/p>\n<p>JUnit<br \/>\nEclipse Public License<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>Sistemi di raccomandazione per migliorare il codice<\/b><\/p>\n<p>Nome<br \/>\nLicenza<br \/>\nLinguaggio di programmazione<\/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 \/>\nCommon Public License<br \/>\nJava<\/p>\n<p>JaCoCo<br \/>\n Eclipse Public License<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>Nota che la maggior parte degli strumenti e framework menzionati sopra sono scritti per Java, Python e JavaScript, poich\u00e9 C++ e C# sono linguaggi di programmazione proprietari (anche se GCC \u00e8 open source).<\/p>\n<p>Ora che hai implementato gli strumenti di copertura del codice testato, il tuo pipeline DevOps dovrebbe assomigliare al diagramma mostrato all'inizio di questa guida.<\/p>\n<h3>Ulteriori passi<\/h3>\n<p>\n<b>Contenitori<\/b><\/p>\n<p>Come ho gi\u00e0 detto, puoi ospitare il tuo server su una macchina virtuale o un server, ma i container sono una soluzione popolare.<\/p>\n<p>Cosa sono i container? In breve, una macchina virtuale ha bisogno di una grande quantit\u00e0 di memoria di sistema operativo, superiore alla dimensione dell'applicazione, mentre un container ha bisogno solo di alcune librerie e configurazioni per eseguire l'applicazione. \u00c8 chiaro che le macchine virtuali hanno ancora applicazioni importanti, ma il container \u00e8 una soluzione leggera per ospitare l'applicazione, incluso il server delle applicazioni.<\/p>\n<p>Sebbene ci siano altre opzioni di container, i pi\u00f9 popolari sono Docker e Kubernetes.<\/p>\n<p>Docker: Apache 2.0<br \/>\nKubernetes: Apache 2.0<\/p>\n<p><b>Strumenti di automazione intermedia<\/b><\/p>\n<p>Il nostro pipeline DevOps \u00e8 principalmente orientato alla co-creazione e distribuzione di applicazioni, ma esistono molte altre cose che si possono fare con gli strumenti DevOps. Uno di questi \u00e8 l'uso di strumenti Infrastructure as Code (IaC), noti anche come strumenti di automazione intermedia. Questi strumenti aiutano ad automatizzare l'installazione, la gestione e altre attivit\u00e0 per il middleware. Ad esempio, uno strumento di automazione pu\u00f2 estrarre applicazioni come server di applicazioni, database e strumenti di monitoraggio, con le configurazioni corrette e distribuirle su un server di applicazioni.<\/p>\n<p>Ecco alcuni strumenti di automazione intermedia a codice aperto:<\/p>\n<p>Ansible: GNU Public<br \/>\nSaltStack: Apache 2.0<br \/>\nChef: Apache 2.0<br \/>\nPuppet: Apache o GPL<\/p>\n<p><img decoding=\"async\" alt=\"Guida per principianti: creiamo una pipeline DevOps\" src=\"\/wp-content\/uploads\/2020\/07\/148ef7317ca5780b412241ddaec9dc76.jpeg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Scopri i dettagli su come ottenere una professione richiesta da zero o fare un Level Up in abilit\u00e0 e stipendio, seguendo i corsi online a pagamento di 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\">Corso di DevOps<\/a><\/noindex> (12 mesi)<\/li>\n<\/ul>\n<p><\/p>\n<p>                        <b class=\"spoiler_title\">altri corsi<\/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\">Corso di Machine Learning<\/a><\/noindex> (12 settimane)<\/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\">Formazione per la professione di Data Science da zero<\/a><\/noindex> (12 mesi)<\/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\">Professione analista con qualsiasi livello di partenza<\/a><\/noindex> (9 mesi)<\/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\">Corso 'Python per lo sviluppo web'<\/a><\/noindex> (9 mesi)<\/li>\n<\/ul>\n<p><\/p>\n<h3>Utilit\u00e0<\/h3>\n<p><\/p>\n<ul>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/503196\/\">450 corsi gratuiti dalla Ivy League<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/508450\/\">Tendenze nel Data Science 2020<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/508556\/\">Data Science \u00e8 morta. Lunga vita al Business Science<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/506790\/\">Data Science agli steroidi: introduzione all'Intelligenza Decisionale<\/a><\/noindex><\/li>\n<li><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillfactory\/blog\/503504\/\">Il progetto di Data Science pi\u00f9 riuscito e controverso: Cambridge Analytica<\/a><\/noindex><\/li>\n<\/ul>\n<p>Fonte: <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.1.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\/it\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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\/it\/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\udd47Guida per principianti: creiamo un pipeline DevOps | ProHoster","description":"Se sei un principiante nel DevOps, dai un'occhiata a questa guida per creare il tuo primo pipeline in cinque fasi.","canonical_url":"https:\/\/prohoster.info\/it\/blog\/administrirovanie\/rukovodstvo-dlya-nachinayushhih-sozdaem-devops-pajplajn","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"it_IT","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\/it\/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\/it\/wp-json\/wp\/v2\/posts\/87467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=87467"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/87467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/87468"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=87467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=87467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=87467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}