J'essaie d'utiliser Jenkins pour construire un projet C ++ dans un conteneur Docker. Je n'ai aucun problème à construire à Jenkins ou à construire dans un conteneur à l'extérieur de Jenkins.
Voici ce que j'ai essayé. J'omets le mappage des volumes pour plus de clarté.
Cas 1
La commande suivante exécute correctement une génération dans un shell.
docker run --rm --interactive=true --tty=true $IMAGE make
Cependant, lorsqu'il est exécuté dans Jenkins en tant qu'étape «exécuter le shell», Docker renvoie l'erreur suivante.
cannot enable tty mode on non tty input
Cas 2
La commande suivante est similaire à la précédente mais désactive l'interactivité.
docker run --rm $IMAGE make
Jenkins peut exécuter une build avec succès. Cependant, il existe de graves problèmes lors de l'interruption d'une version. La génération est immédiatement marquée comme abandonnée, mais le conteneur continue de fonctionner jusqu'à la fin de la génération. De plus, le conteneur n'est pas retiré après sa sortie.
Lorsqu'elle est exécutée dans un shell, la commande se construit avec succès mais il n'est pas possible de l'interrompre. Le conteneur est également retiré après sa sortie.
Question
Quelqu'un sait-il comment exécuter proprement des builds dans des conteneurs Docker de Jenkins et conserver la possibilité d'interrompre des builds?
L'utilisation des plugins Jenkins n'est pas une option car les appels Docker sont à l'intérieur de scripts et ne peuvent pas être extraits facilement.