Jenkins: Czy istnieje sposób na uporządkowanie obszaru roboczego Jenkinsa?


104

Jak mogę wyczyścić obszar roboczy w Jenkins? Używam AccuRevjako narzędzia kontroli wersji.

Tworzyłem freestyleprojekty w Jenkins.

Odpowiedzi:


95

Istnieje sposób na wyczyszczenie obszaru roboczego w Jenkins. Możesz wyczyścić obszar roboczy przed lub po kompilacji.

Najpierw zainstaluj wtyczkę Workspace Cleanup .

Aby wyczyścić obszar roboczy przed budowaniem: W obszarze Środowisko kompilacji zaznacz pole o treści Usuń obszar roboczy przed rozpoczęciem kompilacji.

Aby wyczyścić obszar roboczy po kompilacji: W sekcji Akcje po kompilacji wybierz Usuń obszar roboczy po zakończeniu kompilacji z menu rozwijanego Dodaj działania po kompilacji .


Wielkie dzięki, Nagendra. Jestem w stanie rozwiązać ten problem za pomocą wtyczki do czyszczenia obszaru roboczego.
Karthik

co się stanie, jeśli nie posprzątam obszaru roboczego? czy jest to pobieranie zmian ze zdalnego adresu URL, czy po prostu tworzenie tego samego w kółko?
alphaguy

@alphaguy Jenkins tworzy nowy obszar roboczy dla każdej uruchamianej kompilacji, więc jeśli nie usuniesz obszarów roboczych, w końcu w węźle zabraknie miejsca.
Miles Winther,

Czy możemy ponownie wykorzystać obszar roboczy ... obecnie, kiedy wysyłam kod, klonuje go z serwera git, a następnie rozpoczynam kompilację. Dodawanie dodatkowych elementów do procesu kompilacji zajmuje dużo czasu! czy możemy po prostu wybrać najnowsze zatwierdzenie? @MilesWinther
alphaguy

@alphaguy Możesz użyć repozytorium referencyjnego, zobacz odpowiedź tutaj: stackoverflow.com/a/9932036/6221831
Miles Winther

53

Jeśli chcesz to ręcznie wyczyścić, dla mnie z moją wersją jenkins (nie wydawało się, że potrzebowałem zainstalowanej dodatkowej wtyczki, ale kto wie), w lewej kolumnie znajduje się link "obszar roboczy", kliknij swój projekt, następnie w „obszarze roboczym”, a następnie łącze „Wyczyść bieżący obszar roboczy” pojawi się pod nim w lewej kolumnie. zrzut ekranu


5
Niestety tego nie widzę. Na pewno nie jest to wtyczka?
Joachim Breitner

2
Hmm, wygląda na to, że „wtyczka do czyszczenia przestrzeni roboczej” jest rzeczywiście jedną z wtyczek instalowanych „domyślnie”. Jednak po usunięciu nadal mam ten link i wydaje się, że nadal działa. Więc ... nie jestem pewien, skąd pochodzi. V2.121.3
rogerdpack

2
To zadziałało, ale musiałem dwukrotnie kliknąć łącze obszaru roboczego: pierwszy, aby przejść do strony „obszar roboczy”, drugi raz, aby wyświetlić łącze „Wyczyść bieżący obszar roboczy”. Myślę, że to informacja, którą możesz zawrzeć w odpowiedzi.
Gnafu

Jaka jest wersja Jenkinsa? Ponieważ moja nie pokazuje tej opcji (prawdopodobnie moja jest za stara).
Pedro Trujillo

V2.121.3 nie jestem pewien w innych wersjach
rogerdpack

32

Oprócz powyższych rozwiązań istnieje bardziej „WSPÓLNY” sposób - bezpośrednie usunięcie największego konsumenta przestrzeni kosmicznej z komputera z systemem Linux. Możesz wykonać poniższe kroki:

  1. Zaloguj się do maszyny Jenkins (Putty) wprowadź opis obrazu tutaj
  2. cd do ścieżki instalacyjnej Jenkinsa

Używając ls -lart, aby wyświetlić również ukryte foldery, zwykle instalacja jenkin jest umieszczana w folderze .jenkins /

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. wypisz przestrzenie folderów

Use df -h aby pokazać miejsce na dysku na wysokim poziomie

