Integrazione di Ansible e Docker per una pipeline CI/CD utilizzando Jenkins

   page       attach   
abstract

CI/CD è un metodo per la distribuzione frequente delle app ai clienti, che prevede l’introduzione dell’automazione nelle fasi di sviluppo dell’applicazione. Principalmente, si basa sui concetti di integrazione, distribuzione e deployment continui. L’approccio CI/CD supera le difficoltà legate all’integrazione di nuovo codice, una situazione così problematica per i team operativi e di sviluppo da essere coniata "inferno dell’integrazione".
Più specificamente, il metodo CI/CD introduce l’automazione costante e il monitoraggio continuo in tutto il ciclo di vita delle applicazioni, dalle fasi di integrazione e test a quelle di distribuzione e deployment. Nel complesso, questi processi interconnessi vengono definiti "flussi CI/CD" e sono supportati dai team operativi e di sviluppo che collaborano secondo modalità agili[1].
Il proposito di questo progetto è quello di realizzare l’automazione di un flusso CI/CD, utilizzando Ansible, Docker e Jenkins.
Un approccio comune per creare una pipeline automatizzata consiste nel combinare due piattaforme per orchestrare e quindi distribuire, in modo Agile e continuo, applicazioni e infrastruttura. Ansible viene utilizzato per il provisioning di ambienti, configurazioni dell’infrastruttura e distribuzione di app all’interno di un processo CI/CD utilizzando una pipeline Jenkins.
Nel mondo del processo CI/CD, Jenkins è uno strumento popolare per il pro- visioning di ambienti di sviluppo/produzione e per la distribuzione di applicazioni attraverso il flusso della pipeline. Tuttavia, a volte, mantenere lo stato dell’applicazione diventa opprimente e il riutilizzo degli script diventa più difficile man mano che il progetto cresce.
Per superare questa limitazione, Ansible svolge un ruolo fondamentale come esecutore di script di shell. Lo scopo del suo utilizzo nel flusso della pipeline è di riutilizzare ruoli e playbook per il provisioning, lasciando Jenkins solo come orchestratore di processi anzichè come esecutore di script di shell.
L’impiego di Jenkins facilita anche l’utilizzo di Docker, il quale può rendere il processo di software delivery più veloce, prevedibile e gestibile. L’implementazione della Continuous Delivery su applicazioni pacchettizzate in Docker favorisce molteplici vantaggi, tra cui una maggiore automazione ed una migliore gestione dello sviluppo software e dei processi di delivery, conferendo al contempo un livello di sicurezza maggiore alle applicazioni che girano in un ambiente condiviso.

outcomes