Gibt es eine Möglichkeit, den Jenkins-Arbeitsbereich zu bereinigen?

99

Wie kann ich den Arbeitsbereich in Jenkins bereinigen? Ich benutze AccuRevals Versionskontrollwerkzeug.

Ich habe freestyleProjekte in Jenkins erstellt.

Karthik
quelle

Antworten:

91

Es gibt eine Möglichkeit, den Arbeitsbereich in Jenkins zu bereinigen. Sie können den Arbeitsbereich vor oder nach dem Erstellen bereinigen.

Installieren Sie zunächst das Workspace Cleanup Plugin .

So bereinigen Sie den Arbeitsbereich vor dem Erstellen: Aktivieren Sie unter Build-Umgebung das Kontrollkästchen Arbeitsbereich vor dem Start des Builds löschen.

So bereinigen Sie den Arbeitsbereich nach dem Build: Unter dem Titel Post-Build - Aktionen wählen Löschen Arbeitsbereich , wenn Build erfolgt aus dem Add Post-Build - Aktionen im Dropdown - Menü.

Nagendra Singh
quelle
Vielen Dank Nagendra. Ich kann dieses Problem mithilfe des Plugins zur Bereinigung des Arbeitsbereichs beheben.
Karthik
Was passiert, wenn ich den Arbeitsbereich nicht bereinige? Ruft es die Änderungen von der Remote-URL ab oder baut es immer wieder dasselbe auf?
Alphaguy
@alphaguy Jenkins erstellt für jeden Build, den Sie ausführen, einen neuen Arbeitsbereich. Wenn Sie also die Arbeitsbereiche nicht löschen, wird Ihrem Knoten möglicherweise der Speicherplatz ausgehen.
Miles Winther
Können wir den Arbeitsbereich wiederverwenden? Derzeit, wenn ich den Code drücke, klone er vom Git-Server und starte dann den Build. Dies dauert einen langen Prozess und fügt dem Build-Prozess zusätzliches hinzu! Können wir nur das neueste Commit auswählen? @ MilesWinther
Alphaguy
@alphaguy Sie können ein Referenz-Repo verwenden, die Antwort finden Sie hier: stackoverflow.com/a/9932036/6221831
Miles Winther
53

Wenn Sie es manuell bereinigen möchten, gibt es für mich mit meiner Version von Jenkins (anscheinend wurde kein zusätzliches Plugin installiert, aber wer weiß) einen Link "Arbeitsbereich" in der linken Spalte. Klicken Sie auf Ihr Projekt. dann auf "Arbeitsbereich", dann erscheint ein Link "Aktuellen Arbeitsbereich löschen" darunter in der linken Spalte. Bildschirmfoto

Rogerdpack
quelle
4
Das sehe ich leider nicht. Sicher ist es kein Plugin?
Joachim Breitner
2
Hmm, es scheint, dass das "Workspace Cleanup Plugin" tatsächlich eines der Plugins ist, die "standardmäßig" installiert sind. Nach dem Entfernen habe ich diesen Link jedoch immer noch und er scheint immer noch zu funktionieren. Also ... nicht sicher, woher es kommt. V2.121.3
Rogerdpack
2
Dies funktionierte, aber ich musste zweimal auf den Arbeitsbereich-Link klicken: Der erste, der zur Seite "Arbeitsbereich" ging, das zweite Mal, um den Link "Aktuellen Arbeitsbereich löschen" anzuzeigen. Ich denke, es ist eine Information, die Sie in die Antwort aufnehmen können.
Gnafu
Welche Jenkins-Version ist diese? Weil meine diese Option nicht anzeigt (wahrscheinlich ist meine zu alt).
Pedro Trujillo
V2.121.3 nicht sicher auf anderen Versionen
Rogerdpack
30

Neben den oben genannten Lösungen gibt es einen "GEMEINSAMEN" Weg - den größten Speicherplatzverbraucher direkt vom Linux-Computer zu löschen. Sie können die folgenden Schritte ausführen:

  1. Melden Sie sich bei Jenkins an (Putty) Geben Sie hier die Bildbeschreibung ein
  2. CD zum Jenkins-Installationspfad

Wenn Sie ls -lart verwenden, um auch versteckte Ordner aufzulisten, wird die Jenkins-Installation normalerweise in .jenkins / folder abgelegt

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. Listen Sie die Ordnerbereiche auf

Use df -h um Speicherplatz auf hoher Ebene anzuzeigen

