{"id":25415,"date":"2024-01-23T10:06:55","date_gmt":"2024-01-23T09:06:55","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=25415"},"modified":"2024-01-25T12:21:26","modified_gmt":"2024-01-25T11:21:26","slug":"verso-il-devsecops-con-gitlab","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/","title":{"rendered":"Verso il DevSecOps con GitLab"},"content":{"rendered":"\n<p>In questo articolo esploreremo la transizione dal ciclo di vita del software tradizionale al contesto del DevSecOps, approfondendo aspetti legati a DevOps e alla CI\/CD. Inoltre, ci concentreremo sui problemi affrontati durante questo percorso e sulle soluzioni sviluppate nel corso del tempo, con un particolare riguardo su GitLab, una piattaforma di DevSecOps unificata.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-sdlc-tradizionale\">SDLC Tradizionale<\/h2>\n\n\n\n<p>Prima di introdurre concetti di DevOps e DevSecOps, \u00e8 importante fare un tuffo nel passato per capire come anni fa venivano sviluppati e rilasciati i software applicativi.<\/p>\n\n\n\n<p>Credo tutti abbiamo gi\u00e0 sentito parlare di \u201c<strong>modello waterfall<\/strong>\u201d (in italiano \u201cmodello a cascata\u201d). Esso rappresenta il Software Development Life Cycle (SDLC) tradizionale, ovvero quello in cui si seguono una serie di step fino ad arrivare al prodotto (software) finito e consegnato al cliente.<\/p>\n\n\n\n<p>Si inizia con una fase di analisi e raccolta dei requisiti, dopodich\u00e9 si passa alla fase di progettazione dove si progetta il software in modo che rispecchi i requisiti.<\/p>\n\n\n\n<p>Dopo aver terminato la progettazione segue l\u2019implementazione (scrittura del codice applicativo), per poi procedere con i test finalizzati a verificare che tutto funzioni come da aspettative. Successivamente, si procede con il deploy in ambiente di produzione.<\/p>\n\n\n\n<p>Vi \u00e8 anche una fase di manutenzione utile nel caso in cui escono dei bug durante l\u2019utilizzo del software da parte del cliente oppure in caso di piccole modifiche oppure aggiunte di funzionalit\u00e0 (features) richieste sempre dal cliente.<\/p>\n\n\n\n<p>Il problema dell\u2019approccio waterfall \u00e8 che il cliente cambia sempre idea! C\u2019\u00e8 il serio rischio che durante la fase di progettazione, o addirittura durante quella di implementazione, il cliente rivoluzioni tutto con nuovi requisiti spesso incompatibili con quelli raccolti nella prima fase di analisi.<\/p>\n\n\n\n<p>Il team di sviluppo non \u00e8 mai pienamente certo di soddisfare i requisiti del cliente in quanto possono variare nel tempo. Questo come conseguenza comporta fare uno o pi\u00f9 passi indietro, ovvero si rischia di tornare alla fase iniziale di analisi e raccolta dei requisiti e di rifare la progettazione e l\u2019implementazione.<\/p>\n\n\n\n<p>Oggi per fortuna la metodologia waterfall \u00e8 quasi completamente un ricordo: non viene pi\u00f9 utilizzata a meno di casi particolari.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-metodologia-agile\">Metodologia Agile<\/h2>\n\n\n\n<p>Il subentro della <strong>metodologia agile<\/strong> ha cambiato tutto! A differenza dell\u2019approccio waterfall, \u00e8 basata sulla distribuzione continua del software in maniera rapida ed iterativa (ciclica).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/kwjgxnQ.jpg\" alt=\"\" style=\"aspect-ratio:1.054968287526427;width:347px;height:auto\"\/><\/figure><\/div>\n\n\n<p>L\u2019obiettivo \u00e8 quello di rilasciare rapidamente le modifiche al software in piccole porzioni, arrivando pian piano a soddisfare le esigenze del cliente che, come sappiamo, possono mutare nel tempo.<\/p>\n\n\n\n<p>In questo modo si tenta di ridurre il rischio di fallimento, sviluppando il software in finestre di tempo limitate chiamate iterazioni o <strong>sprint<\/strong>, che durano in genere da 1 a 4 settimane.<\/p>\n\n\n\n<p>Ogni iterazione \u00e8 come un piccolo progetto a s\u00e9 stante e deve contenere tutto ci\u00f2 che \u00e8 necessario per rilasciare un piccolo incremento nelle funzionalit\u00e0 del software: quindi ogni volta si procede con la pianificazione, analisi dei requisiti, progettazione, implementazione, test, deploy e revisione.<\/p>\n\n\n\n<p>Abbiamo per\u00f2 un side-effect: la velocit\u00e0 con cui vengono apportati i cambiamenti potrebbe impattare sulla qualit\u00e0 del software che andiamo a rilasciare! Gli sviluppatori per completare lo sprint nei tempi stabiliti potrebbero trascurare alcuni aspetti relativi alla qualit\u00e0 del software.<\/p>\n\n\n\n<p>In questo contesto, il <strong>DevOps<\/strong> entra in gioco a gamba tesa e si propone come soluzione!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-development-amp-operation\">Development &amp; Operation<\/h2>\n\n\n\n<p>In generale, in un\u2019organizzazione possiamo distinguere due team: quello di Development e quello di Operation.<\/p>\n\n\n\n<p>Il <strong>team di Development<\/strong> si occupa dello sviluppo del software, ovvero crea applicazioni seguendo le indicazioni del business nel modo pi\u00f9 veloce possibile. L\u2019obiettivo \u00e8 quello di arrivare rapidamente in ambiente di produzione e ridurre al minimo il tempo del \u201ctime to market\u201d.<\/p>\n\n\n\n<p>Il <strong>team di Operation<\/strong>, invece, si occupa di gestire le applicazioni in ambiente di produzione. Ha un duplice obbiettivo: rendere l\u2019ambiente di esercizio il pi\u00f9 stabile e sicuro possibile, ed evitare impatti negativi relativi al deploy di applicazioni non sufficientemente stabili e preformanti.<\/p>\n\n\n\n<p>\u00c8 come se avessimo un muro (detto \u201c<strong>muro di confusione<\/strong>\u201d) tra i due team:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/3AJvSBP.png\" alt=\"\" style=\"aspect-ratio:2.2286585365853657;width:602px;height:auto\"\/><\/figure><\/div>\n\n\n<p>Il team di Development ha la pressione del business e tende a rilasciare le applicazioni fin troppo velocemente a scapito della qualit\u00e0 e delle prestazioni, mentre dall\u2019altra parte del muro c&#8217;\u00e8 il team di Operation che richiede stabilit\u00e0 e requisiti di qualit\u00e0, performance e sicurezza per l\u2019applicazione deployata in ambiente di produzione.<\/p>\n\n\n\n<p>A causa di questi obiettivi parzialmente in conflitto tra questi due team di lavoro, si \u00e8 sempre avuta una sorta di diffidenza reciproca, che spesso si traduce in inefficienza.<\/p>\n\n\n\n<p>Questo conflitto viene risolto con il <strong><a href=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/devsecops-cose-e-perche-e-cosi-importante\/\" target=\"_blank\" aria-label=\"DevOps (opens in a new tab)\" rel=\"noreferrer noopener\" class=\"ek-link\">DevOps<\/a><\/strong>, ovvero un approccio che spinge questi due team a cooperare per rendere il processo di deploy veloce e al contempo sicuro.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-devops\">DevOps<\/h2>\n\n\n\n<p>La parola <strong>DevOps<\/strong> potrebbe sembrare un concetto piuttosto semplice, infatti, si compone dalla parola \u201cdev\u201d (development) e dalla parola \u201cops\u201d (operations). Come allude la parola stessa, consiste nel riunire queste due aree funzionali storicamente separate. L\u2019obiettivo \u00e8 quello di colmare il divario (rimuovere i silos) tra i team di sviluppo e di operazioni.<\/p>\n\n\n\n<p>Per definizione, il <strong>DevOps<\/strong> \u00e8 un insieme di pratiche da adottare volte ad accelerare i processi che consentono ad un\u2019idea (es. una nuova feature nel software, una richiesta di miglioramento, fix di bugs, ecc.) di passare dallo sviluppo al deployment in ambiente di produzione, assicurando un\u2019elevata qualit\u00e0.<\/p>\n\n\n\n<p>Con il DevOps i due team non agiscono pi\u00f9 separatamente, ma si affidano all\u2019automatizzazione per velocizzare processi manuali che sono da sempre lenti.<\/p>\n\n\n\n<p>Il punto chiave \u00e8 rendere automatici, e di conseguenza obbligatori, una serie di processi in sequenza, come quello di build, test, rilascio e deploy attraverso l\u2019utilizzo di <strong>pipeline di CI\/CD<\/strong> e altri tool.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-che-cosa-e-il-devops\">Che cosa \u00e8 il DevOps?<\/h3>\n\n\n\n<p>Il concetto di DevOps \u00e8 stato introdotto circa 10 anni fa, tuttavia, oggi ha un significato pi\u00f9 ampio in quanto \u00e8 ancora in fase di evoluzione. Comprende tantissime aree, e viene adottato e adattato in base al contesto e agli obiettivi aziendali.<\/p>\n\n\n\n<p>Il DevOps non \u00e8 assolutamente un ruolo, un team oppure una riorganizzazione del personale. Chi pensa che il DevOps possa essere realizzato attraverso una riorganizzazione o uno sforzo di assunzione sta solamente guardando ad un solo pezzo del puzzle del DevOps. La struttura organizzativa e i ruoli del team sono secondari rispetto alle pratiche cooperative sottostanti sul lavoro.<\/p>\n\n\n\n<p>Inoltre, il DevOps non significa semplicemente implementare una serie di tool di DevOps. Non ha senso utilizzare questi tool senza aver ben chiaro in mente i principi base. L\u2019automazione, punto cardine del DevOps, \u00e8 solo l\u2019esercizio del potere: un\u2019automazione imprudente pu\u00f2 causare tanti danni quanto un\u2019automazione saggia pu\u00f2 portare benefici.<\/p>\n\n\n\n<p>Fatte queste considerazioni, possiamo dare una definizione pi\u00f9 generale del DevOps: \u00e8 quella disciplina radicata nella collaborazione e nella comunicazione, resa possibile rimuovendo le barriere percepite tra i team, creando fiducia in una cultura di apprendimento e miglioramento continuo, e attingendo da comprovate pratiche tecniche e gestionali che lavorano verso l\u2019obiettivo comune di accorciare i cicli di distribuzione del software e migliorare la stabilit\u00e0 delle implementazioni.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-shift-left\">Shift-Left<\/h3>\n\n\n\n<p>Uno dei pilastri fondamentali del DevOps \u00e8 il cosiddetto <strong>Shift Left<\/strong>, a volte chiamato anche Start Left. Descrive il principio di effettuare test e controlli sulla qualit\u00e0 del codice nelle prime fasi del ciclo di vita dello sviluppo del software.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/0MrvYWh.jpg\" alt=\"\" style=\"aspect-ratio:1.5;width:229px;height:auto\"\/><\/figure><\/div>\n\n\n<p>Con la diffusione delle metodologie agili, il test e i controlli di qualit\u00e0 del software non devono attendere finch\u00e9 gli sviluppatori non consegnano il loro codice. Possono invece accadere mentre gli sviluppatori stanno sviluppando. Visivamente, i test e i controlli sulla qualit\u00e0 del software si spostano a sinistra: da qui l\u2019origine del termine shift-left.<\/p>\n\n\n\n<p>I vantaggi dello shift-left sono molteplici: innanzitutto possiamo scoprire tempestivamente i problemi nel software, inoltre, possiamo garantire, una volta che il software viene distribuito, che questo sia stabile e richieda meno manutenzione.<\/p>\n\n\n\n<p>Con lo shift-left gli sviluppatori sono al centro del cambiamento: sono in prima fila! Questo per\u00f2 non significa che addossiamo pi\u00f9 responsabilit\u00e0 ai poveri sviluppatori, ma bens\u00ec gli stiamo riducendo il carico di lavoro trasformando problemi critici di \u201cfine gioco\u201d in banali soluzioni di \u201cinizio gioco\u201d.<\/p>\n\n\n\n<p>I test manuali e i controlli di qualit\u00e0 richiedono molto tempo, sono frustranti e introducono errori umani. Questo andrebbe a rafforzare il muro tra \u201cdev\u201d e \u201cops\u201d, ed \u00e8 l\u2019opposto a ci\u00f2 che il DevOps cerca di fare. Per questo motivo lo shift-left richiede automazione!<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-pratiche-di-ci-cd\">Pratiche di CI\/CD<\/h2>\n\n\n\n<p>L\u2019automazione \u00e8 il punto focale del DevOps per unire il team Dev e Ops, e si pu\u00f2 applicare in vare modalit\u00e0. La pi\u00f9 importante fa utilizzo di pipeline di <strong>Continuous Integration<\/strong> e <strong>Continuous Deployment<\/strong> (CI\/CD).<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/6J3uZoK.png\" alt=\"\" style=\"aspect-ratio:1.6666666666666667;width:596px;height:auto\"\/><\/figure><\/div>\n\n\n<h3 class=\"wp-block-heading\" id=\"h-continuous-integration\">Continuous Integration<\/h3>\n\n\n\n<p>La <strong>Continuous Integration (CI)<\/strong> \u00e8 una pratica che si applica quando lo sviluppo del codice avviene attraverso l\u2019utilizzo di un sistema di versionamento (es. Git).&nbsp;<\/p>\n\n\n\n<p>Questa pratica spinge i developer ad integrare frequentemente le modifiche sviluppate in locale verso una code base condivisa (repository), per poi poter eseguire una pipeline che automatizza il processo di build (compilazione) e l\u2019esecuzione di test automatici, come ad esempio quelli di unit\u00e0, di qualit\u00e0 e di integrazione.<\/p>\n\n\n\n<p><em>Nota: per poter effettuare i test di integrazione possiamo pensare di affidarci al mock oppure di deployare l\u2019applicazione in un ambiente di staging che verr\u00e0 subito distrutto dopo i test condotti.<\/em><\/p>\n\n\n\n<p>Dunque, ad ogni nuova integrazione (es. quando viene aperta una pull request) viene eseguita questa pipeline. Nel caso la compilazione automatica oppure i test automatici fallissero, anche la pipeline fallirebbe. Lo sviluppatore \u00e8 costretto a rivedere il codice, fixandolo e migliorandolo in modo che i test passino con successo (assicurando di conseguenza la correttezza e la qualit\u00e0 del software rilasciato).<\/p>\n\n\n\n<p>Se i test passano con successo, la CI effettua il packaging (impacchetta l\u2019artefatto buildato) e lo deposita all\u2019interno di un artifact repository, versionandolo ed aggiungendo altri metadati.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-continuous-deployment\">Continuous Deployment<\/h3>\n\n\n\n<p>Con il <strong>Continuous Deployment (CD)<\/strong>, oltre agli automatismi previsti dalla CI, viene automatizzato tramite pipeline anche il deploy in ambiente (es. in ambiente di collaudo e di produzione). Infine, nel caso in cui il deploy in produzione avviene manualmente, essendo ragionevolmente uno step molto delicato, parleremo invece Continuous Delivery.&nbsp;<\/p>\n\n\n\n<p>Di solito quando si pensa al DevOps, viene subito in mente il simbolo dell\u2019infinito:<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/0XWFMZ2.png\" alt=\"CI\/CD, Devsecops Gitlab\" style=\"aspect-ratio:2.5245283018867926;width:635px;height:auto\"\/><\/figure><\/div>\n\n\n<p>Questo particolare simbolo allude agli step di CI\/CD che si ripetono in maniera ciclica: plan, create, verify, package, release (deploy), configure e monitor.&nbsp;<\/p>\n\n\n\n<p>Si parte sempre dalla pianificazione , poi si sviluppa il codice (in base alle specifiche delineate nella fase di pianificazione), dopodich\u00e9 viene fatta richiesta di integrazione del codice all\u2019interno della code base condivisa, tuttavia, prima di essere integrato viene revisionato (optional) e viene avviata una pipeline di CI\/CD che effettua automaticamente la compilazione (build) e la verifica (test) del codice, fino depositare l\u2019artefatto prodotto dalla build all\u2019interno di un artifact repository (es. per progetti Maven\/Java quello che verr\u00e0 depositato potrebbe essere un JAR e il relativo POM).&nbsp;<\/p>\n\n\n\n<p>Dopodich\u00e9, la pipeline procede con il rilascio vero e proprio (deploy) del software in produzione.&nbsp;&nbsp;<\/p>\n\n\n\n<p>Come gi\u00e0 accennato questo step di deploy pu\u00f2 anche avvenire manualmente nel caso adottiamo la pratica di Continuous Delivery piuttosto che quella del Continuous Deployment.&nbsp;<\/p>\n\n\n\n<p>Una volta effettuato il deploy, si entra nella fase di operate: qui il team va a testare la stabilit\u00e0 del software ed eventualmente va a configurarlo se necessario. In parallelo, gli utenti finali e\/o i tester iniziano ad utilizzare il software.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"330\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-3-1024x330.jpeg\" alt=\"\" class=\"wp-image-25475\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-3-1024x330.jpeg 1024w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-3-300x97.jpeg 300w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-3-768x247.jpeg 768w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-3.jpeg 1344w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-monitoraggio\">Monitoraggio<\/h3>\n\n\n\n<p>Il software deployato va per\u00f2 anche monitorato! Gli utenti finali e\/o i tester possono segnalare i problemi (issue) durante l\u2019utilizzo del software (es. bug e casi non gestiti), oppure fornire suggerimenti su come migliorarlo o su ci\u00f2 che vogliono sia ancora implementato.&nbsp;<\/p>\n\n\n\n<p>Tutto questo chiaramente verr\u00e0 affrontato in un una prossima iterazione \/ sprint. Quindi torneremo nuovamente alla fase di pianificazione dove verr\u00e0 aggiornato il backlog in base alle nuove esigenze del progetto e ai bug da fixare, si definiscono delle milestone e le attivit\u00e0 si suddividono in sprint, e si prosegue con il loop (coding, testing, \u2026).&nbsp;<\/p>\n\n\n\n<p>Nella fase di monitoraggio ci si avvale anche di una serie di tool per appunto monitorare automaticamente le performance del software (es. in termini di CPU\/RAM), oppure per analizzare i log con lo scopo di accorgerci di eventuali errori o in generale di comportamenti anomali degni di attenzione. I dati raccolti in real time vengono poi visualizzati su dashboard grafiche.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-devsecops\">DevSecOps<\/h2>\n\n\n\n<p>Cosa \u00e8 il DevSecOps? Semplicemente: DevOps + Security.&nbsp;<\/p>\n\n\n\n<p>Il <strong>DevSecOps<\/strong>, chiamato a volte anche SecDevOps, possiamo vederlo come un&#8217;estensione del DevOps, che per\u00f2 pone particolare attenzione sulla sicurezza del software che viene rilasciato. La sicurezza diventa parte integrante della qualit\u00e0!&nbsp;<\/p>\n\n\n\n<p>L\u2019obiettivo \u00e8 quello di riunire tre team (team di development, di operation, e di security) in modo da abbreviare i tempi di rilascio, ridurre i costi, rafforzare la sicurezza ed aumentare la produttivit\u00e0 degli sviluppatori.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/uQ1jA6U.jpg\" alt=\"devsecops, gitlab\" style=\"aspect-ratio:1.3333333333333333;width:516px;height:auto\"\/><\/figure><\/div>\n\n\n<p>Lo shift-left \u00e8 applicato anche alla sicurezza: spostiamo verso sinistra (nel ciclo di vita dello sviluppo del software) i controlli sulla sicurezza del software. Piuttosto che affrontare revisioni e ispezioni di sicurezza alla fine del processo e trovare brutte soprese, in questo modo ci pensiamo prima!&nbsp;<\/p>\n\n\n\n<p>Con il DevSecOps vogliamo incorporare la sicurezza in tutto il ciclo di vita del software in modo da ridurre le vulnerabilit\u00e0 di sicurezza. Tutti sono pi\u00f9 felici in quanto il team DevOps assicurer\u00e0 il rispetto di queste best practice e controlli di sicurezza.&nbsp;<\/p>\n\n\n\n<p>Nella pipeline di CI\/CD verranno introdotti ulteriori job, racchiusi in opportuni stage, che valutano e verificano la security applicativa, come ad esempio:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Static Application Security Testing (SAST)<\/strong>, per verificare la presenza di vulnerabilit\u00e0 di sicurezza nel codice sorgente;&nbsp;<\/li>\n\n\n\n<li><strong>Dynamic Application Security Testing (DAST)<\/strong>, per testare la sicurezza di un applicativo in running simulando attacchi di vario genere;&nbsp;<\/li>\n\n\n\n<li><strong>Secret Detection<\/strong>, per verificare la presenza di dati sensibili come password nell\u2019history del repository applicativo;&nbsp;<\/li>\n\n\n\n<li><strong>Dependency Scanning<\/strong>, per controllare se il software utilizza dipendenze di progetto ad alto rischio (es. versioni di componenti OSS con vulnerabilit\u00e0 note);&nbsp;<\/li>\n\n\n\n<li><strong>Container Scanning<\/strong> (per verificare la presenza di vulnerabilit\u00e0 nelle immagini Docker utilizzate per virtualizzare l\u2019applicativo);&nbsp;<\/li>\n\n\n\n<li>\u2026&nbsp;<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-gitlab-piattaforma-di-devsecops\">GitLab, piattaforma di DevSecOps<\/h2>\n\n\n\n<p>Applicare il DevSecOps nella tool chain software solitamente non \u00e8 un processo immediato, ma richiede molteplici configurazioni ed integrazioni tra tool.&nbsp;<\/p>\n\n\n\n<p>Fortunatamente, <strong>GitLab<\/strong> viene in nostro aiuto, proponendosi come <strong>DevSecOps platform<\/strong> per la gestione del ciclo di vita del software, dalla fase di planning fino a quella del deploy in produzione.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"658\" height=\"322\" src=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-6.png\" alt=\"\" class=\"wp-image-25477\" style=\"aspect-ratio:2.0434782608695654;width:543px;height:auto\" srcset=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-6.png 658w, https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-6-300x147.png 300w\" sizes=\"auto, (max-width: 658px) 100vw, 658px\" \/><\/figure><\/div>\n\n\n<p>La piattaforma GitLab \u00e8 conosciuta specialmente per la gestione di repository Git in un contesto distribuito e basato sulla collaborazione tra developers. Tuttavia, non \u00e8 limitato solo a questa funzionalit\u00e0, ma ne fornisce tante altre che si rivelano utili durante lo sviluppo e il rilascio del nostro software, sia in ottica di DevOps che di DevSecOps:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Pianificazione del lavoro;&nbsp;<\/li>\n\n\n\n<li>Suddivisione ed assegnazione dei task ai membri del team;&nbsp;<\/li>\n\n\n\n<li>Code review;&nbsp;<\/li>\n\n\n\n<li>Build e gestione di flussi di CI\/CD tramite pipeline;&nbsp;<\/li>\n\n\n\n<li>Security applicativa integrata facilmente in pipeline;&nbsp;<\/li>\n\n\n\n<li>Gestione del deploy in ambiente (es. di produzione);&nbsp;<\/li>\n\n\n\n<li>\u2026&nbsp;<\/li>\n<\/ul>\n\n\n\n<p>In figura viene rappresentato un processo in linea con il DevSecOps implementabile su GitLab:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/fu971Fc.png\" alt=\"devops, devsecops, gitlab\"\/><\/figure>\n\n\n\n<p>Anche se Gitlab \u00e8 open-source, \u00e8 suddiviso in due edizioni: la community (CE) che \u00e8 gratuita, e l\u2019enterprise (EE) che prevede anche piani a pagamento e vanta di un maggior numero di funzionalit\u00e0. La versione CE soddisfa maggior parte dei requisiti per la gestione di un progetto \/ team secondo i paradigmi del DevSecOps,&nbsp; la versione EE aggiunge ulteriori funzionalit\u00e0, garantisce update continui per bug fixing e permette al team di contattare il team GitLab con risposte garantite da SLA contrattuali.<\/p>\n\n\n\n<p>GitLab \u00e8 disponibile nelle seguenti versioni:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/gitlab.com\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Cloud<\/strong><\/a><em> (gitlab.com)<\/em><\/li>\n\n\n\n<li><a href=\"https:\/\/about.gitlab.com\/dedicated\/\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Dedicated<\/strong><\/a>\n<ul class=\"wp-block-list\">\n<li>Servizio SaaS single-tenant;<\/li>\n\n\n\n<li>GitLab viene deployato su una cloud region AWS a scelta;<\/li>\n\n\n\n<li>Completamente isolato, ospitato, e gestito da Gitlab Inc.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><a href=\"https:\/\/docs.gitlab.com\/ee\/topics\/offline\/quick_start_guide.html\" target=\"_blank\" rel=\"noreferrer noopener\"><strong>Self-managed<\/strong><\/a>\n<ul class=\"wp-block-list\">\n<li>Soluzione on-premise;<\/li>\n\n\n\n<li>Prevede l&#8217;installazione, gestione e mantenimento di una propria istanza GitLab;<\/li>\n\n\n\n<li>Modalit\u00e0 di installazione: Source, Linux Package, Docker, Helm.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Di seguito le funzionalit\u00e0 offerte finora da GitLab (v. 16.7) per ogni fase operativa del DevSecOps:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/i.imgur.com\/dKYrubV.png\" alt=\"\"\/><\/figure>\n\n\n\n<p>Visita il sito ufficiale di <a href=\"https:\/\/about.gitlab.com\/platform\/\" target=\"_blank\" rel=\"noreferrer noopener\">GitLab<\/a> e consulta la <a href=\"https:\/\/www.profesia.it\/it\/gitlab\" target=\"_blank\" rel=\"noreferrer noopener\">sezione dedicata di Profesia<\/a> per ricevere maggiori informazioni sul prodotto e conoscere i vantaggi dell\u2019utilizzo di una DevOps Platform all&#8217;interno dei tuoi processi di sviluppo.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In questo articolo esploreremo la transizione dal ciclo di vita del software tradizionale al contesto del DevSecOps, approfondendo aspetti legati a DevOps e alla CI\/CD. Inoltre, ci concentreremo sui problemi affrontati durante questo percorso e sulle soluzioni sviluppate nel corso del tempo, con un particolare riguardo su GitLab, una piattaforma di DevSecOps unificata. SDLC Tradizionale&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/\">Read more<\/a><\/p>\n","protected":false},"author":236,"featured_media":25469,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10287],"tags":[11703],"collections":[11708],"class_list":{"0":"post-25415","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-devops-it","8":"tag-gitlab-it","9":"collections-dalla-community","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Verso il DevSecOps con GitLab - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Transizione dal ciclo di vita del software tradizionale al contesto del DevOps e DevSecOps con focus sulla DevSecOps Platform GitLab\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Verso il DevSecOps con GitLab\" \/>\n<meta property=\"og:description\" content=\"Transizione dal ciclo di vita del software tradizionale al contesto del DevOps e DevSecOps con focus sulla DevSecOps Platform GitLab.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-01-23T09:06:55+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-25T11:21:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1050\" \/>\n\t<meta property=\"og:image:height\" content=\"729\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"gflace\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"gflace\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"14 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/\"},\"author\":{\"name\":\"gflace\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/0b4e0b1079f3fe56e215676f59c71a30\"},\"headline\":\"Verso il DevSecOps con GitLab\",\"datePublished\":\"2024-01-23T09:06:55+00:00\",\"dateModified\":\"2024-01-25T11:21:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/\"},\"wordCount\":2662,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg\",\"keywords\":[\"gitlab\"],\"articleSection\":[\"DevOps\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/\",\"name\":\"Verso il DevSecOps con GitLab - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg\",\"datePublished\":\"2024-01-23T09:06:55+00:00\",\"dateModified\":\"2024-01-25T11:21:26+00:00\",\"description\":\"Transizione dal ciclo di vita del software tradizionale al contesto del DevOps e DevSecOps con focus sulla DevSecOps Platform GitLab\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg\",\"width\":1050,\"height\":729,\"caption\":\"DevSecOps\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Verso il DevSecOps con GitLab\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/0b4e0b1079f3fe56e215676f59c71a30\",\"name\":\"gflace\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/59cd0f70-aeec-11ee-998a-b778bc9d7fff-100x100.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/59cd0f70-aeec-11ee-998a-b778bc9d7fff-100x100.png\",\"caption\":\"gflace\"},\"description\":\"I am an IT enthusiast with a particular love for the world of DevOps and MLOps. Through innovative tools and advanced practices, I seek to create synergy between software development and release in a production environment. Let's automate, deploy, and iterate! \ud83d\ude80 #DevOps #DevSecOps #MLOps #TechEnthusiast\",\"sameAs\":[\"https:\/\/www.profesia.it\/\",\"https:\/\/www.linkedin.com\/in\/giampaolo-flace-3ab817175\/\"],\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/gflace\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Verso il DevSecOps con GitLab - Codemotion Magazine","description":"Transizione dal ciclo di vita del software tradizionale al contesto del DevOps e DevSecOps con focus sulla DevSecOps Platform GitLab","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/","og_locale":"en_US","og_type":"article","og_title":"Verso il DevSecOps con GitLab","og_description":"Transizione dal ciclo di vita del software tradizionale al contesto del DevOps e DevSecOps con focus sulla DevSecOps Platform GitLab.","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2024-01-23T09:06:55+00:00","article_modified_time":"2024-01-25T11:21:26+00:00","og_image":[{"width":1050,"height":729,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg","type":"image\/jpeg"}],"author":"gflace","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"gflace","Est. reading time":"14 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/"},"author":{"name":"gflace","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/0b4e0b1079f3fe56e215676f59c71a30"},"headline":"Verso il DevSecOps con GitLab","datePublished":"2024-01-23T09:06:55+00:00","dateModified":"2024-01-25T11:21:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/"},"wordCount":2662,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg","keywords":["gitlab"],"articleSection":["DevOps"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/","name":"Verso il DevSecOps con GitLab - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg","datePublished":"2024-01-23T09:06:55+00:00","dateModified":"2024-01-25T11:21:26+00:00","description":"Transizione dal ciclo di vita del software tradizionale al contesto del DevOps e DevSecOps con focus sulla DevSecOps Platform GitLab","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg","width":1050,"height":729,"caption":"DevSecOps"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/verso-il-devsecops-con-gitlab\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/www.codemotion.com\/magazine\/it\/devops-it\/"},{"@type":"ListItem","position":3,"name":"Verso il DevSecOps con GitLab"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/0b4e0b1079f3fe56e215676f59c71a30","name":"gflace","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/59cd0f70-aeec-11ee-998a-b778bc9d7fff-100x100.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/59cd0f70-aeec-11ee-998a-b778bc9d7fff-100x100.png","caption":"gflace"},"description":"I am an IT enthusiast with a particular love for the world of DevOps and MLOps. Through innovative tools and advanced practices, I seek to create synergy between software development and release in a production environment. Let's automate, deploy, and iterate! \ud83d\ude80 #DevOps #DevSecOps #MLOps #TechEnthusiast","sameAs":["https:\/\/www.profesia.it\/","https:\/\/www.linkedin.com\/in\/giampaolo-flace-3ab817175\/"],"url":"https:\/\/www.codemotion.com\/magazine\/author\/gflace\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-600x400.jpeg","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-600x600.jpeg","author_info":{"display_name":"gflace","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/gflace\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg",1050,729,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-150x150.jpeg",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-300x208.jpeg",300,208,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-768x533.jpeg",768,533,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-1024x711.jpeg",1024,711,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg",1050,729,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image.jpeg",1050,729,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-100x100.jpeg",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-180x128.jpeg",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-896x504.jpeg",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-400x225.jpeg",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-600x400.jpeg",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2024\/01\/image-600x600.jpeg",600,600,true]},"uagb_author_info":{"display_name":"gflace","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/gflace\/"},"uagb_comment_info":0,"uagb_excerpt":"In questo articolo esploreremo la transizione dal ciclo di vita del software tradizionale al contesto del DevSecOps, approfondendo aspetti legati a DevOps e alla CI\/CD. Inoltre, ci concentreremo sui problemi affrontati durante questo percorso e sulle soluzioni sviluppate nel corso del tempo, con un particolare riguardo su GitLab, una piattaforma di DevSecOps unificata. SDLC Tradizionale&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/25415","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/236"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=25415"}],"version-history":[{"count":2,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/25415\/revisions"}],"predecessor-version":[{"id":25510,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/25415\/revisions\/25510"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/25469"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=25415"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=25415"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=25415"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=25415"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}