Wir führen Jenkins 2.x aus und lieben das neue Pipeline-Plugin. Bei so vielen Zweigen in einem Repository füllt sich der Speicherplatz jedoch schnell.
Gibt es ein Plugin, das mit Pipeline kompatibel ist und mit dem ich den Arbeitsbereich bei einem erfolgreichen Build löschen kann?
checkout scm
.Wie @gotgenes mit Jenkins Version hervorgehoben. 2.74 , das Folgende funktioniert, nicht sicher seit wann, vielleicht ob jemand die obige Version bearbeiten und hinzufügen kann
Mit Jenkins Version 2.16 und dem Workspace Cleanup Plugin , das ich habe, verwende ich
um den Arbeitsbereich zu löschen.
Sie können es anzeigen, indem Sie zu gehen
Wählen Sie dann im Beispielschritt "Schritt: Allgemeiner Erstellungsschritt" und im Erstellungsschritt "Arbeitsbereich löschen, wenn die Erstellung abgeschlossen ist"
quelle
cleanWs
.Die genannten Lösungen
deleteDir()
undcleanWs()
(wenn das Plugin zur Bereinigung des Arbeitsbereichs verwendet wird) funktionieren beide, aber die Empfehlung, es in einem zusätzlichen Erstellungsschritt zu verwenden, ist normalerweise nicht die gewünschte Lösung . Wenn der Build fehlschlägt und die Pipeline abgebrochen wird, wird diese Bereinigungsphase nie erreicht und daher wird der Arbeitsbereich bei fehlgeschlagenen Builds nicht bereinigt.=> In den meisten Fällen sollten Sie es wahrscheinlich in einen Zustand nach dem Bau versetzen, wie
always
:quelle
cleanWs()
als Schritt ausführen löscht sie, bevor der Befehl zum Erstellen nach dem Erstellen ausgeführt wird.cleanWs()
sollte höchstwahrscheinlich immer als Post-Build-Befehl ausgeführt werdenpost
Abschnitt haben,cleanWs()
können Sie sicher in denalways
Zustand versetzt werden, aber der sicherste Punkt befindet sich innerhalb descleanup
Zustands:post { cleanup { cleanWs() } }
Tatsächlich löscht die Funktion deleteDir das aktuelle Verzeichnis und seinen Inhalt rekursiv. Symbolische Links und Kreuzungen werden nicht befolgt, sondern entfernt.
Um ein bestimmtes Verzeichnis eines Arbeitsbereichs zu löschen, schließen Sie den Schritt deleteDir in einen Verzeichnisschritt ein.
quelle
Ich habe deleteDir () wie folgt verwendet:
Allerdings musste ich dann immer NUR immer einen Erfolg oder Misserfolg ausführen, aber Sie können die Post-Bedingungen nicht bestellen. Die aktuelle Reihenfolge ist immer geändert, abgebrochen, fehlgeschlagen, erfolgreich und dann instabil.
Es gibt jedoch eine sehr nützliche Nachbedingung, die Bereinigung, die immer zuletzt ausgeführt wird (siehe https://jenkins.io/doc/book/pipeline/syntax/).
Am Ende war mein Beitrag also wie folgt:
Hoffentlich kann dies für einige Eckfälle hilfreich sein
quelle
Verwenden des folgenden Pipeline-Skripts:
Folge diesen Schritten:
quelle
options { skipDefaultCheckout() }
ein wenig schnellere Ausführung.Wenn Sie in Jenkins einen benutzerdefinierten Arbeitsbereich verwendet haben, löscht deleteDir () den Ordner @tmp nicht.
Um @tmp zusammen mit dem Arbeitsbereich zu löschen, verwenden Sie Folgendes
Dieses Snippet funktioniert auch für den Standardarbeitsbereich.
quelle
Wir stellen sicher, dass wir mit einem sauberen Arbeitsbereich arbeiten, indem wir eine Funktion des Git-Plugins verwenden. Sie können zusätzliche Verhaltensweisen wie "Vor dem Auschecken bereinigen" hinzufügen. Wir verwenden dies auch für 'Prune veraltete Remote-Tracking-Zweige'.
quelle
Die Verwendung der Erweiterung 'WipeWorkspace' scheint ebenfalls zu funktionieren. Es erfordert die längere Form:
Weitere Details finden Sie hier: https://support.cloudbees.com/hc/en-us/articles/226122247-How-to-Customize-Checkout-for-Pipeline-Multibranch-
Verfügbare GitSCM-Erweiterungen finden Sie hier: https://github.com/jenkinsci/git-plugin/tree/master/src/main/java/hudson/plugins/git/extensions/impl
quelle
Für Jenkins 2.190.1 funktioniert dies mit Sicherheit:
quelle
Bereinigen : Da der Post-Abschnitt einer Pipeline am Ende der Ausführung einer Pipeline garantiert ausgeführt wird, können wir einige Benachrichtigungen oder andere Schritte hinzufügen, um Finalisierungs-, Benachrichtigungs- oder andere Aufgaben am Ende der Pipeline auszuführen.
quelle
In meinem Fall möchte ich alte Dateien zu Beginn des Builds löschen, dies ist jedoch problematisch, da der Quellcode ausgecheckt wurde.
Meine Lösung besteht darin, git zu bitten, alle Dateien (aus dem letzten Build) zu bereinigen, von denen es nichts weiß:
Auf diese Weise kann ich den Build-Out bereinigen. Wenn dies fehlschlägt, wird der Arbeitsbereich nicht bereinigt und ist daher leicht zu debuggen.
quelle
Derzeit funktionieren sowohl deletedir () als auch cleanWs () nicht ordnungsgemäß, wenn das Jenkins-Kubernetes-Plugin verwendet wird. Der Pod-Arbeitsbereich wird gelöscht, der Master-Arbeitsbereich bleibt jedoch bestehen
Dies sollte für dauerhafte Zweige kein Problem sein, wenn Sie den Arbeitsbereich vor dem Auschecken betrügen müssen. Grundsätzlich wird derselbe Arbeitsbereich immer wieder verwendet. Bei Verwendung von Multibranch-Pipelines behält der Master jedoch den gesamten Arbeitsbereich und das Git-Verzeichnis bei
Ich glaube, das sollte ein Problem mit Jenkins sein, irgendeine Erleuchtung hier?
quelle