du -sh ./*/ aby wyświetlić całkowitą pamięć dla każdego podfolderu w bieżącej ścieżce.

du -a /etc/ | sort -n -r | head -n 10 wyświetli listę 10 katalogów zajmujących najwięcej miejsca na dysku w / etc /

  1. Usuń starą kompilację lub inny duży folder

Zwykle folder ./job/ lub ./workspace/ może być największym folderem. Wejdź do środka i usuń bazę, jeśli potrzebujesz (NIE usuwaj całego folderu).

rm -rf theFolderToDelete

wprowadź opis obrazu tutaj


3
Nie wiem, dlaczego głosowano w dół. To brzmi jak dobra opcja dla administratorów Jenkinsa. Zgoda nie dla użytkowników „tylko do odczytu”.
Saikat

1. To tak naprawdę nie odpowiada na zadane pytanie i 2. mój serwer Jenkins działa w systemie Windows.
mjaggard

10
@mjaggard Pytanie zadał ktoś inny i nie wspomniał, czy dotyczy ono tylko systemu Windows. Zapytał również, jak wyczyścić obszar roboczy (nie tylko frontend / klient). Czy brakuje mi czegoś oczywistego?
Saikat

4
Całkowicie zgadzam się z @takias, wydaje się, że jest to poprawna odpowiedź na pytanie. I dobry, jeśli masz wystarczające uprawnienia, aby to zrobić.
PhoneixS

1
To jest odpowiedź na pytanie „jak odzyskać miejsce na komputerze z systemem GNU / Linux”, która nie jest specyficzna dla Jenkinsa.
Felipe Alvarez

21

Wtyczka do czyszczenia obszaru roboczego

W pliku Jenkins dodaj

cleanWs()

Spowoduje to usunięcie obszaru roboczego po zakończeniu kompilacji


4
Naprawdę doceniam tę odpowiedź, ponieważ miałem zainstalowaną wtyczkę z innych odpowiedzi, ale dzięki temu zadziałała w mojej konfiguracji. Dodając do tego, skorzystałem z linków do tej samej wtyczki w innych odpowiedziach, ale cleanWs()nie było ich na stronie docelowej wtyczki jako składnia do dodania do mojego Jenkinsfile.
Arthur Weborg,

20

WAŻNY: Bezpieczne jest usunięcie obszaru roboczego dla danego zadania Jenkins, o ile zadanie nie jest aktualnie uruchomione!

UWAGA: Zakładam, że twój $JENKINS_HOMEjest ustawiony na domyślny:/var/jenkins_home .

Uporządkuj jeden obszar roboczy

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

Wyczyść wszystkie obszary robocze

rm -rf /var/jenkins_home/workspaces/*

Wyczyść wszystkie obszary robocze z kilkoma wyjątkami

Ten używa grep do utworzenia białej listy:

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

Oczyść 10 największych obszarów roboczych

Ten używa du i sort, aby wyświetlić obszary robocze w kolejności od największego do najmniejszego. Następnie używa głowy, aby złapać pierwsze 10:

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

2
Jest to niebezpieczne, ponieważ zadania mogą korzystać z tych obszarów roboczych.
aleb

13

Możesz uruchomić poniższy skrypt w Manage JenkinsScripts Console, aby usunąć obszary robocze wszystkich zadań za jednym razem. Zrobiliśmy to, aby wyczyścić miejsce w systemie plików.

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

to nie działa dla mnie, pokazuje java.lang.NullPointerException: Nie można uzyskać właściwości „items” dla obiektu null.
Vincent Gerris

3

Zakładając, że pytanie dotyczy czyszczenia obszaru roboczego bieżącego zadania, możesz uruchomić:

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

2

nie wolno komentować, dlatego:

Odpowiedź z Upen działa dobrze, ale nie, jeśli masz Jenkins Pipeline Jobs i Freestyle Jobs. Nie ma takiej metody jak DoWipeWorkspace w Pipeline Jobs. Więc zmodyfikowałem skrypt, aby pominąć te:

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

W razie potrzeby możesz również filtrować według nazw stanowisk: item.getDisplayName().toLowerCase().contains("release")


1

Będziesz musiał zainstalować tę wtyczkę, zanim pojawią się wymienione powyżej opcje

Wtyczka do czyszczenia obszaru roboczego

Ta wtyczka dodaje pole wyboru do wszystkich konfiguracji zadań, aby umożliwić usunięcie całego obszaru roboczego przed uruchomieniem jakichkolwiek kroków (w tym kontroli źródła)

Jest to przydatne, aby upewnić się, że zawsze zaczynasz od znanego punktu, aby zagwarantować, jak będzie działać kompilacja


3
Dodaj informacje, które zawiera Twój link. Odpowiedź zawierająca tylko łącze nie jest tym, czego szukamy w SO! :)
Chilion,

2
Ten dodatek nie zawiera więcej informacji, których ta odpowiedź jeszcze nie obejmuje. W rzeczywistości dodaje to znacznie mniej
Liam

1

Jest taka możliwość. Konfiguruj -> Działania po kompilacji
Ta opcja jest dostępna domyślnie przynajmniej w wersji Jenkins 2.236


0

Jeśli chcesz po prostu usunąć jeden katalog (lub plik), możesz użyć Groovy i Manage Jenkins → Scripts Console, uruchom skrypt, który go usunie.

Na przykład możesz spojrzeć na pliki z:

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

A potem, gdy masz folder, w którym chcesz usunąć dh, możesz po prostu dołączyć następny kod:

dh.deleteDir()

I zostanie usunięty.

Uwaga: ścieżka pokazana w przykładzie dotyczy instalacji Bitnami Jenkins, Twoja może być inna.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.