Bagaimana cara menghapus riwayat pembuatan Jenkins / Hudson saya?

87

Saya baru saja memperbarui konfigurasi salah satu build hudson saya. Riwayat pembuatan tidak sinkron. Apakah ada cara untuk menghapus histori build saya?

Silahkan dan terima kasih

myusuf3
sumber
Bisakah Anda menjelaskan lebih lanjut tentang "benar-benar kacau"? Mungkin seseorang pernah mengalami masalah serupa sebelumnya dan dapat mengarahkan Anda tentang cara memperbaikinya.
Rob Hruska
maaf tentang ambiguitasnya. tetap.
myusuf3
Ada pertanyaan yang lebih baru dan sedikit lebih spesifik di sini: stackoverflow.com/questions/13052390/…
Erwan Legrand
Posting ini dapat membantu codeketchup.blogspot.sg/2016/05/…
Nayana Adassuriya
Inilah jawaban terbaik yang saya temukan: superuser.com/questions/1418885/…
Asma Zubair

Jawaban:

51

Jika Anda mengklik Kelola Hudson / Muat Ulang Konfigurasi Dari Disk, Hudson akan memuat ulang semua data riwayat pembuatan.

Jika data pada disk kacau, Anda harus pergi ke direktori% HUDSON_HOME% \ jobs \ < projectname > dan memulihkan direktori build sebagaimana mestinya. Kemudian muat ulang data konfigurasi.

Jika Anda hanya menanyakan cara menghapus semua riwayat build, Anda dapat menghapus build satu per satu melalui UI jika hanya ada sedikit, atau buka direktori% HUDSON_HOME% \ jobs \ < projectname > dan hapus semua subdirektori di sana - sesuai dengan build. Setelah itu restart layanan agar perubahan diterapkan.

William Leara
sumber
Saya telah menghapus semua file dan folder di dalam "/ var / lib / jenkins / jobs / Demo" tetapi saat membuka Jenkins UI di dalam JOB ini, saya masih melihat riwayat build.
paul
1
Setelah Anda "monyet" dengan struktur direktori, cukup buka "Kelola Jenkins" dan pilih "Muat Ulang Konfigurasi Dari Disk"
DanBaker
1
@paul, setelah menghapus folder di sana, Jenkins perlu dimulai ulang untuk melihat riwayat build menghilang dari UI. BTW, jika kita menggunakan Jenkins, jalurnya biasanya terletak di / var / jenkins_home / jobs / {project name} / builds /
Bright
Saya pikir solusi ini memerlukan banyak langkah di sisi sistem, solusi yang jauh lebih bersih disediakan dalam jawaban dari @Nayana Adassuriya
lfn
111

Gunakan konsol skrip (Kelola Jenkins> Konsol Skrip) dan sesuatu seperti skrip ini untuk menghapus secara massal riwayat pembuatan pekerjaan https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

Skrip tersebut mengasumsikan Anda hanya ingin menghapus beberapa build. Untuk menghapus semua build untuk pekerjaan tertentu, gunakan ini (diuji):

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)

job.getBuilds().each { it.delete() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()
rjohnston
sumber
5
Bagus!! pasti pendekatan terbaik! :)
hek2mgl
Trik yang bagus, tapi bagaimana dengan mengatur ulang penghitung build? ada skrip untuk itu?
Jes Chergui
1
@JesChergui Saya telah memperbarui untuk menunjukkan pengaturan ulang nomor build. Konsol skrip memungkinkan Anda mengontrol segala macam hal, lihat javadoc.jenkins-ci.org (AbstractProject adalah tempat yang baik untuk mulai bermain-main dengan pekerjaan)
rjohnston
Jenkins saya mengeluh bahwa itu tidak diizinkan untuk mengakses instance, atau semacamnya. Saya menjalankannya dari pipeline baru yang saya siapkan khusus untuk penghapusan ini dan saya menempelkan kode di atas dan mengubah namanya.
Akankah
@Apakah ini karena plugin keamanan skrip yang menempatkan pekerjaan pipeline di kotak pasir yang sangat ketat. Lihat apakah Anda memiliki tanda tangan untuk disetujui di "Kelola Jenkins"> "Persetujuan skrip dalam proses". Pilihan lainnya adalah menggunakan kemampuan plugin Scriptler untuk menjalankan skrip admin dalam sebuah pekerjaan: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston
76

