Bagaimana cara menghentikan pekerjaan zombie yang tak terhentikan di Jenkins tanpa me-restart server?


178

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.


1
Tampaknya dengan versi terbaru Jenkins solusinya bukan yang ditandai sebagai diterima. (Tapi yang dari '16)
NicolasW

Jawaban:


213

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.

Thread.getAllStackTraces().keySet().each() {
  t -> if (t.getName()=="YOUR THREAD NAME" ) {   t.interrupt();  }
}

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:

Jenkins.instance.getItemByFullName("JobName")
                .getBuildByNumber(JobNumber)
                .finish(
                        hudson.model.Result.ABORTED,
                        new java.io.IOException("Aborting build")
                );

48
Bekerja dengan baik! Bagi siapa pun yang membaca, Anda dapat melihat nama utas dengan terlebih dahulu menjalankan di atas, dengan pemanggilan metodet -> println(t.getName());
Phil

2
Masih tidak bekerja dengan script di atas juga, ini mendapatkan script tetapi tidak membunuh yang sama.
Raghav S

2
apakah Anda dapat mencetak nama utas setelah mencocokkan nama t.getName()=="SOME NAME"?
Zahra

3
Ini tidak membantu saya juga - utas tidak bereaksi terhadap interrupt ().
Zitrax

2
bagi saya interupsi tidak cukup, saya harus menelepon t.stopsebagai gantinya:Thread.getAllStackTraces().keySet().each() { t -> if (t.getName()=="YOUR THREAD NAME" ) { println(“Found, stopping now… “); t.stop(); } }
Jumat

258

Saya juga memiliki masalah yang sama dan memperbaikinya melalui Jenkins Console.

Buka "Kelola Jenkins"> "Script Console" dan jalankan skrip:

 Jenkins .instance.getItemByFullName("JobName")
        .getBuildByNumber(JobNumber)
        .finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build")); 

Anda harus menentukan JobName dan JobNumber Anda.


Saya memiliki ini dengan pekerjaan Pipeline yang memulai pekerjaan lain. Server mogok, pekerjaan lain hilang, tetapi pekerjaan pipa masih zombie. Saya pertama kali mencoba jawaban yang diterima, tetapi tidak berhasil. Saya harus menjalankan perintah @ Alexandru beberapa kali, setiap kali saya melihat progress bar pekerjaan pipeline sedikit bergerak. Akhirnya pekerjaan pipa telah mati dan untuk tindakan yang baik saya menghapusnya juga.
Amedee Van Gasse

18
Ini bekerja dengan baik untuk proyek-proyek multi-cabang juga tetapi kuncinya adalah menentukan JobName sebagai Jenkins.instance.getItemByFullName ("<project-name> / <branch-name>")
evasilchenko

22
Jawaban ini membantu saya menyelesaikan masalah saya. Pipa itu adalah total zombie. Script di atas tidak berfungsi dan pipeline masih berjalan bahkan setelah beberapa jenkins restart. Saya membaca beberapa dokumentasi kelas internal dan menemukan metode delete () sehingga skrip saya terlihat seperti ini: Jenkins.instance.getItemByFullName("JobName").getBuildByNumber(JobNumber).delete();Setelah menjalankan ini dan satu lagi jenkins memulai kembali pembangunan zombie akhirnya hilang.
Szymon Sadło

5
Tidak ada metode finishdi AbstractBuild atau FreeSyleBuild atau MavenModulesetBuild
Jakub Bochenski

3
Saya mendapat masalah saat menjalankan skrip ini, ada ide? groovy.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
Tien Dung Tran

31

Jika Anda mendapat Multibranch Pipeline -job (dan Anda adalah Jenkins-admin), gunakan di Jenkins Script Console skrip ini:

Jenkins.instance
.getItemByFullName("<JOB NAME>")
.getBranch("<BRANCH NAME>")
.getBuildByNumber(<BUILD NUMBER>)
.finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"));

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:

  Jenkins.instance.getAllItems(AbstractItem.class).each {
    println(it.fullName)
  };

Dari https://support.cloudbees.com/hc/en-us/articles/226941767-Groovy-to-list-all-jobs


catatan tambahan untuk ini: jika Anda menggunakan SVN (dan Anda mengikuti konvensi standar), <BRANCH NAME> Anda akan menjadi sesuatu seperti branch / my_branch
tvt173

25

Saya menggunakan Plugin Pengawasan untuk tugas ini. Setelah instalasi plugin

  1. Pergi ke Kelola Jenkins> Pemantauan master Hudson / Jenkins
  2. Luaskan Rincian Thread, tautan biru kecil di sisi kanan
  3. Cari Nama Pekerjaan yang digantung

    Nama utas akan mulai seperti ini

    Executor #2 for master : executing <your-job-name> #<build-number>

  4. Klik tombol merah, bulat di kanan di tabel garis pekerjaan yang Anda inginkan


3
Dikatakan telah terbunuh, Tapi sekali lagi ketika kita menyegarkan halaman, utasnya tampaknya masih hidup
Raghav S

Menarik. Saya akan melihat ini. Mungkin itu tergantung pada build. Jika Anda sudah memulai proses eksternal, mungkin dengan ekstensi ANT atau Maven, ini mungkin gagal.
cheffe

Ini adalah solusi yang berhasil untuk saya. Baru saja masuk ke daftar utas, lakukan pencarian untuk nama pekerjaan dan klik tombol merah. jenkinsServer / pemantauan # utas
Gilberto Treviño

24

Suatu ketika saya menemukan bangunan yang tidak dapat dihentikan oleh "Script Console". Akhirnya saya memecahkan masalah dengan langkah-langkah ini:

ssh onto the jenkins server
cd to .jenkins/jobs/<job-name>/builds/
rm -rf <build-number>
restart jenkins

yang benar-benar membantu dalam kasus saya: pekerjaan itu tidak ada lagi pada saat membunuhnya melalui konsol (pekerjaan pipa dinamis, cabang fitur dihapus)
mkko

24

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:

Thread.getAllStackTraces().keySet().each() {
    if (it.name.contains('YOUR JOBNAME')) {  
      println "Stopping $it.name"
      it.stop()
    }
}

4
IMO yang seharusnya menjadi jawaban yang diterima. Semua jawaban lain tidak bekerja untuk saya, karena build sudah dalam keadaan terganggu, tetapi itu tergantung pada beberapa langkah post build. Hanya solusi ini yang benar-benar menghentikan pembangunan
Kutzi

1
Penggunaan di containssini 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 terduga
Brandon

14

Tanpa harus menggunakan konsol naskah atau plugin tambahan, Anda cukup batalkan membangun dengan masuk /stop, /termatau /killsetelah URL membangun di browser Anda.

Mengutip kata demi kata dari tautan di atas:

Pekerjaan pipeline dapat dengan berhenti dengan mengirim permintaan HTTP POST ke titik akhir URL bangunan.

  • <BUILD ID URL> / stop - batalkan Pipeline.
  • <BUILD ID URL> / term - paksa menghentikan pembangunan (hanya boleh digunakan jika berhenti tidak bekerja.
  • <BUILD ID URL> / kill - hard kill pipeline. Ini adalah cara paling merusak untuk menghentikan pipa dan seharusnya hanya digunakan sebagai upaya terakhir.

13

Jika Anda memiliki pekerjaan Pipeline yang tak terhentikan, coba yang berikut ini:

  1. Batalkan pekerjaan dengan mengeklik X merah di sebelah bilah kemajuan proses
  2. Klik "Jeda / lanjutkan" pada build untuk menjeda
  3. Klik "Jeda / lanjutkan" lagi untuk melanjutkan pembuatan

Jeda / Lanjutkan pekerjaan pipa

Jenkins akan menyadari bahwa pekerjaan itu harus dihentikan dan menghentikan pembangunan


8
Saya tidak punya item menu ini.
papaiatis

7

Plugin Build-timeout dapat berguna untuk kasus seperti itu. Ini akan mematikan pekerjaan secara otomatis jika terlalu lama.


1
Sayangnya itu bukan pilihan bagi kami, karena kami memiliki beberapa pekerjaan yang seharusnya berjalan selama berhari-hari (jangan tanya)
blokkie

7
Anda mengonfigurasi batas waktu pembuatan berdasarkan pekerjaan.
Draco Ater

1
Tidak, kami memiliki build macet selama lebih dari 3 jam dengan batas waktu ditetapkan menjadi 95 menit. Saya tidak berpikir plugin timeout dapat membantu karena melakukan hal yang sama seperti mengklik "Batalkan" secara manual
Jakub Bochenski

7

Saya kira sudah terlambat untuk menjawab tetapi saya bantu beberapa orang.

  1. Instal plugin pemantauan. ( http://wiki.jenkins-ci.org/display/JENKINS/Monitoring )
  2. Pergi ke jenkinsUrl / monitoring / nodes
  3. Buka bagian Utas di bagian bawah
  4. Klik tombol perincian di sebelah kiri master
  5. Urutkan berdasarkan Waktu pengguna (ms)
  6. Kemudian lihat nama utasnya, Anda akan memiliki nama dan nomor susunan
  7. Bunuh itu

Saya tidak memiliki reputasi yang cukup untuk mengirim gambar maaf.

Semoga bisa membantu


1
Tidak membantu, Dikatakan terbunuh. tetapi sekali lagi ketika halaman memuat kembali saya dapat melihat Utas itu
Raghav S

Apakah Anda membunuh utas build atau subthread dari build? Apa nama utas ini? Saya kira Anda tidak membunuh yang baik. Jika Anda membunuh utas bangunan, Anda akan melihat bangunan selesai dengan sukses.
Simon

2
Saya mencoba membunuh Thread yang dikaitkan dengan jumlah eksekutor budak yang juga memiliki nama pekerjaan. Saya juga menemukan beberapa utas lain yang terkait dengan Menangani GET dan informasi yang terkandung sehubungan dengan Subversion. Membunuh keduanya juga tidak membantu. Akhirnya restart membantu saya. Satu pengamatan lagi adalah, utas lainnya tanpa asosiasi SVN dapat dibunuh.
Raghav S

Jawaban ini adalah salinan dari jawaban @cheffe, yang telah diposting sebulan sebelumnya.
t0r0X

6

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:

Jenkins.instance.getItemByFullName(multibranchPipelineProjectName).getItems().each { repository->
  repository.getItems().each { branch->
    branch.builds.each { build->
      if (build.getResult().equals(null)) {
        build.doKill()
      }
    }
  }
}

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 masuk job.builds), dan build yang sudah selesai akan mengembalikan sesuatu selain nulluntuk build.getResult(). Pekerjaan yang berjalan dengan sah juga akan memiliki hasil build null, 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.


3
Saya sedikit memperbaiki skrip Anda. runningBuilds = Jenkins.instance.getView('All').getBuilds().findAll() { it.getResult().equals(null) } runningBuilds.each { branch->branch.doKill() }
Tobi

5

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:

  • 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.

Ini sebenarnya bukan tidak mungkin. Anda dapat menggunakan konsol skrip jenkins untuk mengganggu utas yang menjalankan pekerjaan Anda. Lihat penjelasannya di sini: stackoverflow.com/a/26306081/1434041
Zahra

3

Saya biasanya menggunakan jenkins-cli dalam kasus seperti itu. Anda dapat mengunduh toples dari halaman http://your-jenkins-host:PORT/cli. Lalu lari

java -jar jenkins-cli.jar delete-builds name_of_job_to_delete hanging_job_number

Info tambahan:

Anda juga dapat melewati berbagai bangunan seperti 350:400. Bantuan umum tersedia dengan menjalankan

java -jar jenkins-cli.jar help

Perintah bantuan konteks delete-buildsoleh

java -jar jenkins-cli.jar delete-builds

3

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

server_name_pattern = /your-servers-[1-5]/
jenkins.model.Jenkins.instance.getComputers().each { computer ->
  if (computer.getName().find(server_name_pattern)) {
    println computer.getName()
    execList = computer.getExecutors()      
    for( exec in execList ) {
      busyState = exec.isBusy() ? ' busy' : ' idle'
      println '--' + exec.getDisplayName() + busyState
      if (exec.isBusy()) {
        exec.interrupt()
      }
    }
  }
}

3

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.

def jobname = "Main/FolderName/BuildDefinition"
def buildnum = 6
Jenkins.instance.getItemByFullName(jobname).getBuildByNumber(buildnum).delete(); 

1
Ini tidak bekerja! Ini hanya
Jakub Bochenski

3

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.

def executor = Jenkins.instance.getNode('NODENAME').computer.executors.find {
    it.isBusy() && it.name.contains('JOBNAME')
}

println executor?.name
if (executor?.isBusy()) executor.interrupt()

Jawaban lain yang dipertimbangkan:

  • Jawaban dari @cheffe: tidak berfungsi (lihat poin berikutnya, dan perbarui di bawah).
  • Jawabannya dengan Thread.getAllStackTraces(): tidak ada utas yang cocok.
  • Jawaban dari @ levente-holló dan semua jawaban dengan getBuildByNumber(): tidak berlaku karena build tidak benar-benar ada lagi!
  • Jawaban dari @austinfromboston: yang mendekati kebutuhan saya, tetapi itu juga akan nuked setiap build lain yang sedang berjalan saat ini.

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.


Ini berhasil bagi saya, terima kasih! Solusi lain tidak berfungsi karena nomor build sudah dibuang (kami hanya menyimpan lat 5 build, jadi job.getBuildByNumber (...) tidak mengembalikan apa pun).
L. Tischler

2

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.

Versi yang Digunakan: Jenkins ver 2.150.2

Saya sangat kesal, tapi ... ketika melihat ke dalam log bangunan saya menemukan sesuatu yang bersilangan di ujung log:

Output logfile dari zombie build dan menunjukkan restart tidak menghentikannya

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 tentang Still pausedmuncul 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).


Jika Anda memberi tautan yang "Klik di sini untuk secara paksa membunuh seluruh bangunan", maka saya akan memilih karena itu akan berhasil untuk saya. Sayangnya solusi ini tidak karena Jenkins gagal menampilkan log terbaru karena file log beberapa GB.
mjaggard

Maaf, saat ini saya tidak lagi memiliki akses ke log ini. Jika saya mengalami kegagalan ini lagi, saya akan menambahkan komentarnya / memperbarui solusi. Tetapi bagaimana dengan melakukan logon di mesin jenkins Anda dan hanya menggunakan tailatau penampil log untuk mendapatkan tautan?
de-jcup

3
Ini berhasil untuk saya, terima kasih! @mjaggard: Tautannya adalah:<a href="#" onclick="new Ajax.Request('[server]/jenkins/job/[pipeline_name]/[job_number]/kill'); return false">Click here to forcibly kill entire build</a>
kaveish

1

Saya memiliki banyak pekerjaan zombi, jadi saya menggunakan skrip berikut:

for(int x = 1000; x < 1813; x = x + 1) {
    Jenkins .instance.getItemByFullName("JOBNAME/BRANCH")
    .getBuildByNumber(x)
    .finish(hudson.model.Result.ABORTED, new java.io.IOException("Aborting build"))
}

1

Ini bekerja untuk saya setiap saat:

Thread.getAllStackTraces().keySet().each() {
if (it.name.contains('YOUR JOBNAME')) {  
  println "Stopping $it.name"
  it.stop()
}

Terima kasih kepada funql.org


0

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.


0

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.


0

SOLUSI SANGAT SEDERHANA

Alasan saya melihat masalah ini adalah httptautan yang salah pada halaman dan bukan karena httpsitu harus menghentikan pekerjaan. Yang perlu Anda lakukan adalah mengedit onclickatribut di halaman html, dengan mengikuti

  1. Buka log konsol pekerjaan (pipa) yang hang
  2. Klik apa pun yang tersedia untuk menghentikan pekerjaan (ikon x, "Klik di sini untuk menghentikan secara paksa langkah-langkah yang sedang berjalan" dll) untuk mendapatkan tautan "Klik di sini untuk secara paksa membunuh seluruh bangunan" yang terlihat ( BUKAN akan diklik saat ini)
  3. Buka konsol browser ( gunakan salah satu dari tiga untuk chrome: F12; ctrl + shift + i; menu-> lebih banyak alat-> alat pengembang )
  4. Temukan "Klik di sini untuk secara paksa membunuh seluruh tautan" secara manual atau menggunakan tombol "pilih elemen di halaman" pada konsol
  5. Klik dua kali pada onclickatribut untuk mengedit nilainya
  6. Tambahkan skehttp memilikihttps
  7. Tekan enter untuk mengirim perubahan
  8. Klik tautan "Klik di sini untuk secara paksa membunuh seluruh bangunan"

Gunakan tangkapan layar untuk referensi masukkan deskripsi gambar di sini


0

Menggunakan konsol Script di https: // my-jenkins / script

import hudson.model.Job
import org.jenkinsci.plugins.workflow.job.WorkflowRun

Collection<Job> jobs = Jenkins.instance.getItem('My-Folder').getAllJobs()
for (int i = 0; i < jobs.size(); i++) {
  def job = jobs[i]
  for (int j = 0; j < job.builds.size(); j++) {
    WorkflowRun build = job.builds[j]
    if (build.isBuilding()) {
      println("Stopping $job ${build.number}")
      build.setResult(Result.FAILURE)
    }
  }
}

0

Tidak ada solusi yang berhasil untuk saya. Saya harus me-reboot mesin tempat server diinstal. Pekerjaan tanpa keterampilan sekarang hilang.


-1

Anda bisa menyalin pekerjaan dan menghapus yang lama. Jika tidak masalah Anda kehilangan log build lama.


-2

Inilah cara saya memperbaiki masalah ini dalam versi 2.100dengan Blue Ocean

  • Satu-satunya plugin yang saya instal adalah untuk bitbucket.
  • Saya hanya punya satu node.

sshke dalam kotak Jenkins saya
cd ~/.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.


-3

Masukkan UI samudra biru. Coba hentikan pekerjaan dari sana.


Apa artinya? Server Jenkins saya tidak memiliki UI seperti itu
Nico Haase

Blue ocean adalah plugin Jenkins yang sangat umum, Anda dapat membacanya di sini .
user3360767

Apakah ini benar-benar membatalkan pekerjaan dengan cara yang berbeda dari UI klasik? Sepertinya diragukan.
StockB
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.