2015-01-28 15 views
18

Ho un sacco di contenitori Docker tutti collegati tramite docker-compose (in precedenza fig). Ho scoperto che i servizi che si pubblicizzano come servizi "Docker CI" di solito parlano solo dell'utilizzo di Docker per eseguire i propri build worker.Nessun servizio CI consente di creare contenitori Docker e utilizzare la cache di build della finestra mobile?

Desidero un servizio di integrazione continua che preservi la cache di build di Docker tra le esecuzioni, invece di ruotare un nuovo contesto worker/filesystem/build. Altrimenti, le build prendono assolutamente per sempre. Gestito in modo ideale (a differenza di https://github.com/groupon/DotCi, che non viene fornito con il database per-build ready-to-go di CircleCI).

L'unica cosa che ho trovato è TeamCity (vecchio, non è possibile costruire le attività in un file yaml facilmente come con CircleCI, è necessario mantenere l'infrastruttura, ecc.). Quay.io non fornisce un database come CircleCI e Travis do, quindi devi biforcare dev e prod e installarne uno all'interno del contenitore ed eseguire i test unitari durante la compilazione del contenitore (ew - non puoi spawnare in un contenitore non compilato per eseguire il debug delle cose!).

Come si esegue l'integrazione continua sul cluster di container Docker?

+0

Si noti che ora è possibile anche creare immagini docker su Travis, https://blog.travis-ci.com/2015-08-19-using-docker-on-travis-ci/ – cboettig

risposta

14

Aggiornamento: CircleCI 2.0 è basato su Docker. Puoi creare immagini Docker, utilizzare la cache di livello, usare Docker Compose e persino utilizzare immagini Docker ufficiali e personalizzate come ambiente di costruzione.


CircleCI consente di creare contenitori Docker come parte della vostra generazione: https://circleci.com/integrations/docker

siete comunque giusto che noi non memorizzare nella cache le immagini finestra mobile - è un po 'complicato il nostro stack di farlo a destra, ma stiamo pianificando di parlarne presto.

Nel frattempo, un numero di clienti lo ha memorizzato nella cache utilizzando la cache incorporata di CircleCI (non Docker), utilizzando docker save/docker load: https://circleci.com/docs/docker#caching-docker-layers. Non è l'ideale, ma dovrebbe tenerti aggiornato finché non saremo in grado di supportarlo molto meglio.

+7

Desidero ' caricatore docker ha fatto ciò, ma non conserva la cache di build. 'Caricamento finestra mobile 'richiede circa il tempo necessario per estrarre un'immagine completamente compilata da un archivio privato, in modo che non faccia il trucco. – user3906849

+2

Paul avresti un aggiornamento sulla parte "pianificando di indirizzarti presto"? Sarebbe interessante. – user2707671

+0

Sulla base dei miei test, è a mia conoscenza che anche la strategia 'salva/carica finestra mobile 'come collegata non funziona (i comandi di compilazione della finestra mobile sono completamente eseguiti in ogni build), come da questo commento qui: https: //discuss.circleci .com/t/docker-1-10-0-is-available-beta/2100/15 @ paul-biggar, o chiunque- c'è un esempio funzionante? – thisjustin

3

Attualmente sto usando CircleCI, vedere http://tschottdorf.github.io/cockroach-docker-circleci-continuous-integration per una buona guida per utilizzare la cache finestra mobile

Disponibile per la spedizione è anche la pena di verificare, come l'intera infrastruttura si basa su finestra mobile e orchestrare più contenitori docker con shippable formations.

+1

solo una soluzione rapida, sembra che l'URL per il post del blog funzioni solo senza la barra finale poiché restituisce 404: http://tschottdorf.github.io/cockroach-docker-circleci-continuous-integration – fagiani

+0

@fagiani grazie, corretto l'URL – d3ming

-2

Hai visto wercker? Supporta "porta il tuo contenitore", memorizza nella cache le immagini (penso su base per lavoratore, ma dopo alcune build di solito l'avvio si riduce a pochi secondi con un'immagine personalizzata) e afaik consente anche di creare immagini Docker.

Lato negativo: richiede far too many GitHub permissions.

+0

Non ti permette nemmeno di usare il tuo 'Dockerfile', quindi non è una buona soluzione. –

+0

@SteffenBrem: è possibile creare le immagini dai propri Dockerfiles sull'hub docker e utilizzarle in wercker. Per me va bene. – krlmlr

0

C'è una domanda correlata "How can I let the gitlab-ci-runner DinD image cache intermediate images?".

Anche se our solution richiede una quantità minima di manutenzione dell'infrastruttura (dobbiamo eseguire il nostro proprio runner), penso che valga la pena dare un'occhiata.

Fondamentalmente non eseguiamo Docker in Docker, ma stiamo creando una VM separata solo per i corridori. Ciò ha alcune implicazioni sulla sicurezza e sulle attività di pulizia, vedi anche lo README del nostro corridore.

Forse questa soluzione diventerà obsoleta in futuro poiché il supporto Docker per vari sistemi CI viene migliorato, ma al momento è una buona combinazione tra prestazioni, manutenzione e usabilità.

Problemi correlati