À l'heure actuelle, nos agents Jenkins génèrent un docker-compose.yml pour chacun de nos projets Rails, puis exécutent docker-compose up. Le docker-compose.yml a un conteneur "web" principal qui contient rbenv et toutes nos autres dépendances Rails. Il est lié à un conteneur DB contenant le test Postgres DB.
Le problème survient lorsque nous devons exécuter les tests et générer des codes de sortie. Notre serveur CI ne se déploiera que si le script de test renvoie la sortie 0, mais docker-compose renvoie toujours 0, même si l'une des commandes du conteneur échoue.
L'autre problème est que le conteneur de base de données s'exécute indéfiniment, même une fois que le conteneur Web a terminé d'exécuter les tests, il docker-compose up
ne revient donc jamais.
Existe-t-il un moyen d'utiliser docker-compose pour ce processus? Nous aurions besoin de pouvoir exécuter les conteneurs, mais de quitter une fois le conteneur Web terminé et de renvoyer son code de sortie. Pour le moment, nous sommes bloqués manuellement à l'aide de docker pour faire tourner le conteneur DB et exécuter le conteneur Web avec l'option --link.
docker-compose
1.12.0 et supérieure. C'est peut-être votre cas aussi. Un exemple pourrait être:docker-compose up --exit-code-from test-unit
. Notez que cela n'a pas fonctionné pour moi jusqu'à ce que j'aie ajouté unset -e
au début de mon script.