du -sh ./*/ um den Gesamtspeicher für jeden Unterordner im aktuellen Pfad aufzulisten.

du -a /etc/ | sort -n -r | head -n 10 listet die Top 10 Verzeichnisse auf, die Speicherplatz in / etc / verbrauchen

  1. Löschen Sie alte Builds oder andere große Ordner

Normalerweise kann der Ordner ./job/ oder der Ordner ./workspace/ der größte Ordner sein. Bitte gehen Sie hinein und löschen Sie die Basis nach Bedarf (NICHT den gesamten Ordner löschen).

rm -rf theFolderToDelete

Geben Sie hier die Bildbeschreibung ein

Kevin Li
quelle
3
Ich bin mir nicht sicher, warum ich abgewählt habe. Dies klingt nach einer guten Option für Jenkins-Administratoren. Stimmen Sie nicht für "schreibgeschützte" Benutzer zu.
Saikat
1. Dies beantwortet die gestellte Frage nicht wirklich und 2. mein Jenkins-Server läuft unter Windows.
mjaggard
9
@mjaggard Die Frage wurde von jemand anderem gestellt und er erwähnte nicht, ob es nur für Windows ist. Außerdem fragte er, wie der Arbeitsbereich bereinigt werden soll (nicht auf Frontend / Client beschränkt). Vermisse ich hier etwas Offensichtliches?
Saikat
4
Ich stimme @takias voll und ganz zu, es scheint eine gültige Antwort auf die Frage zu sein. Und eine gute, wenn Sie genug Erlaubnis dazu haben.
PhoneixS
1
Dies ist eine Antwort auf "Wie kann ich Speicherplatz auf einem GNU / Linux-Computer wiederherstellen?", Die nicht spezifisch für Jenkins ist.
Felipe Alvarez
20

Plugin zur Bereinigung des Arbeitsbereichs

In Jenkins Datei hinzufügen

cleanWs()

Dadurch wird der Arbeitsbereich nach Abschluss des Builds gelöscht

waranlogesh
quelle
3
Ich schätze diese Antwort sehr, da ich das Plugin von den anderen Antworten installiert hatte, aber das hat es dazu gebracht, für mein Setup zu funktionieren. Außerdem folgte ich den Links zu demselben Plugin in den anderen Antworten, cleanWs()war aber auf der Plugin-Landingpage nicht als Syntax zum Hinzufügen zu meinem Plugin vorhanden Jenkinsfile.
Arthur Weborg
18

WICHTIG: Es ist sicher, den Arbeitsbereich für einen bestimmten Jenkins-Job zu entfernen, solange der Job gerade nicht ausgeführt wird!

HINWEIS: Ich gehe davon aus, dass Ihr $JENKINS_HOMEStandardwert festgelegt ist:/var/jenkins_home .

Bereinigen Sie einen Arbeitsbereich

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

Bereinigen Sie alle Arbeitsbereiche

rm -rf /var/jenkins_home/workspaces/*

Bereinigen Sie alle Arbeitsbereiche mit wenigen Ausnahmen

Dieser verwendet grep, um eine Whitelist zu erstellen:

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

Bereinigen Sie die 10 größten Arbeitsbereiche

Dieser verwendet du und sort, um Arbeitsbereiche in der Reihenfolge vom größten zum kleinsten aufzulisten. Dann greift es mit dem Kopf nach den ersten 10:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}
Sherwood Callaway
quelle
2
Dies ist gefährlich, da Jobs möglicherweise diese Arbeitsbereiche verwenden.
Aleeb
13

Sie können das folgende Skript in der Konsole " Jenkins verwaltenSkripte" ausführen, um die Arbeitsbereiche aller Jobs auf einmal zu löschen. Wir haben dies getan, um Speicherplatz im Dateisystem zu bereinigen.

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
quelle
Dies funktioniert bei mir nicht, es zeigt java.lang.NullPointerException: Die Eigenschaft 'items' kann für ein Null-Objekt nicht abgerufen werden.
Vincent Gerris
3

Angenommen, es geht um die Bereinigung des Arbeitsbereichs des aktuellen Jobs, können Sie Folgendes ausführen:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*
Aleb
quelle
2

darf daher nicht kommentieren:

Die Antwort von Upen funktioniert einwandfrei, aber nicht, wenn Sie Jenkins Pipeline Jobs mit Freestyle Jobs gemischt haben. Es gibt keine Methode wie DoWipeWorkspace für Pipeline-Jobs. Also habe ich das Skript geändert, um diese zu überspringen:

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

Bei Bedarf können Sie auch nach Jobnamen filtern: item.getDisplayName().toLowerCase().contains("release")

achschneid
quelle
1

Sie müssen dieses Plugin installieren, bevor die oben genannten Optionen angezeigt werden

Plugin zur Bereinigung des Arbeitsbereichs

Dieses Plugin fügt allen Jobkonfigurationen das Kontrollkästchen hinzu, damit Sie den gesamten Arbeitsbereich löschen können, bevor Schritte (einschließlich Quellcodeverwaltung) ausgeführt werden

Dies ist nützlich, um sicherzustellen, dass Sie immer an einem bekannten Punkt beginnen, um sicherzustellen, dass Ihre Erstellung ausgeführt wird

Keir
quelle
3
Bitte fügen Sie einige Informationen hinzu, die Ihr Link enthält. Nur-Link-Antworten sind nicht das, wonach wir bei SO suchen! :)
Chilion
2
Dieses Add enthält keine weiteren Informationen, die in dieser Antwort noch nicht behandelt wurden. Tatsächlich ist es viel weniger
Liam
0

Wenn Sie nur ein Verzeichnis (oder eine Datei) entfernen möchten, können Sie mit Groovy und Jenkins verwalten → Scripts Console ein Skript ausführen, das es entfernt.

Sie können die Dateien beispielsweise mit folgenden Elementen anzeigen:

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

Wenn Sie den Ordner haben, in dem Sie ihn löschen möchten dh, können Sie einfach den nächsten Code anhängen:

dh.deleteDir()

Und es wird gelöscht.

Hinweis: Der im Beispiel gezeigte Pfad gilt für eine Bitnami Jenkins-Installation. Ihr Pfad kann unterschiedlich sein.

PhoneixS
quelle
0

Es gibt eine Option, um dies zu tun. Konfigurieren -> Aktionen nach dem Erstellen
Die Option ist standardmäßig mindestens in Jenkins Version 2.236 verfügbar

Franciscorode
quelle