Server Jenkins kami memiliki pekerjaan yang telah berjalan selama tiga hari, tetapi tidak melakukan apa-apa. Mengklik X kecil di sudut tidak menghasilkan apa-apa, dan log keluaran konsol juga tidak menunjukkan apa-apa. Saya telah memeriksa server build kami dan pekerjaan itu tampaknya tidak berjalan sama sekali.
Apakah ada cara untuk memberi tahu Jenkins bahwa pekerjaan itu "selesai", dengan mengedit beberapa file atau kunci atau sesuatu? Karena kami memiliki banyak pekerjaan, kami tidak benar-benar ingin me-restart server.
Jawaban:
Buka "Kelola Jenkins"> "Script Console" untuk menjalankan skrip di server Anda untuk menginterupsi utas gantung.
Anda bisa mendapatkan semua utas langsung
Thread.getAllStackTraces()
dan menginterupsi yang menggantung.MEMPERBARUI:
Solusi di atas menggunakan utas mungkin tidak berfungsi pada versi Jenkins yang lebih baru. Untuk memotong jalur pipa beku, rujuk ke solusi ini (oleh alexandru-bantiuc ) dan jalankan:
sumber
t -> println(t.getName());
t.getName()=="SOME NAME"
?t.stop
sebagai gantinya:Thread.getAllStackTraces().keySet().each() { t -> if (t.getName()=="YOUR THREAD NAME" ) { println(“Found, stopping now… “); t.stop(); } }
Saya juga memiliki masalah yang sama dan memperbaikinya melalui Jenkins Console.
Buka "Kelola Jenkins"> "Script Console" dan jalankan skrip:
Anda harus menentukan JobName dan JobNumber Anda.
sumber
Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();
Setelah menjalankan ini dan satu lagi jenkins memulai kembali pembangunan zombie akhirnya hilang.finish
di AbstractBuild atau FreeSyleBuild atau MavenModulesetBuildgroovy.lang.MissingMethodException: No signature of method: hudson.model.FreeStyleBuild.finish() is applicable for argument types: (hudson.model.Result, java.io.IOException) values: [ABORTED, java.io.IOException: Aborting build] Possible solutions: find(), findAll(), find(groovy.lang.Closure) at
Jika Anda mendapat Multibranch Pipeline -job (dan Anda adalah Jenkins-admin), gunakan di Jenkins Script Console skrip ini:
Dari https://issues.jenkins-ci.org/browse/JENKINS-43020
Jika Anda tidak yakin apa nama lengkap (jalur) pekerjaan itu, Anda dapat menggunakan cuplikan berikut untuk mencantumkan nama lengkap semua item:
Dari https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs
sumber
Saya menggunakan Plugin Pengawasan untuk tugas ini. Setelah instalasi plugin
Cari Nama Pekerjaan yang digantung
Nama utas akan mulai seperti ini
Executor #2 for master : executing <your-job-name> #<build-number>
Klik tombol merah, bulat di kanan di tabel garis pekerjaan yang Anda inginkan
sumber
Suatu ketika saya menemukan bangunan yang tidak dapat dihentikan oleh "Script Console". Akhirnya saya memecahkan masalah dengan langkah-langkah ini:
sumber
Solusi yang diusulkan pertama cukup dekat. Jika Anda menggunakan stop () alih-alih interupsi () ia bahkan membunuh utas yang tak dapat dielakkan, yang berjalan tanpa akhir dalam skrip sistem groovy. Ini akan membunuh bangunan apa pun, yang dijalankan untuk suatu pekerjaan. Ini kodenya:
sumber
contains
sini tidak benar dan berbahaya - jika nama pekerjaan Anda adalah "Run Tests", itu juga akan mematikan semua pekerjaan yang disebut "Run Tests - Integration", "Run Tests - Unit", dll. Siapa pun yang menggunakan ini harus berhati-hati untuk tidak menghentikan pekerjaan yang tidak terkait secara tak terdugaTanpa harus menggunakan konsol naskah atau plugin tambahan, Anda cukup batalkan membangun dengan masuk
/stop
,/term
atau/kill
setelah URL membangun di browser Anda.Mengutip kata demi kata dari tautan di atas:
sumber
Jika Anda memiliki pekerjaan Pipeline yang tak terhentikan, coba yang berikut ini:
Jenkins akan menyadari bahwa pekerjaan itu harus dihentikan dan menghentikan pembangunan
sumber
Plugin Build-timeout dapat berguna untuk kasus seperti itu. Ini akan mematikan pekerjaan secara otomatis jika terlalu lama.
sumber
Saya kira sudah terlambat untuk menjawab tetapi saya bantu beberapa orang.
Saya tidak memiliki reputasi yang cukup untuk mengirim gambar maaf.
Semoga bisa membantu
sumber
The top jawaban hampir bekerja untuk saya, tapi saya punya satu masalah besar: Saya memiliki jumlah yang sangat besar (~ 100) pekerjaan zombie karena Jenkins me-restart terutama buruk-waktunya, sehingga secara manual mencari nama pekerjaan dan nomor membangun masing-masing dan setiap pekerjaan zombie dan kemudian membunuh mereka secara manual tidak mungkin dilakukan. Inilah cara saya menemukan dan membunuh pekerjaan zombie secara otomatis:
Skrip ini memotong semua build dari semua pekerjaan dan penggunaan
getResult().equals(null)
untuk menentukan apakah pekerjaan telah selesai atau belum. Build yang ada dalam antrian tetapi belum dimulai tidak akan diulangi (karena build itu tidak akan masukjob.builds
), dan build yang sudah selesai akan mengembalikan sesuatu selainnull
untukbuild.getResult()
. Pekerjaan yang berjalan dengan sah juga akan memiliki hasil buildnull
, jadi pastikan Anda tidak memiliki pekerjaan yang sedang berjalan yang tidak ingin Anda bunuh sebelum menjalankan ini.Beberapa loop bersarang terutama diperlukan untuk menemukan setiap cabang / PR untuk setiap repositori dalam proyek Multibranch Pipeline; jika Anda tidak menggunakan Multibranch Pipelines, Anda bisa mengulang semua pekerjaan Anda secara langsung dengan sesuatu seperti
Jenkins.instance.getItems().each
.sumber
runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) } runningBuilds.each { branch->branch.doKill() }
Saya telah melihat sumber Jenkins dan tampaknya apa yang saya coba lakukan tidak mungkin, karena menghentikan pekerjaan tampaknya dilakukan melalui interupsi Thread. Saya tidak tahu mengapa pekerjaan itu tergantung ..
Edit:
Kemungkinan alasan untuk pekerjaan yang tak terhentikan:
sumber
Saya biasanya menggunakan jenkins-cli dalam kasus seperti itu. Anda dapat mengunduh toples dari halaman
http://your-jenkins-host:PORT/cli
. Lalu lariInfo tambahan:
Anda juga dapat melewati berbagai bangunan seperti
350:400
. Bantuan umum tersedia dengan menjalankanPerintah bantuan konteks
delete-builds
olehsumber
Jawaban Alexandru Bantiuc bekerja dengan baik bagi saya untuk menghentikan pembangunan, tetapi eksekutor saya masih tampak sibuk. Saya dapat menghapus status pelaksana sibuk menggunakan yang berikut ini
sumber
Punya masalah yang sama tetapi tidak ada tumpukan thread. Kami menghapus pekerjaan dengan menggunakan cuplikan ini di Konsol Jenkins. Ganti jobname dan bangun nomor dengan milikmu.
sumber
Baru-baru ini saya menemukan node / agen yang memiliki satu eksekutor yang diduduki selama berhari-hari oleh build "X" dari pekerjaan pipeline, meskipun halaman job yang mengklaim build "X" tidak ada lagi (dibuang setelah 10 build berikutnya (!), Seperti dikonfigurasi dalam pekerjaan pipa). Diverifikasi bahwa pada disk: build "X" benar-benar hilang.
Solusinya: itu adalah agen / simpul yang salah melaporkan bahwa pelaksana yang sibuk sibuk menjalankan build "X". Menginterupsi utas pelaksana itu segera merilisnya.
Jawaban lain yang dipertimbangkan:
Thread.getAllStackTraces()
: tidak ada utas yang cocok.getBuildByNumber()
: tidak berlaku karena build tidak benar-benar ada lagi!Pembaruan:
Saya mengalami lagi situasi yang sama, di mana seorang Pelaksana diduduki selama berhari-hari oleh bangunan pipa yang sudah selesai (masih ada). Cuplikan kode ini adalah satu-satunya solusi yang berfungsi.
sumber
Saya memiliki masalah yang sama pada setengah jam terakhir ...
Tidak dapat menghapus bangunan zombie yang berjalan di pipa multi-cabang saya. Bahkan Server restart oleh UI atau bahkan dari commandline via
sudo service jenkins restart
apakah memblokir eksekusi ... Build itu tidak terhenti ... Itu selalu muncul kembali.Saya sangat kesal, tapi ... ketika melihat ke dalam log bangunan saya menemukan sesuatu yang bersilangan di ujung log:
Bagian bertanda merah adalah "bagian frustasi" ... Seperti yang Anda lihat, saya selalu ingin Membatalkan pembuatan dari UI tetapi tidak berfungsi ...
Tapi ada hyperlink dengan teks
Click here to forcibly terminate running steps
... (hijau pertama) Sekarang saya menekan tautan ...) Setelah eksekusi tautan pesan tentangStill paused
muncul dengan Tautan lainClick here to forcibily kill entire build
(hijau kedua) Setelah menekan tautan ini juga build akhirnya sulit terbunuh...Jadi ini tampaknya berfungsi tanpa plugin khusus (kecuali plugin build multibranch-pipeline sendiri).
sumber
tail
atau penampil log untuk mendapatkan tautan?<a href="#" onclick="new Ajax.Request('[server]/jenkins/job/[pipeline_name]/[job_number]/kill'); return false">Click here to forcibly kill entire build</a>
Saya memiliki banyak pekerjaan zombi, jadi saya menggunakan skrip berikut:
sumber
Ini bekerja untuk saya setiap saat:
Terima kasih kepada funql.org
sumber
Pernah mengalami masalah yang sama terjadi pada saya dua kali sekarang, sofa satu-satunya memperbaiki adalah untuk me-restart server kucing jantan dan me-restart membangun.
sumber
Utilitas yang saya tulis bernama jkillthread dapat digunakan untuk menghentikan utas dalam proses Java apa pun, asalkan Anda dapat masuk ke mesin yang menjalankan layanan di bawah akun yang sama.
sumber
SOLUSI SANGAT SEDERHANA
Alasan saya melihat masalah ini adalah
http
tautan yang salah pada halaman dan bukan karenahttps
itu harus menghentikan pekerjaan. Yang perlu Anda lakukan adalah mengeditonclick
atribut di halaman html, dengan mengikutionclick
atribut untuk mengedit nilainyas
kehttp
memilikihttps
Gunakan tangkapan layar untuk referensi
sumber
Menggunakan konsol Script di https: // my-jenkins / script
sumber
Tidak ada solusi yang berhasil untuk saya. Saya harus me-reboot mesin tempat server diinstal. Pekerjaan tanpa keterampilan sekarang hilang.
sumber
Anda bisa menyalin pekerjaan dan menghapus yang lama. Jika tidak masalah Anda kehilangan log build lama.
sumber
Inilah cara saya memperbaiki masalah ini dalam versi
2.100
dengan Blue Oceanssh
ke dalam kotak Jenkins sayacd ~/.jenkins
(tempat saya menyimpan jenkins)cd job/<job_name>/branches/<problem_branch_name>/builds
rm -rf <build_number>
Setelah ini, Anda dapat mengubah nomor secara opsional
nextBuildNumber
(saya melakukan ini)Akhirnya, saya memulai ulang jenkins (
brew services restart jenkins
) Langkah ini jelas akan berbeda tergantung bagaimana Anda mengelola dan menginstal Jenkins.sumber
Masukkan UI samudra biru. Coba hentikan pekerjaan dari sana.
sumber