Apakah ada cara untuk membersihkan ruang kerja Jenkins?

100

Bagaimana cara membersihkan ruang kerja di Jenkins? Saya menggunakan AccuRevsebagai alat kontrol versi.

Saya membuat freestyleproyek di Jenkins.

Karthik
sumber

Jawaban:

91

Ada cara untuk membersihkan ruang kerja di Jenkins. Anda dapat membersihkan ruang kerja sebelum membangun atau setelah membangun.

Pertama, instal Plugin Pembersihan Ruang Kerja .

Untuk membersihkan ruang kerja sebelum build: Di bawah Build Environment, centang kotak yang mengatakan Hapus ruang kerja sebelum build dimulai.

Untuk membersihkan ruang kerja setelah build: Di bawah judul Post-build Actions pilih Delete workspace ketika build selesai dari menu drop-down Add Post-build Actions .

Nagendra Singh
sumber
Terima kasih banyak Nagendra. Saya dapat memperbaiki masalah ini menggunakan plugin pembersihan ruang kerja.
Karthik
apa yang akan terjadi jika saya tidak membersihkan ruang kerja? apakah itu mengambil perubahan dari url jarak jauh atau hanya membangun hal yang sama lagi dan lagi?
alphaguy
@alphaguy Jenkins membuat ruang kerja baru untuk setiap build yang Anda jalankan, jadi jika Anda tidak menghapus ruang kerja tersebut, pada akhirnya node Anda akan kehabisan ruang.
Miles Winther
Bisakah kita menggunakan kembali ruang kerja .. saat ini ketika saya mendorong kode itu kloning dari server git kemudian mulai membangun. Ini membutuhkan proses panjang menambahkan ekstra untuk proses pembangunan! bisakah kita memilih komit terbaru? @MilesWinther
alphaguy
@alphaguy Anda dapat menggunakan repo referensi, lihat jawabannya di sini: stackoverflow.com/a/9932036/6221831
Miles Winther
53

Jika Anda ingin membersihkannya secara manual, bagi saya dengan versi jenkins saya (sepertinya tidak perlu plugin tambahan terpasang, tapi siapa tahu), ada tautan "ruang kerja" di kolom kiri, klik proyek Anda, lalu di "ruang kerja", lalu tautan "Hapus ruang kerja saat ini" muncul di bawahnya di kolom sebelah kiri. tangkapan layar

rogerdpack
sumber
4
Saya tidak melihat itu, sayangnya. Yakin itu bukan plugin?
Joachim Breitner
2
Hmm sepertinya "Workspace Cleanup Plugin" memang salah satu plugin yang diinstal "secara default". Namun, setelah menghapusnya, saya masih memiliki tautan itu dan sepertinya masih berfungsi. Jadi ... tidak yakin dari mana asalnya. V2.121.3
rogerdpack
2
Ini berfungsi, tetapi saya harus mengklik tautan ruang kerja dua kali: yang pertama untuk membuka halaman "ruang kerja", yang kedua untuk benar-benar menampilkan tautan "Hapus ruang kerja saat ini". Saya rasa itu adalah info yang bisa Anda masukkan dalam jawabannya.
Gnafu
Versi Jenkins apa yang ini? Karena milik saya tidak menunjukkan opsi ini (mungkin milik saya terlalu tua).
Pedro Trujillo
V2.121.3 tidak yakin pada versi lain
rogerdpack
31

Selain solusi di atas, ada cara yang lebih "UMUM" - langsung menghapus pengguna ruang terbesar dari mesin Linux. Anda dapat mengikuti langkah-langkah di bawah ini:

  1. Masuk ke mesin Jenkins (Putty) masukkan deskripsi gambar di sini
  2. cd ke jalur instalasi Jenkins

Menggunakan ls -lart untuk menampilkan folder tersembunyi juga, biasanya instalasi jenkin ditempatkan di folder .jenkins /

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. daftar ruang folder

Use df -h untuk menampilkan ruang Disk di level tinggi

