Saya mencoba menggunakan Jenkins untuk membangun proyek C ++ di wadah Docker. Saya tidak punya masalah membangun di Jenkins, atau membangun di wadah di luar Jenkins.
Di bawah ini yang saya coba. Saya menghilangkan pemetaan volume untuk kejelasan.
Kasus 1
Perintah berikut berhasil menjalankan build di shell.
docker run --rm --interactive=true --tty=true $IMAGE make
Namun ketika dijalankan di Jenkins sebagai "eksekusi shell" langkah Docker mengembalikan kesalahan berikut.
cannot enable tty mode on non tty input
Kasus 2
Perintah berikut ini mirip dengan yang sebelumnya tetapi menonaktifkan interaktivitas.
docker run --rm $IMAGE make
Jenkins dapat menjalankan build dengan sukses. Namun ada masalah serius saat membatalkan pembangunan. Bangunan segera ditandai sebagai dibatalkan tetapi wadah terus berjalan sampai selesai. Juga wadah tidak dilepas setelah keluar.
Ketika dijalankan di shell, perintah berhasil dibuat tetapi tidak mungkin untuk menghentikannya. Wadah juga dilepas setelah keluar.
Pertanyaan
Adakah yang tahu cara menjalankan build dengan rapi dalam wadah Docker dari Jenkins dan mempertahankan kemampuan untuk membatalkan build?
Menggunakan salah satu plugin Jenkins bukanlah suatu pilihan karena panggilan Docker ada di dalam skrip dan tidak dapat diekstraksi dengan mudah.