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
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
Jawaban:
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.
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()
Jawaban ini untuk Jenkins
Buka beranda Jenkins Anda → Kelola Jenkins → Konsol Skrip
Jalankan skrip berikut di sana. Ganti copy_folder
keyour project name
Kode:
def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
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/configure
halaman di Jenkins. Cukup klik tombol "Tampilkan Token API ..." untuk menampilkan nama pengguna dan token API.
Edit: seseorang mungkin harus mengganti doDeleteAll
dengan doDelete
pada URL di atas untuk membuat ini berfungsi, tergantung pada konfigurasi atau versi Jenkins yang digunakan.
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.
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()
}
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.
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()
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)
}
}
}
Cara lain yang mudah untuk membersihkan build adalah dengan menambahkan Plugin Buang Lama di akhir pekerjaan Anda. Tetapkan jumlah maksimum build untuk disimpan dan kemudian jalankan pekerjaan lagi:
https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin
Pergi ke %HUDSON_HOME%\jobs\<projectname>
hapus builds
dir dan hapus lastStable, lastSuccessful
tautan, dan hapus nextBuildNumber
file.
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
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)