Docker o Vagrant potrebbero aiutare a creare una macchina di prova per il nostro prodotto aziendale

Sto lavorando su un prodotto enterprise e in primo luogo ci sono 3 pezzi a swing client basato, DB, Server (per ora possiamo ignorare parte DB). Essere client Enterprise e Server viene fornito con il proprio installatore (non è come configurare Apache o JBOSS e distribuire la guerra su di esso).

Abbiamo configurato CI per generare le build specifiche OS per each notte per Client e server che possono essere installati.

Quindi dobbiamo testare queste build regolarmente su un sistema operativo specifico, che richiede un sacco di processi manuali di installazione e creazione di sisthemes con client di versione X sul server di versione Y OS OR X su Y OS. Questo sta diventando molto noioso poiché siamo tutti in windows e facciamo prossimo-> successivo -> veramente succhia (ho creato uno script che ha installato il nostro prodotto tramite shell ma poi sono ancora passi che ritengo possa essere automatizzato, ma non Come). Inoltre abbiamo bisogno di un isolamento.

Ora sto pensando come possiamo automatizzare questo process di creazione di questi test machine. Ho appena iniziato a esplorare il Vagrant / Docker se possono essere utili a me (e sotto il loro concetto, ancora non capisce Puppet / Chef però) e sono confuso in quale strategia devo adottare

  1. Crea VM tramite vagante e fai funzionare lo script di installazione in quella casella (questo richiederà un VM per client o per server)
  2. Crea VM tramite vagante e fai funzionare i suoi contenitori di docking client (credo che questo richiederà un VM per più client o server, poiché sarebbero sotto il contenitore)

Nota: devo creare VM, dato che siamo in window. Oppure tramite vagante o tramite boot2docker

    Quindi la mia domanda è

    1. Se queste 2 strategie sono valide e non sono sbagliate, allora di queste 2 quale strategia devo adottare su due?
    2. C'è una strategia diversa da mancare o mi sto avvicinando in questo modo?
    3. Se si deve adottare la strategia # 2, allora come posso creare le immagini container / docker in cui è installato il mio client

    come posso creare immagini contenitore / docker in cui è installato il mio client

    Dovete mettere in un Dockerfile tutto quello che fai per avere il tuo client iniziato e configurato.

    Per farlo, puoi creare un contenitore, fare tutto il materiale, quindi fare il docker commit o il modo migliore è mettere tutti i comandi necessari in un Dockerfile, per cui quando fai una leggera modifica, crei un nuovo versione facilmente con una base docker build -t myclient_version_n .

    Controllare i documenti

    e come automatizzare le build

    come creare un Dockerfile

    e dare un'occhiata ai Dockerfiles esistenti di applicazioni containerizzate nel Hub docker

    Un'alternativa a Vagrant sarebbe quella di utilizzare Docker Machine. Potresti sfruttare i fornitori di nubi come anche @ m1keil. La macchina può fornire ospitanti Docker su un certo numero di provider e sono pronti per andare.

    Disclosure: lavoro a Docker e sono il manutentore della macchina 🙂

    1. Le tue strategie mi sembrano valide. L'aggiunta di contenitori (docker) al process potrebbe aiutare a velocizzare e parallelizzare il process di test (se è completamente test automatico) poiché il tempo di initialization e il consumo generale di risorse di un contenitore sono più bassi. Tuttavia non si può dare una risposta definitiva senza prima controllare il process di test. E poiché non hai fornito dettagli su di esso, sarebbe difficile dirvi se si dovrebbe utilizzare la prima o la seconda strategia.
    2. È ansible sfruttare la cloud e utilizzare servizi come AWS, Azure, GCE, ecc per inizializzare le macchine e eseguire i test. È ansible utilizzare Vagrant per eseguire questa operazione oppure ignorare Vagrant e creare i tuoi semplici script utilizzando le API appropriate del provider Cloud selezionato. Potete anche dare un'occhiata a servizi come Travis.ci, Circle.ci e altri che potrebbero aiutarti a creare un pipe di prova automatico senza la necessità di trascorrere troppo tempo sull'impianto idraulico.

    Mi piace molto la facilità d'uso del docker tramite il Dockerfile. Il Dockerfile ti consente di aggiornare e controllare facilmente il software nell'image del docker, e quindi è ansible fornirlo nell'ambiente CI / testing. Docker ha ora il supporto nativo di Windows, quindi questo non dovrebbe impedirti di utilizzarlo: https://docs.docker.com/docker-for-windows/ Inoltre, mi piace che puoi installare macchine molto leggere e minime , con solo le dependencies di build e runtime necessarie per il tuo progetto e memorizzarle gratuitamente su hub.docker.com. A seconda del tempo necessario per la creazione e l'installazione di determinate dependencies, è ansible accelerare i test perché è ansible scaricare un'image del docker con tutto ciò che è già stato installato e costruito, quindi build e testare il progetto effettivo.

    Lo uso per https://github.com/sourceryinstitute/opencoarrayss , che è l'esecuzione ufficiale del GCC di Coarrays Fortran. Ho un piccolo progetto https://github.com/zbeekman/nightly-docker-rebuild che ti permette di impostare l'image di docker notturna costruita su hub.docker.com in less di due minuti. Lo uso per triggersre le build di https://github.com/zbeekman/nightly-gcc-trunk-docker-image perché non riesco a ribuild GCC dalla sorgente su Travis-CI.org senza il timing di build. In questo modo, devo debind la creazione di GCC notturna a hub.docker.com e quindi solo il zbeekman/nightly-gcc-trunk-docker-image docker pull zbeekman/nightly-gcc-trunk-docker-image in un esempio travis-ci per testare OpenCoarrayss contro l'ultimo trunk GCC.