
Creazione della prima catena DevOps in cinque passi per principianti.
DevOps è diventato la panacea per processi di sviluppo troppo lenti, disconnessi e problematici. Ma è necessario avere conoscenze minime in DevOps. Qui verranno esplorati concetti come la catena DevOps e come crearla in cinque passi. Non è una guida completa, ma solo una “base” che può essere ampliata. Iniziamo con la storia.
La mia introduzione a DevOps
Un tempo lavoravo con il cloud in Citi Group e sviluppavo un'applicazione web IaaS per gestire l'infrastruttura cloud di Citi, ma sono sempre stato curioso di capire come ottimizzare la catena di sviluppo e migliorare la cultura tra gli sviluppatori. Greg Lavender, il nostro CTO per l'architettura e l'infrastruttura cloud, mi ha consigliato un libro . Spiega splendidamente i principi di DevOps ed è anche molto scorrevole.
La tabella sul retro mostra con quale frequenza le aziende rilasciano nuove versioni:
Come fanno Amazon, Google e Netflix a rilasciare così tanto? La risposta è semplice: hanno capito come creare una catena DevOps quasi perfetta.
Da noi in Citi le cose non andavano affatto in questo modo, fino a quando non siamo passati a DevOps. All'epoca la mia squadra aveva ambienti diversi, ma il rilascio sul server di sviluppo avveniva manualmente. Tutti gli sviluppatori avevano accesso solo a un server di sviluppo basato su IBM WebSphere Application Server Community Edition. Ad ogni tentativo contemporaneo di rilascio, il server "crashava", e dovevamo ogni volta “trattare” dolorosamente tra di noi. Inoltre, avevamo una copertura del codice con test insufficiente, un processo di rilascio manuale complesso e nessuna possibilità di monitorare il rilascio del codice sulla base di qualche compito o richiesta del cliente.
Era chiaro che dovevamo fare urgentemente qualcosa, e ho trovato un collega con la mia stessa visione. Abbiamo deciso di creare insieme la prima catena DevOps: lui ha configurato una macchina virtuale e un server applicazioni Tomcat, mentre io mi sono occupato di Jenkins, integrazione con Atlassian Jira e BitBucket, così come della copertura del codice con test. Il progetto è stato un successo: abbiamo completamente automatizzato la catena di sviluppo, raggiunto quasi il 100% di uptime del server di sviluppo, e potevamo monitorare e migliorare la copertura del codice con test, e il branch Git poteva essere collegato al rilascio e al compito Jira. E quasi tutti gli strumenti con cui abbiamo costruito la catena DevOps erano open source.
In effetti, la catena era semplificata, dato che non abbiamo nemmeno utilizzato configurazioni avanzate con Jenkins o Ansible. Ma ce l'abbiamo fatta. Forse è conseguenza del principio (ovvero la regola 80/20).
Breve descrizione della catena DevOps e CI/CD
DevOps ha diverse definizioni. Come Agile, DevOps comprende diverse discipline. Ma la maggior parte sarebbe d'accordo con la seguente definizione: DevOps è un metodo, o ciclo di vita, di sviluppo software, il cui principio principale è creare una cultura in cui sviluppatori e altri dipendenti sono "sulla stessa lunghezza d'onda", il lavoro manuale è automatizzato, ciascuno si occupa di ciò che sa fare meglio, aumenta la frequenza delle consegne, la produttività e la flessibilità.
E sebbene solo gli strumenti non siano sufficienti per creare un ambiente DevOps, sono indispensabili. Il più importante di essi è l'integrazione continua e la consegna continua (CI/CD). Nella catena ci sono diverse fasi per ciascun ambiente (ad esempio, DEV (sviluppo), INT (integrazione), TST (test), QA (controllo qualità), UAT (test di accettazione da parte degli utenti), STG (preparazione), PROD (utilizzo)), i compiti manuali sono automatizzati, gli sviluppatori possono scrivere codice di qualità, consegnarlo e possono facilmente riposizionarsi.
Questa nota descrive come creare una catena DevOps in cinque passaggi, come mostrato nell'immagine qui sotto, utilizzando strumenti open source.
Passiamo all'azione.
Passaggio 1: Piattaforma CI/CD
Per prima cosa, hai bisogno di uno strumento CI/CD. Jenkins è uno strumento CI/CD open source scritto in Java con licenza MIT, da cui è iniziata la popolarizzazione del movimento DevOps ed è diventato di fatto lo standard per CI/CD.
E cos'è Jenkins? Immagina di avere un telecomando magico per vari servizi e strumenti. Di per sé, uno strumento CI/CD come Jenkins è inutile, ma unito a vari strumenti e servizi diventa onnipotente.
Oltre a Jenkins, ci sono molti altri strumenti open source, scegli quello che preferisci.
Ecco come appare il processo DevOps con uno strumento CI/CD
Hai uno strumento CI/CD in localhost, ma per ora non c'è molto da fare. Passiamo al passaggio successivo.
Passaggio 2: gestione delle versioni
Il modo migliore (e, probabilmente, più semplice) per testare la magia dello strumento CI/CD è integrarlo con uno strumento di controllo versioni (source control management, SCM). Perché è necessario il controllo versioni? Supponiamo che stiate sviluppando un'applicazione. La scrivete in Java, Python, C++, Go, Ruby, JavaScript o in qualsiasi altro linguaggio, ce ne sono tanti. Ciò che scrivete è chiamato codice sorgente. All'inizio, soprattutto se lavorate da soli, potete salvare tutto in una cartella locale. Ma quando il progetto cresce e si uniscono più persone, avete bisogno di un modo per condividere le modifiche nel codice, evitando conflitti durante le fusioni. E dovete anche avere un modo per ripristinare versioni precedenti senza utilizzare backup e senza fare copy-paste sui file di codice.
E qui senza SCM non si va da nessuna parte. SCM memorizza il codice nei repository, gestisce le sue versioni e coordina il lavoro tra gli sviluppatori.
Ci sono molti strumenti SCM, ma Git è giustamente diventato lo standard de facto. Consiglio di utilizzarlo, anche se ci sono altre opzioni.