du -sh ./*/ untuk mencantumkan total memori untuk setiap subfolder di jalur saat ini.

du -a /etc/ | sort -n -r | head -n 10 akan mencantumkan 10 direktori teratas yang memakan ruang disk di / etc /

  1. Hapus build lama atau folder ukuran besar lainnya

Biasanya folder ./job/ atau ./workspace/ folder bisa menjadi folder terbesar. Silakan masuk ke dalam dan hapus berdasarkan kebutuhan Anda (JANGAN hapus seluruh folder).

rm -rf theFolderToDelete

masukkan deskripsi gambar di sini

Kevin Li
sumber
3
Tidak yakin mengapa menolak. Ini terdengar seperti opsi yang bagus untuk admin Jenkins. Setuju bukan untuk pengguna "hanya baca".
Saikat
1. Ini tidak benar-benar menjawab pertanyaan yang diajukan dan 2. server Jenkins saya berjalan di Windows.
mjaggard
10
@mjaggard Pertanyaan itu diajukan oleh orang lain dan dia tidak menyebutkan apakah ini hanya untuk Windows. Dia juga bertanya bagaimana cara membersihkan ruang kerja (tidak terbatas pada frontend / klien). Apakah saya melewatkan sesuatu yang jelas di sini?
Saikat
4
Saya sangat setuju dengan @takias, sepertinya itu jawaban yang valid untuk pertanyaan itu. Dan bagus jika Anda memiliki cukup izin untuk melakukannya.
PhoneixS
1
Ini adalah jawaban untuk "bagaimana cara memulihkan ruang pada mesin GNU / Linux" bukan khusus jenkins.
Felipe Alvarez
20

Plugin Pembersihan Ruang Kerja

Dalam file Jenkins tambahkan

cleanWs()

Ini akan menghapus ruang kerja setelah build selesai

waranlogesh.dll
sumber
3
Saya sangat menghargai jawaban ini karena saya menginstal plugin dari jawaban lain tetapi inilah yang membuatnya berfungsi untuk pengaturan saya. Selain itu, saya mengikuti link ke plugin yang sama di jawaban lain, tetapi cleanWs()tidak ada di halaman landing plugin sebagai sintaks untuk ditambahkan ke my Jenkinsfile.
Arthur Weborg
19

PENTING: Aman untuk menghapus ruang kerja untuk pekerjaan Jenkins tertentu selama pekerjaan tersebut tidak sedang berjalan!

CATATAN: Saya mengasumsikan Anda $JENKINS_HOMEdiatur ke default: /var/jenkins_home.

Bersihkan satu ruang kerja

rm -rf /var/jenkins_home/workspaces/<workspace>

Bersihkan semua ruang kerja

rm -rf /var/jenkins_home/workspaces/*

Bersihkan semua ruang kerja dengan beberapa pengecualian

Yang ini menggunakan grep untuk membuat daftar putih:

ls /var/jenkins_home/workspace \ 
  | grep -v -E '(job-to-skip|another-job-to-skip)$' \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

Bersihkan 10 ruang kerja terbesar

Yang ini menggunakan du dan sort untuk mencantumkan ruang kerja dalam urutan dari yang terbesar ke terkecil. Kemudian, menggunakan head untuk mengambil 10 yang pertama:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}
Sherwood Callaway
sumber
2
Ini berbahaya karena pekerjaan mungkin menggunakan ruang kerja tersebut.
aleb
13

Anda dapat menjalankan skrip di bawah ini di Kelola JenkinsKonsol Skrip untuk menghapus ruang kerja semua pekerjaan sekaligus. Kami melakukan ini untuk membersihkan ruang pada sistem file.

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}
Upen
sumber
ini tidak bekerja untuk saya, ini menunjukkan java.lang.NullPointerException: Tidak bisa mendapatkan 'item' properti pada objek null.
Vincent Gerris
3

Dengan asumsi pertanyaannya adalah tentang membersihkan ruang kerja dari pekerjaan saat ini, Anda dapat menjalankan:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*
aleb
sumber
2

tidak diperbolehkan berkomentar, oleh karena itu:

Jawaban dari Upen berfungsi dengan baik, tetapi tidak jika Anda memiliki Jenkins Pipeline Jobs yang dicampur dengan Freestyle Jobs. Tidak ada Metode seperti DoWipeWorkspace di Pekerjaan Pipeline. Jadi saya memodifikasi Script untuk melewatkannya:

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob

// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding() && !(item instanceof WorkflowJob))
  {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

Anda juga dapat memfilter menurut Nama Pekerjaan jika diperlukan: item.getDisplayName().toLowerCase().contains("release")

achschneid.dll
sumber
1

Anda perlu menginstal plugin ini sebelum opsi yang disebutkan di atas muncul

Plugin Pembersihan Ruang Kerja

Plugin ini menambahkan kotak centang ke semua konfigurasi pekerjaan untuk memungkinkan Anda menghapus seluruh ruang kerja sebelum langkah apa pun (termasuk kontrol sumber) dijalankan

Ini berguna untuk memastikan Anda selalu memulai dari titik yang diketahui untuk menjamin bagaimana build Anda akan berjalan

Keir
sumber
3
Harap tambahkan beberapa informasi yang terkandung dalam tautan Anda. Jawaban link saja bukanlah yang kami cari di SO! :)
Chilion
2
Tidak ada lagi informasi tambahan yang belum dicakup oleh jawaban ini. Bahkan itu menambahkan jauh lebih sedikit
Liam
0

Jika Anda ingin menghapus satu dir (atau file), Anda dapat menggunakan Groovy dan Kelola Jenkins → Scripts Console menjalankan skrip yang menghapusnya.

Misalnya, Anda dapat melihat file dengan:

dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
  println(it)
}

Dan kemudian, ketika Anda memiliki folder yang ingin Anda hapus dh, Anda cukup menambahkan kode berikutnya:

dh.deleteDir()

Dan itu akan dihapus.

Catatan: Jalur yang ditunjukkan dalam contoh adalah untuk instalasi Bitnami Jenkins, jalur Anda mungkin berbeda.

PhoneixS
sumber
0

Ada opsi untuk melakukannya. Konfigurasi -> Tindakan Pasca-build
Opsi ini muncul secara default setidaknya di Jenkins versi 2.236

franciscorode.dll
sumber