D4R^7 (Docker alla settima)
Abstract
Ambiente di Continuous Delivery che gira in container Docker, produce container Docker sfruttando altri container Docker, testa container Docker usando altri container Docker e rilascia container Docker in container Docker.
Questo talk racconta come io e il team con cui lavoravo abbiamo imparato a utilizzare i container, sfruttandone appieno le caratteristiche per costruire le nostre pipeline di build e l’intera infrastruttura di build e test.
Sarà un viaggio tra le sfide affrontate, le buone pratiche adottate e gli errori da evitare: dalle ceneri di un build server confuso, poco flessibile e limitato, abbiamo realizzato un sistema ordinato, modulare e scalabile, spingendo l’uso di Docker al massimo (e all’eccesso).
Il percorso è lungo e non privo di ostacoli: anche se siamo arrivati al deploy in produzione, c’è ancora molta strada da fare. Tuttavia, i risultati ottenuti hanno ripagato ampiamente gli sforzi fatti. Poiché i problemi e le sfide che abbiamo incontrato sono comuni a molti team, condividiamo la nostra esperienza nella speranza che possa offrire spunti di riflessione utili e idee pratiche da applicare nei vostri progetti.
Cosa hanno imparato i partecipanti
Partecipando a questa sessione i partecipanti hanno scoperto:
- Sostituzione e isolamento dei Build Environment: come passare da un build server rigido a un’infrastruttura dinamica basata su Jenkins e container Docker usati come agent/slave.
- Gestione delle Pipeline complesse: come evolvere da job in cascata frammentati verso Jenkins Multi-branch Pipelines con
Jenkinsfileunico, gestendo build, test e ambienti multipli (es. dev/corporate) tramite variabili d’ambiente. - Ottimizzazione dei tempi di Build: l’importanza di creare immagini Docker di base aziendali per evitare la re-installazione continua delle dipendenze ad ogni build.
- Test di Integrazione e Isolation: strategie per eseguire test d’integrazione isolati avviando istanze dedicate dell’applicazione ed eseguendo il reset del database ad ogni esecuzione.
- Gestione della transizione (Legacy vs Docker): come gestire periodi di transizione complessi in cui coesistono rilascio di immagini Docker e pacchetti tradizionali (es. RPM), integrando tool come Sonatype Nexus nella pipeline.
- Le sfide reali del Continuous Delivery: le buone norme operative e i tranelli concreti da considerare quando si porta l’infrastruttura di delivery fino al deploy in produzione.