Setel sementara jumlah build untuk mempertahankan konfigurasi pekerjaan ( Buang Old Builds ) sehingga build-build itu akan dihapus ketika build berikutnya selesai. Jika versi berikutnya adalah 1800, atur agar tetap menggunakan 85 atau lebih. Tandai semua build lama (mis. 1 hingga 10) sebagai Keep This Build Forever sebelum memulai build berikutnya. Opsi ini akan gagal menghapus beberapa build jika Anda memiliki pekerjaan downstream yang mencegah build upstream terhapus (bukan masalah dalam situasi Anda jika semuanya gagal).
Gunakan Konsol Skrip di Kelola Jenkins . Jika ini adalah pekerjaan tingkat atas (bukan di folder), berikut ini akan melakukan trik:
Tentu saja, pendekatan ini umumnya membutuhkan cadangan yang baik. Ada banyak hal yang dapat Anda hentikan menggunakan konsol skrip.
Hapus folder build dari disk (secara default di $JENKINS_HOME/jobs/JobName/builds/, menggunakan cap waktu mulai sebagai nama folder) dan restart Jenkins, atau Muat Ulang Konfigurasi Dari Disk . Opsi ini tidak akan mengizinkan plugin yang mis menjaga riwayat SVN agar tetap dengan memindahkan perubahan apa pun ke build berikutnya untuk melakukan pekerjaan mereka.
Saya telah menemukan solusi lain: Menggunakanjenkins-cli.jar -s ... delete-builds envjs 11-1717
Aaron Digulla
Membuat Intisari untuk mencantumkan semua pekerjaan dengan hitungan build melalui terminal. Memudahkan mencari pekerjaan yang perlu dibersihkan. Dapat digunakan melalui cron sebagai laporan email juga.
Nick
@Nick Periksa plugin Groovy, khususnya tipe langkah sistem Groovy build. Tidak perlu pergi ke luar Jenkins untuk ini, cukup buat pekerjaan yang melakukan ini. jenkins.model.Jenkins.instance.getAllItems(hudson.model.Job.class).each { println it.fullDisplayName + " has " + it.builds.size() + " builds" } ; returnMenyortir misalnya oleh build juga sepele.
Daniel Beck
Untuk jaringan pipa multi-cabang, Anda dapat menggunakan sintaks JobName/branch
waitinforatrain
17
Cukup lakukan panggilan API:
curl -X POST http://jenkinUser:[email protected]/job/theJob/[11-1717]/doDelete
Untuk mendapatkan APIToken: login ke Jenkins> Configuration> Show API Token.
Saya pikir ini adalah pendekatan terbaik untuk masalah ini. itu dapat dieksekusi dari jarak jauh a menyediakan berbagai tindakan melalui REST
alfredocambera
Jawaban terbaik karena Anda tidak perlu mencari toples pada sistem yang diinstal.
Keith Tyler
Maksud saya "Anda tidak perlu mengunduh apa pun"
Keith Tyler
"Jawaban terbaik karena Anda tidak perlu" - jika kriteria Anda tidak mengunduh file <1m dari ini lebih baik, terima kasih CLI. Jika kriteria tidak harus mengetikkan url berantakan dengan token autentik ingat sintaks curl (dengan asumsi itu diinstal di tempat pertama), dan Anda lebih suka perintah yang jelas dan membantu dan mungkin Anda sudah memiliki jar CLI lebih baik. Jika Anda hanya memiliki antarmuka kita di sana dengan konsol skrip terpasang, maka itu adalah yang lebih baik. Seperti biasa itu tergantung.
user17265
untuk menghapus keep build selamanya, jalankan toggleLogKeepsebelumnya doDelete.
Fancyoung
16
Seperti yang Aaron katakan dengan benar, Anda juga bisa menggunakan Jenkins CLI untuk tujuan ini:
Saya dihadapkan dengan tugas yang sama ketika saya mengambil alih server Jenkins, di mana ada lebih dari 150 pekerjaan dengan 3000 bangunan lama, jadi saya menulis skrip bash kecil yang hanya menyimpan 10 bangunan terakhir:
#! /bin/bash
initialPath=$(pwd);
find /var/lib/jenkins/ -type d -name builds | while read jobs
do
#############################################################
## Enter build-directory of current job and get some numbers
#############################################################
cd "$jobs" ;
ls -d [[:digit:]]* &>/dev/null ;
rc=$? ;
if [[ $rc -eq 0 ]] ;
then
buildName=$(ls -d [[:digit:]]*) ;
latestBuild=$(echo $buildName | awk '{print $NF}') ; # highest number
oldestBuild=$(echo $buildName | awk '{print $1}') ; # lowest number
amountOfBuilds=$(echo $buildName | wc -w ) ;
lastBuildToKeep=$(echo "${latestBuild} 9" | awk '{print $1 - $2}') ;
############################################################
## Skip Folder if it contains less than 10 builds
############################################################
if [ ${amountOfBuilds} -le 10 ] ;
then
echo "Skipping $(pwd) --> less than 10 builds";
else
############################################################
## Delete all build-directories except the last 10
############################################################
for (( i=$oldestBuild; i<$lastBuildToKeep; i++))
do
echo "Deleting $(pwd)/${i} ..."
rm -r "$i" ;
done ;
fi ;
else
echo "Skipping $(pwd) --> Zero builds";
fi ;
done ;
############################################################
## go back to $initialPath
############################################################
cd "$initialPath" ;
Restart Jenkins sesudahnya sangat disarankan untuk menghindari masalah. Thx @Aaron Digulla
Mengapa Anda tidak menggunakan skrip untuk konsol Jenkins?
Aaron Digulla
Karena saya lebih akrab dengan bash. Itulah satu-satunya alasan.
Anyesto
Dimengerti. Harap edit pertanyaan Anda dan tambahkan bahwa Jenkins harus direstart setelahnya untuk menghindari masalah.
Aaron Digulla
0
Saya telah membuat skrip python kecil yang akan melayani tujuan ini. Berikut ini skripnya:
delete_jenkins_builds.py
from os import listdir, path
import shutil
job_build_fullpath = '/var/lib/jenkins/jobs/My-Jenkins-Project/builds'
print listdir(job_build_fullpath)
for build_dir in listdir(job_build_fullpath):
if build_dir.isdigit() and int(build_dir) in range(11, 1718):
build_dir_fullpath = path.join(job_build_fullpath, build_dir)
print "Deleting: " + build_dir_fullpath
shutil.rmtree(build_dir_fullpath)
job_build_fullpath - Path dari direktori build Job
range (start_build_no, end_build_no) - range (11, 1718) mencari semua build mulai dari build no. 11 untuk membangun no. 1717. Silakan atur sesuai.
shutil.rmtree (build_dir_fullpath) - menghapus setiap direktori build yang ada dalam jangkauan.
Jawaban:
Anda memiliki beberapa opsi:
Setel sementara jumlah build untuk mempertahankan konfigurasi pekerjaan ( Buang Old Builds ) sehingga build-build itu akan dihapus ketika build berikutnya selesai. Jika versi berikutnya adalah 1800, atur agar tetap menggunakan 85 atau lebih. Tandai semua build lama (mis. 1 hingga 10) sebagai Keep This Build Forever sebelum memulai build berikutnya. Opsi ini akan gagal menghapus beberapa build jika Anda memiliki pekerjaan downstream yang mencegah build upstream terhapus (bukan masalah dalam situasi Anda jika semuanya gagal).
Gunakan Konsol Skrip di Kelola Jenkins . Jika ini adalah pekerjaan tingkat atas (bukan di folder), berikut ini akan melakukan trik:
Tentu saja, pendekatan ini umumnya membutuhkan cadangan yang baik. Ada banyak hal yang dapat Anda hentikan menggunakan konsol skrip.
Hapus folder build dari disk (secara default di
$JENKINS_HOME/jobs/JobName/builds/
, menggunakan cap waktu mulai sebagai nama folder) dan restart Jenkins, atau Muat Ulang Konfigurasi Dari Disk . Opsi ini tidak akan mengizinkan plugin yang mis menjaga riwayat SVN agar tetap dengan memindahkan perubahan apa pun ke build berikutnya untuk melakukan pekerjaan mereka.sumber
jenkins-cli.jar -s ... delete-builds envjs 11-1717
jenkins.model.Jenkins.instance.getAllItems(hudson.model.Job.class).each { println it.fullDisplayName + " has " + it.builds.size() + " builds" } ; return
Menyortir misalnya oleh build juga sepele.JobName/branch
Cukup lakukan panggilan API:
curl -X POST http://jenkinUser:[email protected]/job/theJob/[11-1717]/doDelete
Untuk mendapatkan APIToken: login ke Jenkins> Configuration> Show API Token.
sumber
toggleLogKeep
sebelumnyadoDelete
.Seperti yang Aaron katakan dengan benar, Anda juga bisa menggunakan Jenkins CLI untuk tujuan ini:
sumber
Kerangka untuk menjalankan skrip di Jenkins Script-Console. Gunakan bendera
reallyDelete
untuk mengujinya sebelum benar-benar menghapus:sumber
Saya dihadapkan dengan tugas yang sama ketika saya mengambil alih server Jenkins, di mana ada lebih dari 150 pekerjaan dengan 3000 bangunan lama, jadi saya menulis skrip bash kecil yang hanya menyimpan 10 bangunan terakhir:
Restart Jenkins sesudahnya sangat disarankan untuk menghindari masalah. Thx @Aaron Digulla
sumber
Saya telah membuat skrip python kecil yang akan melayani tujuan ini. Berikut ini skripnya:
delete_jenkins_builds.py
job_build_fullpath - Path dari direktori build Job
range (start_build_no, end_build_no) - range (11, 1718) mencari semua build mulai dari build no. 11 untuk membangun no. 1717. Silakan atur sesuai.
shutil.rmtree (build_dir_fullpath) - menghapus setiap direktori build yang ada dalam jangkauan.
Versi Python: 2.7
sumber