Jawaban ini untuk Jenkins

  1. Buka beranda Jenkins Anda → Kelola JenkinsKonsol Skrip

    Masukkan deskripsi gambar di sini

  2. Jalankan skrip berikut di sana. Ganti copy_folderkeyour project name

Kode:

def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

Posting saya

Nayana Adassuriya
sumber
4
Jawaban terbaik sejauh ini
Dmitry Zaytsev
1
Ini adalah solusi tercepat.
davegallant
Ya, tapi untuk yang satu ini, JANGAN restart Jenkins atau sepertinya tidak memperbarui nextbuildnumber ke 1 ketika Anda melakukan build setelah restart. Punyaku dimulai pada 39 jadi saya harus mengulang ini.
Akankah
Bekerja pada Jenkins 2.75
ѺȐeallү
22

Berikut adalah opsi lain: hapus build dengan cURL.

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

Di atas menghapus build # 1 hingga # 56 untuk pekerjaan myJob.

Jika autentikasi diaktifkan pada instance Jenkins, nama pengguna dan token API harus disediakan seperti ini:

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

Token API harus diambil dari /me/configurehalaman di Jenkins. Cukup klik tombol "Tampilkan Token API ..." untuk menampilkan nama pengguna dan token API.

Edit: seseorang mungkin harus mengganti doDeleteAlldengan doDeletepada URL di atas untuk membuat ini berfungsi, tergantung pada konfigurasi atau versi Jenkins yang digunakan.

Erwan Legrand
sumber
10

Berikut adalah cara menghapus SEMUA BANGUNAN UNTUK SEMUA PEKERJAAN ...... menggunakan Skrip Jenkins.

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 
ort11
sumber
9

Anda dapat mengubah konfigurasi project sementara untuk hanya menyimpan 1 build terakhir, memuat ulang konfigurasi (yang seharusnya membuang build lama), lalu mengubah setelan konfigurasi lagi ke nilai yang Anda inginkan.

the_mandrill
sumber
Maaf, belum pernah menggunakan Hudson selama beberapa tahun, tetapi lihat ini tentang memuat ulang konfigurasi: stackoverflow.com/questions/5216552/…
the_mandrill
Sebagai seseorang yang tidak memiliki izin admin ke Jenkins, ini adalah satu-satunya opsi yang berhasil untuk saya.
DrStrangepork
4

Jika Anda ingin menghapus histori build MultiBranchProject (misalnya pipeline), buka halaman beranda Jenkins → Kelola Jenkins → Script Console dan jalankan skrip berikut:

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}
Marin Ivanov
sumber
4

Yang ini adalah opsi terbaik yang tersedia.

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

Kode ini akan menghapus semua riwayat pembuatan Pekerjaan Jenkins.

Rahul khanvani
sumber
2
Bagi siapa pun yang bertanya-tanya bagaimana cara menjalankan kode di atas, buka Beranda Jenkins> Kelola Jenkins> Konsol Skrip. Akan ada bidang teks di sana tempat Anda dapat memasukkan skrip ini.
Alat Firaun
2

Menggunakan Konsol Skrip.

Jika pekerjaan dikelompokkan, Anda dapat memberinya nama lengkap dengan garis miring ke depan:

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

atau lintasi hierarki seperti ini:

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
ATrubka
sumber
2

Menghapus langsung dari sistem file tidak aman. Anda dapat menjalankan skrip di bawah ini untuk menghapus semua build dari semua pekerjaan (secara rekursif).

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}
Aytunc Beken
sumber
1

Pergi ke %HUDSON_HOME%\jobs\<projectname>hapus buildsdir dan hapus lastStable, lastSuccessfultautan, dan hapus nextBuildNumberfile.

Setelah melakukan langkah-langkah di atas, buka tautan di bawah ini dari UI
Jenkins-> Kelola Jenkins -> Muat Ulang Konfigurasi dari Disk

Itu akan melakukan apa yang Anda butuhkan

Manish Agrawal
sumber
1

Jika menggunakan metode Konsol Skrip, coba gunakan yang berikut ini untuk memperhitungkan jika pekerjaan dikelompokkan ke dalam wadah folder.

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

atau

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)
RampantBadger
sumber
0

Navigasi ke: %JENKINS_HOME%\jobs\jobName

Buka file "nextBuildNumber" dan ubah nomornya. Setelah itu muat ulang konfigurasi Jenkins. Catatan: file "nextBuildNumber" berisi build no berikutnya yang akan digunakan oleh Jenkins.

Nitish
sumber