Jenkins: Jenkins çalışma alanını temizlemenin herhangi bir yolu var mı?


107

Jenkins'teki çalışma alanını nasıl temizleyebilirim? AccuRevSürüm kontrol aracı olarak kullanıyorum .

freestyleJenkins'te projeler yarattım .

Yanıtlar:


97

Jenkins'te çalışma alanını temizlemenin bir yolu var. Çalışma alanını oluşturmadan önce veya oluşturduktan sonra temizleyebilirsiniz.

İlk olarak, Workspace Cleanup Plugin'i yükleyin .

Oluşturmadan önce çalışma alanını temizlemek için: Derleme Ortamı altında , derleme başlamadan önce çalışma alanını sil yazan kutuyu işaretleyin .

Yapı sonra çalışma alanını temizlemek için: başlığı altında Sonrası inşa Eylemler seçmek inşa bittiğinde Sil çalışma alanına gelen Sonrası inşa Eylemler Ekle menüsü açılır.


Çok teşekkürler Nagendra. Çalışma alanı temizleme eklentisini kullanarak bu sorunu çözebilirim.
Karthik

çalışma alanını temizlemezsem ne olur? uzak url'deki değişiklikleri mi getiriyor yoksa aynı şeyi tekrar tekrar mı oluşturuyor?
alphaguy

@alphaguy Jenkins, çalıştırdığınız her derleme için yeni bir çalışma alanı oluşturur, bu nedenle çalışma alanlarını silmezseniz sonunda düğümünüzün boş alanı kalmaz.
Miles Winther

Çalışma alanını yeniden kullanabilir miyiz .. Şu anda kodu ittiğimde git sunucusundan klonlayıp ardından derlemeyi başlatıyorum. Bu, oluşturma sürecine fazladan eklemek uzun bir süreç gerektirir! en son taahhüdü seçebilir miyiz? @MilesWinther
alphaguy

@alphaguy Bir referans deposu kullanabilirsiniz, yanıtı buradan görebilirsiniz: stackoverflow.com/a/9932036/6221831
Miles Winther

55

Benim için jenkins sürümümle manuel olarak temizlemek istiyorsanız (fazladan bir eklentiye ihtiyaç duyuyor gibi görünmüyordu, ancak kim bilir), sol sütunda bir "çalışma alanı" bağlantısı var, projenize tıklayın, ardından "çalışma alanı" üzerinde, sol taraftaki sütunun altında "Mevcut çalışma alanını sil" bağlantısı görünür. ekran görüntüsü


5
Maalesef bunu görmüyorum. Bir eklenti olmadığına emin misin?
Joachim Breitner

2
Hmm "Workspace Cleanup Plugin" gerçekten "varsayılan olarak" yüklenen eklentilerden biri gibi görünüyor. Ancak, kaldırdıktan sonra hala o bağlantıya sahibim ve hala çalışıyor gibi görünüyor. Yani ... nereden geldiğinden emin değilim. V2.121.3
rogerdpack

2
Bu işe yaradı, ancak çalışma alanı bağlantısını iki kez tıklamak zorunda kaldım: birincisi "çalışma alanı" sayfasına gitmek için, ikinci kez gerçekten "Mevcut çalışma alanını sil" bağlantısını göstermek için. Sanırım cevaba ekleyebileceğiniz bir bilgi.
Gnafu

Bu hangi Jenkins sürümü? Çünkü benimki bu seçeneği göstermiyor (muhtemelen benimki çok eski).
Pedro Trujillo

V2.121.3 diğer sürümlerden emin değil
rogerdpack

34

Yukarıdaki çözümlerin yanı sıra, daha "ORTAK" bir yol var - en büyük alan tüketicisini Linux makinesinden doğrudan silin. Aşağıdaki adımları takip edebilirsiniz:

  1. Jenkins makinesine (Putty) giriş yapın görüntü açıklamasını buraya girin
  2. Jenkins kurulum yoluna cd

Gizli klasörü de listelemek için ls -lart kullanarak, normalde jenkin kurulumu .jenkins / klasörüne yerleştirilir.

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. klasör alanlarını listeleyin

Use df -h Disk alanını yüksek seviyede göstermek için

