Ci sono vantaggi di eseguire i miei test API in Docker all'interno di Jenkins?

Ho scritto API-test in Ruby che sono attualmente chiamati da ctest per l'esecuzione. Ho messo tutte le cose che ho bisogno in un Dockerfile per l'incapsulamento. Quindi il Container tira la versione più recente del software, mette le licenze necessarie nel contenitore e, infine, la versione più recente dei miei test API Ruby che fanno un black-box test del nostro software (non web / standalone).

Ho pensato – bene questa è stata una buona idea nel caso in cui voglio condividere la mia image con gli altri o posso anche mettere una quantità diversa di prove in diversi contenitori (forse anche solo uno per contenitore) e quindi risparmiare tempo quando eseguono i test per avere brevi brevi risposte per gli sviluppatori.

Ora i soggetti della società mi chiedono "perché fai così in questo modo? Perché non mettere l'integer ambiente direttamente su un nodo dedicato per Jenkins per eseguire i test?"

Poichè sono ancora nuovo al banco, non sono sicuro al 100% se ho iniziato la cosa giusta. Sono solo attratto dalle cose che ho sentito parlare di Docker finora e ho l'impressione di essere sulla buona strada.

Ora la mia domanda è – cosa ne pensi? È questo il modo di andare? Quali sarebbero i tuoi pro ei contro a questa strategia?

Alcuni pensieri dopo aver fatto esattamente quello che descrivi per circa un anno. (Può contenere informazioni bonus)

Se lo scopo è quello di Jenkins di produrre e di immaginare e spingerlo in un repository di immagini, avrà molto più senso. Spingerebbe normalmente a un repository privato nella tua azienda o all'hub docker per progetti open source.

Ci sono alcune sfide che usano il docker in un sistema di compilazione. La quantità di dati nel motore docker continua ad accumularsi e avete bisogno di un modo per pulire le cose. È ansible eseguire un periodico docker system purge --all – tutto per pulire tutto, ma ricorda che anche questo cancella le immagini di base.

Un'altra sfida è che la costruzione e il test nel docker possono aggiungere più tempo a ciascun lavoro, ma questo può essere migliorato con qualche modifica.

È ansible migliorare le performance impostando un Registro di image come una cache di traccia . Dico che questo è comunque obbligatorio perché il mozzo docker non è immune al fallimento. Abbiamo sfuggito un bullet l'ultima volta che il mozzo docker era in giù durante prime per 4-5 ore. Ci sono naturalmente altri progetti di registro che lo support anche.

Faccio una prova anche nel docker. I servizi stanno per funzionare in docker, quindi ha senso testare loro in docker. Mi basgo solo sullo stato di output del contenitore per determinare il successo / fallimento. Per alcune persone questo non è sufficiente perché alcuni sisthemes di test potrebbero utilizzare plugin che eseguono rapporti più dettagliati.

Un altro problema è come affrontare la scalatura. Tutta l'idea di avere dei nodes in Jenkins è quella di spargere il carico. Se tutti i nodes utilizzano lo stesso motore remoto, può diventare brutto abbastanza veloce. Penso che la soluzione più semplice è eseguire each nodo di Jenkins su un host separato e il motore di docker. Farà allora tutto il lavoro nel motore docker già in esecuzione. Puoi farlo montando nel file di socket o parlando con TLS.

Nel complesso penso che funziona grande. Basta essere consapevole che si potrebbe perdere alcune delle caratteristiche più avanzate di Jenkins. Le prove in esecuzione e la costruzione locale possono avere alcuni vantaggi, ma personalmente non ne ho bisogno. Mi costruisco principalmente immagini (le dependencies sono pronte nei repository dei pacchetti privati ​​/ locali)