Ecco come appare il pipeline DevOps dopo l'aggiunta di SCM.
Lo strumento CI/CD può automatizzare il caricamento e il download del codice sorgente e favorire la collaborazione in team. Non male? Ma come si fa ora a trasformarlo in un'applicazione funzionante, amata da miliardi di utenti?
Passo 3: strumento di automazione della build
Tutto procede per il meglio. Potete caricare codice e registrare le modifiche nel sistema di controllo versioni, e anche invitare amici a lavorare con voi. Ma ancora non avete un'app. Per renderla un'applicazione web, deve essere compilata e confezionata per la distribuzione o eseguita come file eseguibile. (Un linguaggio di programmazione interpretato, come JavaScript o PHP, non ha bisogno di essere compilato.)
Utilizzate uno strumento di automazione della build. Qualunque strumento scegliate, raccoglierà il codice nel formato necessario e automatizzerà la pulizia, la compilazione, il testing e la distribuzione. Gli strumenti di build variano a seconda del linguaggio, ma di solito si utilizzano le seguenti opzioni open source.

Ottimo! Ora inseriamo i file di configurazione dello strumento di automazione della build nel sistema di controllo versioni, affinché lo strumento CI/CD possa raccoglierli.
Sembra che vada tutto bene. Ma dove dobbiamo ora distribuire tutto questo?
Passo 4: server per applicazioni web
Quindi, hai un file pacchettizzato che può essere eseguito o distribuito. Affinché l'applicazione porti davvero valore, deve avere qualche servizio o interfaccia, ma è necessario trovare un posto per tutto questo.
Un'applicazione web può essere ospitata su un server di applicazioni. Il server di applicazioni fornisce un ambiente in cui è possibile eseguire la logica del programma dal pacchetto, eseguire il rendering dell'interfaccia e aprire servizi web tramite socket. Hai bisogno di un server HTTP e di alcuni altri ambienti (una macchina virtuale, ad esempio) per installare il server di applicazioni. Per ora, immaginiamo di avere tutto chiaro nel processo (anche se parlerò dei container più avanti).
Ci sono diversi server di applicazioni web open source.
Abbiamo già creato una catena DevOps quasi funzionante. Ottimo lavoro!
In linea di principio, qui puoi fermarti, dopodiché te la caverai da solo, ma vale la pena parlare anche della qualità del codice.
Passo 5: Copertura dei test
Il testing richiede molto tempo e impegno, ma è meglio trovare subito gli errori e migliorare il codice per soddisfare gli utenti finali. Per questo scopo, ci sono molti strumenti open source che non solo testeranno il codice, ma offriranno anche consigli su come migliorarlo. La maggior parte degli strumenti CI/CD può connettersi a questi strumenti e automatizzare il processo.
Il testing è suddiviso in due parti: framework di testing per scrivere ed eseguire test, e strumenti con suggerimenti per migliorare la qualità del codice.
Framework di testing
Strumenti con suggerimenti per la qualità
La maggior parte di questi strumenti e framework è scritta per Java, Python e JavaScript, poiché C++ e C# sono proprietari (anche se GCC ha codice sorgente aperto).
Abbiamo applicato strumenti di copertura dei test, e ora il pipeline DevOps dovrebbe apparire come nel diagramma all'inizio della guida.
Ulteriori passi
Contenitori
Come ho già detto, il server di applicazioni può essere ospitato su una macchina virtuale o un server, ma i container sono più popolari.
? Вкратце, в виртуальной машине операционная система чаще всего занимает больше места, чем приложение, а контейнеру обычно достаточно нескольких библиотек и конфигурации. В некоторых случаях без виртуальных машин не обойтись, но контейнер вмещает приложение вместе с сервером без лишних затрат.
Per i container di solito si utilizza Docker e Kubernetes, anche se ci sono altre opzioni.
Leggi articoli su Docker e Kubernetes su :
Strumenti di automazione del middleware
La nostra catena DevOps è orientata alla costruzione e fornitura collaborativa delle applicazioni, ma con gli strumenti DevOps è possibile fare anche altre cose interessanti. Ad esempio, utilizzare strumenti di "infrastruttura come codice" (IaC), comunemente noti come strumenti di automazione del middleware. Questi strumenti aiutano ad automatizzare l'installazione, la gestione e altre attività per il middleware. Ad esempio, lo strumento di automazione può prendere applicazioni (server web, database, strumenti di monitoraggio) con configurazioni corrette e distribuirle sul server delle applicazioni.
Ecco alcune opzioni di strumenti di automazione del middleware open source:

Dettagli negli articoli su :
E ora che si fa?
Questa è solo la punta dell'iceberg. La catena DevOps può fare molto di più. Inizia con uno strumento CI/CD e scopri cosa altro puoi automatizzare per semplificare il tuo lavoro. Non dimenticare gli per una collaborazione efficace.
Ecco ancora alcuni buoni articoli su DevOps per principianti:
Inoltre, è possibile integrare DevOps con strumenti open source per l'agile:
Fonte: habr.com