du -sh ./*/ geçerli yoldaki her alt klasör için toplam belleği listelemek için.

du -a /etc/ | sort -n -r | head -n 10 / etc / dizininde disk alanı yiyen ilk 10 dizini listeler

  1. Eski yapıyı veya diğer büyük boyutlu klasörü silin

Normalde ./job/ klasörü veya ./workspace/ klasörü en büyük klasör olabilir. Lütfen içeri girin ve ihtiyacınız olan tabanı silin (tüm klasörü SİLMEYİN).

rm -rf theFolderToDelete

görüntü açıklamasını buraya girin


4
Neden reddedildiğinden emin değilim. Bu, Jenkins yöneticileri için iyi bir seçenek gibi görünüyor. "Salt okunur" kullanıcılar için kabul etmeyin.
Saikat

1. Bu, sorulan soruyu gerçekten yanıtlamıyor ve 2. Jenkins sunucum Windows üzerinde çalışıyor.
mjaggard

10
@mjaggard Soru başka biri tarafından soruldu ve sadece Windows için olup olmadığından bahsetmedi. Ayrıca çalışma alanını nasıl temizleyeceğini sordu (ön uç / istemci ile sınırlı değildir). Burada bariz bir şey kaçırıyor muyum?
Saikat

5
@Takias'a tamamen katılıyorum, soru için geçerli bir cevap gibi görünüyor. Ve bunu yapmak için yeterli izniniz varsa iyi bir tane.
PhoneixS

1
Bu, jenkins'e özgü olmayan "GNU / Linux makinesinde alanı nasıl kurtarırım" sorusunun cevabıdır.
Felipe Alvarez

23

ÖNEMLİ: Belirli bir Jenkins işi için çalışma alanını, iş şu anda çalışmadığı sürece kaldırmak güvenlidir!

NOT: Ben senin varsayıyorum $JENKINS_HOMEvarsayılan olarak ayarlanır: /var/jenkins_home.

Bir çalışma alanını temizleyin

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

Tüm çalışma alanlarını temizleyin

rm -rf /var/jenkins_home/workspaces/*

Birkaç istisna dışında tüm çalışma alanlarını temizleyin

Bu, bir beyaz liste oluşturmak için grep kullanır:

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

En büyük 10 çalışma alanını temizleyin

Bu, çalışma alanlarını en büyükten en küçüğe doğru sıralamak için du ve sort kullanır. Ardından, ilk 10'u yakalamak için kafayı kullanır:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

3
İşler bu çalışma alanlarını kullanıyor olabileceğinden bu tehlikelidir.
aleb

22

Çalışma Alanı Temizleme Eklentisi

Jenkins dosyasına ekle

cleanWs()

Bu, derleme tamamlandıktan sonra çalışma alanını silecek


4
Bu cevabı gerçekten takdir ediyorum çünkü eklentiyi diğer cevaplardan kurdum ama kurulumum için çalışmasını sağlayan şey buydu. Buna ek olarak, diğer cevaplarda aynı eklentinin bağlantılarını takip ettim, ancak cleanWs()eklenti açılış sayfasında söz dizimi olarak bulunmadım Jenkinsfile.
Arthur Weborg

14

Tüm işlerin çalışma alanlarını tek seferde silmek için, Jenkins YönetKomut Dosyaları Konsolunda aşağıdaki komut dosyasını çalıştırabilirsiniz . Bunu dosya sistemindeki alanı temizlemek için yaptık.

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")
  }
}

bu benim için çalışmıyor, java.lang.NullPointerException gösteriyor: Boş nesnede 'öğeler' özelliği alınamıyor.
Vincent Gerris

Bu senaryo benim için hiçbir şey yapmadı. "Siliniyor ..." ile projelerimin listesini gösterir, ancak hiçbir şeyi temizlemez. Çalışma alanı dizini dolu kalır.
Sergey Beloglazov

3

Sorunun mevcut işin çalışma alanını temizlemekle ilgili olduğunu varsayarsak, şunları çalıştırabilirsiniz:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*

2

yorum yapmaya izin verilmiyor, bu nedenle:

Upen'ın cevabı gayet iyi çalışıyor, ancak Jenkins Pipeline Jobs'u Freestyle Jobs ile karıştırmışsanız değil. Ardışık Düzen İşlerinde DoWipeWorkspace gibi bir Yöntem yoktur. Ben de bunları atlamak için Komut Dosyasını değiştirdim:

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")
  }
}

ayrıca gerekirse İş Adlarına göre de filtreleyebilirsiniz: item.getDisplayName().toLowerCase().contains("release")


1

Yukarıda belirtilen seçenekler görünmeden önce bu eklentiyi kurmanız gerekecek

Çalışma Alanı Temizleme Eklentisi

Bu eklenti, herhangi bir adım (kaynak kontrolü dahil) çalıştırılmadan önce tüm çalışma alanını silmenize izin vermek için tüm iş yapılandırmalarına onay kutusunu ekler.

Bu, derlemenizin nasıl çalışacağını garanti etmek için her zaman bilinen bir noktadan başladığınızdan emin olmak için kullanışlıdır.


3
Lütfen bağlantınızın içerdiği bazı bilgileri ekleyin. SO'da aradığımız şey yalnızca bağlantı yanıtları değil! :)
Chilion

2
Bu ek, bu cevabın halihazırda kapsamadığı daha fazla bilgi değildir. Aslında çok daha azını ekler
Liam

1

Bunu yapmak için bir seçenek var. Yapılandır -> Derleme Sonrası Eylemler
Seçenek varsayılan olarak en azından Jenkins 2.236 sürümünde gelir


0

Yalnızca bir dizini (veya dosyayı) kaldırmak istiyorsanız, Groovy ve Manage Jenkins → Scripts Console'u kullanabilirsiniz, onu kaldıran bir komut dosyası çalıştırın.

Örneğin, dosyalara şu şekilde bakabilirsiniz:

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

Ve sonra, içinde silmek istediğiniz klasöre sahip olduğunuzda dh, bir sonraki kodu ekleyebilirsiniz:

dh.deleteDir()

Ve silinecek.

Not: Örnekte gösterilen yol bir Bitnami Jenkins kurulumu içindir, sizinki farklı olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.