DevOps: dalle parole ai fatti

Necessità iniziale del cliente/Obiettivo 

 

Per Moresi.com leader nel settore della digital transformation, abbiamo sviluppato un PoC (proof of concept)), per automatizzare e centralizzare i processi di provisioning e di configurazione delle risorse degli ambienti On-Premise ed in Cloud, sfruttando le potenzialità della metodologia DevOps.

L’obiettivo è quello di verificare la possibilità di provvedere alla gestione IT delle risorse infrastrutturali sfruttando le potenzialità di Azure DevOps come punto centralizzato, utilizzandolo per orchestrare e gestire tutte le componenti software coinvolte nell’operatività.

Per rendere il POC più completo, per ogni sistema, oltre a verificarne le possibilità di accesso si forniranno anche esempi di casi d’uso pratico.

Ora però, andiamo per step, partendo dagli ambienti e dalle tecnologie utilizzate.

 

Ambienti  e tecnologie utilizzati 

 

Gli ambienti che abbiamo preso in analisi sono i seguenti: 

 

On-Premise

  • Hypervisor

VMware  xSphere

VMware vCloud Director

ESXi (Bare Metal Hypervisor)

  • Network

Fortinet

Fortimanager

Cloud

  • AWS (Amazon Web Services): AWS simple Instance, AWS Multi Region deploy, 
  • Microsoft Azure

 

Sistemi Operativi

  • Linux: LAMP stack deployment using Ansible, LAMP stack deployment using Bash
  • Windows:  deploying IIS and ASP.NET using PowerShell
  • ForiOS: Apply to a FortiOS some firewall rules using Ansible and the self-hosted agent of azure devops

Ci siamo avvalsi dell’utilizzo del paradigma IaC (acronimo di Infrastructure as Code) che consente la gestione e la configurazione completa dell’infrastruttura in tutte le sue parti: reti, macchine virtuali, servizi di bilanciamento del carico e tipologia di connessione, circoscritti in un modello descrittivo.

Per poter raggiungere la nostra meta e soddisfare in maniera ottimale l’esigenza del cliente e la sua ambizione, abbiamo sfruttato le potenzialità di una serie di tecnologie che fanno parte del nostro DNA e che ci caratterizzano, quali: 

  1. Docker: Docker permette di costruire, impacchettare e poi distribuire applicazioni con facilità e velocità attraverso contenitori con le tutte le dipendenze necessarie invece di macchine virtuali. Elimina le banali attività di configurazione e favorisce la collaborazione efficace del team.

I contenitori Docker possono essere eseguiti ovunque, in locale, nel data center, in un provider di servizi esterno o nel cloud. I contenitori di immagini Docker possono essere eseguiti in modo nativo in Linux e Windows.

 

  1. Git: Git è uno strumento per il controllo della versione usato per tenere traccia dei cambiamenti nel codice sorgente e coordinare efficacemente il lavoro fra i componenti del Team.

 

  1. Ansible: Ansible è uno strumento di automazione IT. È possibile configurare sistemi, distribuire software ed eseguire attività IT più avanzate come distribuzioni in sequenza o aggiornamenti senza tempi di inattività utilizzando file di configurazione in formato YAML (YAML Ain’t Markup Language) sotto forma di Playbook Ansible, che permettono di descrivere le configurazioni desiderate in un linguaggio colloquiale.

 

  1. Terraform: Terraform è uno strumento per creare, modificare e aggiornare l’infrastruttura in modo sicuro ed efficiente utilizzando un linguaggio di configurazione di alto livello chiamato HCL (HashiCorp Configuration Language) che consente di descrivere ed attuare lo stato desiderato.

Terraform è in grado di gestire fornitori di servizi noti ed esistenti, nonché soluzioni interne personalizzate.

 

  1. Scripts: Qualora qualche particolare configurazione non sia attuabile con i moduli disponibili per strumenti sopracitati è possibile sfruttare i linguaggi di scripting propri del sistema da configurare:

        Bash: CLI (Command Line Interface) usata nei sistemi operativi Unix e Unix-Like;

        Powershell: CLI (Command Line Interface) usata prevalentemente sei sistemi operativi Windows;

     VMware PowerCLI: modulo di powershell per la gestione, la configurazione e l’automazione dei prodotti VMware.

  1. Azure DevOps: Azure DevOps è una piattaforma Software as a Service (SaaS) di Microsoft che fornisce un insieme di strumenti per lo sviluppo e la distribuzione di software. Si integra inoltre con la maggior parte degli strumenti DevOps presenti sul mercato, ed è un’ottima opzione per orchestrare una Toolchain DevOps.

 

  Metodologia ed approccio utilizzato

 

