Giornata Tecnica da Piave Servizi, 11 aprile 2024 | CADEI Giovanni
Progetto e implementazione di una pipeline di sviluppo software con tecnologie DevOps
1. Universit`a degli Studi di Trieste
Dipartimento di Ingegneria e Architettura
Corso di Laurea in Ingegneria Informatica
Progetto e implementazione di
una pipeline di sviluppo software
con tecnologie DevOps
Laureando:
Mattia Milleri
Relatore:
prof. Francesco Fabris
Correlatore:
ing. Sergio Benedetti
2. DevOps
DevOps `e un termine che descrive un insieme di pratiche volte ad
aiutare la collaborazione fra quelli che sono i due maggiori agenti
nel processo di sviluppo di una applicazione: gli sviluppatori
(DEVelopers) da una parte e la parte di amministrazione di sistemi
(OPerationS) dall’altra.
3. Cos’`e una pipeline di sviluppo?
Una pipeline di sviluppo software `e la rappresentazione del percorso
che un software deve percorrere per arrivare in produzione.
4. A che richieste risponde?
Richieste necessarie per avere un’applicazione stabile e sicura.
se devono esserci dei fallimenti in un qualche punto della
pipeline, `e importante avere dei test che falliscono presto
togliere la componente di errore umano nella fase di
installazione
avere la certezza dell’uguaglianza fra le varie macchine di test
e di produzione
rendere la preparazione dell’ambiente e l’installazione
dell’applicazione qualcosa di programmabile
5. Cosa si intende con strumenti DevOps?
Con strumenti DevOps indichiamo una suite di strumenti che
permettono l’automazione delle operazioni di amministrazione del
sistema.
6. Quali utilizzeremo?
Vagrant
Vagrant `e un programma che permette la creazione e
manutenzione di macchine virtuali. La costruzione di una
macchina virtuale `e interamente formalizzata all’interno di
uno script, detto Vagrantfile, che permette di descrivere le
caratteristiche richieste all’interno di quest’ultima.
7. Quali utilizzeremo?
Ansible
Ansible `e un sistema di automazione open-source che
permette il provisioning e la configurazione remota di
macchine virtuali oltre all’installazione di applicazioni web.
8. Quali utilizzeremo?
Jenkins
Jenkins `e un server di Continuous Integration open-source
scritto in linguaggio Java. Permette di definire e
automatizzare il processo di costruzione e installazione di
un’applicazione, descrivendo in una pipeline tutti i passi per il
deployment di un’applicazione in produzione.
9. Architettura del sistema
Il sistema sar`a composto da tre strati:
una workstation su cui sar`a installato Jenkins, dove eseguir`a il
Jenkinsfile, che `e lo script principale di automazione della
pipeline
lo script Jenkinsfile utilizzer`a Vagrant per la creazione delle
macchine virtuali
il Vagrantfile, lo script di Vagrant, a ogni creazione di
macchina virtuale richiamer`a gli script di Ansible per il
provisioning
10. Shopizer
Shopizer `e una applicazione open-source scritta in linguaggio Java
che permette la creazione di siti web volti alla vendita di prodotti.
11. Shopizer
L’applicazione ha i seguenti prerequisiti che andranno soddisfatti:
un sistema operativo su cui far girare la macchina virtuale
Java e l’application server
installazione di Java 8
un application server, nel nostro caso Tomcat 8
un server MySQL
13. Stage 1 – Test di unit`a e di integrazione
Scarica il codice del progetto
dalla repository git
Effettua la compilazione e i
test di unit`a
Viene creata la virtual
machine
Vengono effettuati i test
sull’applicazione nella virtual
machine
14. Stage 2 – Test di carico e di interfaccia utente
Modifica dei sorgenti
Ricompilazione con il
supporto a MySQL
15. Stage 2 – Test di carico e di interfaccia utente
Installazione di JMeter e
Selenium
Effettuazione test di carico
(JMeter) e di interfaccia
utente (Selenium)
16. Stage 3 – Messa in produzione su Google Cloud
Configurazione e
preparazione dell’ambiente
di produzione su Google
Cloud
Creazione e provisioning
della macchina virtuale
17. Conclusioni
Il progetto di creazione di una pipeline completa per l’automazione
`e avvenuto con successo, dimostrando che `e possibile eliminare la
necessit`a di esecuzione manuale di molte operazioni all’interno del
processo di sviluppo software.
Conseguenze di questo approccio automatizzato, oltre a quello di
risparmio di tempo, sono di poter effettuare la messa in produzione
di una applicazione in modo pi`u coerente, il che porta
l’applicazione stessa ad essere pi`u stabile e sicura.
18. Sviluppi futuri
Test sulla sicurezza del sistema
Test di accettazione da parte dell’utente
Creazione di una repository aziendale di Vagrant Box, in
risposta alla necessit`a di avere configurazioni particolari per le
macchine virtuali