In questo momento i nostri agenti Jenkins generano un docker-compose.yml per ciascuno dei nostri progetti Rails e quindi eseguono docker-compose up. Il docker-compose.yml ha un contenitore "web" principale che contiene rbenv e tutte le nostre altre dipendenze di Rails. È collegato a un contenitore DB che contiene il DB Postgres di prova.
Il problema nasce quando dobbiamo eseguire effettivamente i test e generare codici di uscita. Il nostro server CI verrà distribuito solo se lo script di test restituisce exit 0, ma docker-compose restituisce sempre 0, anche se uno dei comandi del contenitore non riesce.
L'altro problema è che il contenitore DB viene eseguito indefinitamente, anche dopo che il contenitore Web ha terminato di eseguire i test, quindi docker-compose up
non ritorna mai.
C'è un modo in cui possiamo usare docker-compose per questo processo? Dovremmo essere in grado di eseguire i contenitori, ma uscire dopo che il contenitore web è completo e restituire il suo codice di uscita. In questo momento siamo bloccati manualmente utilizzando docker per far girare il contenitore DB ed eseguire il contenitore web con l'opzione --link.
docker-compose
1.12.0 e versioni successive. Forse è anche il tuo caso. Un esempio potrebbe essere:docker-compose up --exit-code-from test-unit
. Nota che non ha funzionato per me fino a quando non ho aggiunto unset -e
all'inizio del mio script.