Estou tentando usar o Jenkins para criar um projeto C ++ em um contêiner do Docker. Não tenho nenhum problema em construir em Jenkins ou em um contêiner fora de Jenkins.
Abaixo está o que eu tentei. Estou omitindo o mapeamento de volumes para maior clareza.
Caso 1
O comando a seguir executa com êxito uma compilação em um shell.
docker run --rm --interactive=true --tty=true $IMAGE make
No entanto, quando executado no Jenkins como uma etapa "executar shell", o Docker retorna o seguinte erro.
cannot enable tty mode on non tty input
Caso 2
O comando a seguir é semelhante ao anterior, mas desativa a interatividade.
docker run --rm $IMAGE make
Jenkins pode executar uma compilação com sucesso. No entanto, existem problemas sérios ao interromper uma compilação. A construção é imediatamente marcada como abortada, mas o contêiner continua em execução até que a construção seja concluída. Além disso, o recipiente não é removido após a saída.
Quando executado em um shell, o comando é construído com êxito, mas não é possível interrompê-lo. Além disso, o recipiente é removido após a saída.
Questão
Alguém saberia como executar compilações de maneira limpa nos contêineres do Docker da Jenkins e manter a capacidade de abortar compilações?
O uso de qualquer um dos plugins Jenkins não é uma opção, pois as chamadas do Docker estão dentro de scripts e não podem ser extraídas facilmente.