Inoltre, per poter sviluppare il PoC al meglio, ci siamo avvalsi di una metodologia che, da diversi anni  è presente nel mondo dell’IT a livello internazionale; stiamo parlando dell’approccio DevOps. 

Quando si parla di DevOps bisogna far riferimento ad una nuova cultura, ad un cambiamento radicale applicato al mondo Dev (development) ed Ops (Operations) e, quindi, un approccio rivolto all’automazione dei processi e ad una modalità collaborativa tra i membri del team coinvolti. 

E’ un paradigma che descrive le metodologie da adottare per accelerare i processi di un’idea da concretizzarsi passando in maniera facile dalla fase di sviluppo e progettazione, a quella di produzione. 

Che cosa deve essere chiaro per approcciarsi al DevOps? 

Il team deve essere solido, compatto, collaborativo, con un buon livello di comunicazione ed una continuità nel medio-lungo periodo.

Elemento chiave? L’empatia e la capacità di comprendere tutti i membri del team per affinare al meglio la propria cooperazione, giungendo alla perfezione operativa nel minor tempo possibile. 

Grazie al DevOps si hanno una serie di vantaggi:

  1. Efficienza, passando dal self-service e l’automazione;
  2. Velocità: gli sviluppatore lavorano a stretto contatto con l’anima operativa per velocizzare le fasi di creazione, collaudo, rilascio dei software e delle infrastrutture ad essi correlate
  3. Affidabilità: riduzione degli errori dovuti all’intervento umano.

Come già accennato, quando parliamo di DevOps, parliamo di cambiamento; ogni cambiamento richiede impegno e richiede la capacità di sfruttare al meglio le competenze, le capacità e le tecnologie adeguate.

L’elemento da non dimenticare mai quando si parla di DevOps è l’automazione. 

Perché?

E’ grazie all’automazione che si verifica l’ottimizzazione del tempo per integrare, in maniera agile, eventuali modifiche effettuate al software, scalando ed adattando in maniera flessibile tutte le componenti dell’infrastruttura sottostante. 

Che altro OFFRE il DevOps?

L’automazione permette a tutti i professionisti IT di dedicarsi alle attività importanti, garantendo loro coerenza e riducendo le possibilità di errore, evitando quindi di perdere il loro tempo in compiti banali e ripetitivi. 

I servizi offerti da Azure DevOps sono:

    • Azure Board : Usato per la pianificazione del team basato sulla filosofia Agile/Scrum;
  • Azure Repos : Usato per l’hosting dei repository e la gestione del versioning;
  • Azure Pipelines : Usato per automatizzare le compilazioni e le distribuzioni;
  • Azure Test Plans : Usato per il testing pianificato ed esplorativo;
  • Azure Artifacts : Aggiunge la gestione dei pacchetti integrata alle pipeline;

Tra questi, per la PoC, ci concentreremo su Azure Repos, come contenitore dei repositories, e su Azure Pipelines, come aggregatore di pipeline.

Questi due servizi sono essenziali per seguire la metodologia di lavoro GitOps, la quale necessita che tutto il sorgente sia centralizzato in un repository e che per certi eventi sul sorgente venga eseguita una Pipeline alla quale viene delegato il compito di eseguire azioni finalizzate eventualmente al deploy.

 

Per ogni casistica definita nel paragrafo precedente verrà realizzata una repository che conterrà il codice necessario per conseguire l’obiettivo definito, ad ogni repository è associata una pipeline.

Tutte le pipeline vengono triggerate ad ogni nuovo “commit” sul “branch” principale della repository.
Per ogni casistica si concorderà quali permessi sono necessari per eseguire le pipelines.

Un’organizzazione così modulare del sorgente permette di:

  • Rende lo sviluppo più semplice e veloce, permettendo allo sviluppatore di concentrarsi solo sul sorgente necessario
  • Permette un maggior controllo sulle feature/fix che vengono effettuate e riduce i permessi necessari per eseguire le pipelines.

 

Se volete conoscere i risultati ottenuti, seguiteci e leggete il prossimo, capitolo…

 

Coming soon…