Uno dei principali vantaggi di Docker è l'ambiente isolato che porta, e voglio sfruttare questo vantaggio nel mio flusso di lavoro di integrazione continua.
Un flusso di lavoro della configurazione "normale" è simile a questo:
- Archivio sondaggi per le modifiche
- Estrai dal repository
- Installa le dipendenze
- Esegui test
In un flusso di lavoro Dockerized, sarebbe qualcosa di simile a questo:
- Archivio sondaggi per le modifiche
- Estrai dal repository
- Crea immagine finestra mobile
- Esegui immagine finestra mobile come contenitore
- Esegui test
- Elimina il contenitore mobile
Il mio problema è con il passaggio "Esegui test": poiché Docker è un ambiente isolato, intuitivamente mi piacerebbe trattarlo come uno; questo significa che i metodi di comunicazione preferiti sono le prese. Tuttavia, questo funziona bene solo in determinate situazioni (una webapp, per esempio). Quando si testano diversi tipi di servizi (ad esempio, un servizio in background che comunica solo con un database), sarebbe necessario un approccio diverso.
Qual è il modo migliore per affrontare questo problema? È un problema con il design della mia applicazione e dovrei progettarlo in un TDD più orientato al servizio che ascolti sempre su qualche socket? O dovrei semplicemente rinunciare all'isolamento, e fare qualcosa del genere:
- Archivio sondaggi per le modifiche
- Estrai dal repository
- Crea immagine finestra mobile
- Esegui immagine finestra mobile come contenitore
- Apri la sessione SSH nel contenitore
- Esegui test
- Elimina il contenitore mobile
L'inserimento di SS nel contenitore mi sembra una brutta soluzione, poiché richiede una profonda conoscenza del contenuto del contenitore e quindi rompere l'isolamento.
Mi piacerebbe sentire i diversi approcci di SO a questo problema.