Estoy tratando de usar Jenkins para construir un proyecto C ++ en un contenedor Docker. No tengo problemas para construir en Jenkins, o construir en un contenedor fuera de Jenkins.
A continuación se muestra lo que intenté. Estoy omitiendo el mapeo de volúmenes para mayor claridad.
Caso 1
El siguiente comando ejecuta con éxito una compilación en un shell.
docker run --rm --interactive=true --tty=true $IMAGE make
Sin embargo, cuando se ejecuta en Jenkins como un paso "ejecutar shell", Docker devuelve el siguiente error.
cannot enable tty mode on non tty input
Caso 2
El siguiente comando es similar al anterior pero desactiva la interactividad.
docker run --rm $IMAGE make
Jenkins puede ejecutar una compilación con éxito. Sin embargo, hay problemas serios al abortar una compilación. La compilación se marca inmediatamente como abortada, pero el contenedor continúa ejecutándose hasta que se completa la compilación. Además, el contenedor no se retira después de salir.
Cuando se ejecuta en un shell, el comando se compila correctamente pero no es posible interrumpirlo. Además, el contenedor se retira después de salir.
Pregunta
¿Alguien sabría cómo ejecutar compilaciones limpiamente en contenedores Docker desde Jenkins y retener la capacidad de abortar compilaciones?
El uso de cualquiera de los complementos de Jenkins no es una opción porque las llamadas de Docker están dentro de los scripts y no se pueden extraer fácilmente.