Sto cercando di usare Jenkins per costruire un progetto C ++ in un contenitore Docker. Non ho problemi a costruire a Jenkins, o in un container fuori da Jenkins.
Di seguito è quello che ho provato. Sto omettendo la mappatura dei volumi per chiarezza.
Caso 1
Il seguente comando esegue correttamente una build in una shell.
docker run --rm --interactive=true --tty=true $IMAGE make
Tuttavia, quando eseguito in Jenkins come passaggio "esegui shell", Docker restituisce il seguente errore.
cannot enable tty mode on non tty input
Caso 2
Il seguente comando è simile al precedente ma disabilita l'interattività.
docker run --rm $IMAGE make
Jenkins può eseguire correttamente una build. Tuttavia, ci sono problemi seri quando si interrompe una build. La compilazione viene immediatamente contrassegnata come interrotta ma il contenitore continua a funzionare fino al completamento della compilazione. Inoltre, il contenitore non viene rimosso dopo essere uscito.
Quando viene eseguito in una shell, il comando viene compilato correttamente ma non è possibile interromperlo. Anche il contenitore viene rimosso dopo essere uscito.
Domanda
Qualcuno saprebbe come eseguire in modo pulito build nei contenitori Docker di Jenkins e conservare la capacità di interrompere le build?
L'uso di uno qualsiasi dei plugin Jenkins non è un'opzione perché le chiamate Docker sono all'interno di script e non possono essere estratte facilmente.