Bagaimana cara mengatur `killSoftly` untuk pekerjaan Jenkins tertentu?


11

Jenkins saya membangun hang antara langkah build dan post-build.

Output konsol menunjukkan ada menunggu 6 menit (tapi saya sudah melihat menunggu hingga satu jam):

10:53:26 BUILD FAILED in 1m 7s
10:53:26 4 actionable tasks: 4 executed
10:53:26 Build step 'Invoke Gradle script' changed build result to FAILURE
10:53:26 Build step 'Invoke Gradle script' marked build as failure
11:09:29 [CucumberReport] Using Cucumber Reports version 4.9.0

Saya menemukan ini dan ini pertanyaan yang memiliki masalah yang sama, dan mereka mengatakan solusinya mulai -DSoftKillWaitSeconds=0masuk jenkins.xml.

Namun, saya perlu cara untuk menetapkan opsi hanya untuk pekerjaan tertentu, tanpa mengacaukan pengaturan Jenkins global (saya tidak ingin mengacaukan proyek lain).

EDIT:

Ketika saya membatalkan pekerjaan secara manual, sebelum langkah [CucumberReport], laporan Mentimun masih dihasilkan.

Saya juga memeriksa Abort build jika macet kotak centang di opsi Build Environment, dengan strategi Time-out diatur ke No Activity(Timeout detik = 2).

Ketika saya membangun proyek dengan pengaturan ini, build akan gagal dengan "dibatalkan setelah 0 detik" yang ditunjukkan di Build History, seperti sebelumnya, tetapi output konsol akan sama. (Tidak ada yang berubah, Laporan Timun akan dihasilkan tetapi setelah batas waktu tertentu).


Apa yang ingin Anda capai dengan parameter? Mungkin ada solusi yang lebih mudah untuk ini.
Michael Kemmerzell

Saya ingin memotong waktu tunggu setelah fase pembangunan. Seperti yang Anda lihat dari output konsol, ada 6 menit menunggu antara langkah membangun dan pasca membangun.
Mate Mrše

Bisakah Anda memberikan beberapa bagian dari pipa Anda? Saya ragu jenkins hanya terjebak - sesuatu harus terjadi di sini.
Michael Kemmerzell

Bisakah Anda lebih spesifik pada bagian mana dari pipa yang menarik sehingga saya dapat mengedit dan berbagi beberapa karena saya tidak dapat berbagi kode yang sebenarnya?
Mate Mrše

Tidak bisakah Anda mengatur timeoutopsi di pipa Anda? Anda harus memposting versi pipa yang disederhanakan. Sulit untuk "menebak" apa yang mungkin salah. Juga, pertanyaan ini mungkin lebih cocok untuk berada di devops.stackexchange.com
tftd

Jawaban:


4

Tidak mungkin untuk memilih nilai spesifik pekerjaan untukSoftKillWaitSeconds (nilai tersebut berasal dari inti Jenkins pada titik di mana nama pekerjaan tidak diketahui).

Rekomendasi saya adalah untuk memperbaiki penanganan batalkan dalam pekerjaan Anda sendiri , sehingga tidak akan tergantung pada "batas waktu soft kill". Jika Anda menjalankan sistem Unix-ish, Anda dapat memastikan ini dengan menjalankan pekerjaan Anda dalam grup proses baru ( set -mdalam bash) dan (misalnya) menyiapkan jebakan keluar yang tepat.


Karena saya baru di Jenkins, dapatkah Anda mengembangkan "menjalankan pekerjaan Anda dalam grup proses baru (set-m in bash) dan (misalnya) menyiapkan jebakan keluar yang tepat"?
Mate Mrše

Ini tidak terkait dengan Jenkins per-se. Anda dapat menggunakan pendekatan ini jika pekerjaan Anda melibatkan langkah build "Execute shell" (atau jika Anda bisa mengubahnya begitu). Kemudian gunakan "set -m" untuk membuat grup proses baru, dan gunakan perangkap seperti yang ditunjukkan di sini untuk memastikan bahwa semua proses dalam grup akan terbunuh.
Alex O

3

Kami menggunakan plugin Build-timeout untuk membunuh pekerjaan yang macet dengan strategi batas waktu disetel ke No Activityatau Absolute. Bagi saya, ini adalah pendekatan yang baik ketika Anda menggunakan proyek gaya bebas. Alasan mengapa bangunan Anda "Dibatalkan setelah 0 detik" adalah kemungkinan besar ada proses anak yang belum selesai. Dari dokumentasi :

Karena Java hanya memperbolehkan utas untuk diinterupsi pada satu set lokasi tetap, tergantung pada bagaimana hang dibangun, operasi yang dibatalkan mungkin tidak berpengaruh. Sebagai contoh,

  • jika Jenkins sedang menunggu proses anak untuk diselesaikan, itu dapat dibatalkan segera.
  • jika Jenkins terjebak dalam loop tak terbatas, itu tidak akan pernah bisa dibatalkan.
  • jika Jenkins melakukan jaringan atau file I / O dalam Java VM (seperti copy file yang panjang atau pembaruan SVN), itu tidak dapat dibatalkan.

Anda dapat mencoba strategi batas waktu absolut. Anda dapat mendefinisikan variabel global, sehingga Anda tidak mengulangi nilai batas waktu dalam pekerjaan:

  1. Pergi ke "Kelola Jenkins"> "Configure System".
  2. Periksa "Variabel lingkungan" di "Properti global".
  3. Tambahkan nama variabel lingkungan = "GLOBAL_TIMEOUT_MINUTES" value = "20".
  4. Pergi ke halaman konfigurasi proyek.
  5. Centang "Batalkan pembangunan jika macet" di "Bangun Lingkungan".
  6. Pilih "Absolute" untuk "Strategi Time-out". Tentu saja, juga berlaku untuk strategi lain.
  7. Set "$ {GLOBAL_TIMEOUT_MINUTES}" untuk "Timeout".
  8. Tetapkan tindakan batas waktu "Abort the build".

Jika ini tidak berhasil, Anda dapat mencoba melihat di https log : // your-jenkins-server / log atau di tempat utas.
Gantung tersebut mungkin disebabkan oleh versi plugin yang baru / lama. Cobalah untuk menemukan apa saja proses anak yang belum selesai. Coba nonaktifkan tindakan pasca-pembangunan satu per satu untuk menemukan tindakan yang mungkin menjadi penyebab masalah. Anda dapat melihat /superuser/1401879/debugging-what-happens-when-a-jenkins-build-unexpectedly-pauses-or-hangs


Divervikasi untuk info berguna, tidak menyelesaikan masalah saya. Saya sudah mencoba membangun plugin timeout tetapi tidak berhasil.
Mate Mrše
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.