Wir betreiben Jenkins 2.x und lieben das neue Pipeline-Plugin. Bei so vielen Verzweigungen in einem Repository füllt sich der Speicherplatz jedoch schnell.
Gibt es ein mit Pipeline kompatibles Plugin, das ich bei einem erfolgreichen Build aus dem Arbeitsbereich löschen kann?
Sie können deleteDir()
als letzten Schritt der Pipeline-Jenkins-Datei verwenden (vorausgesetzt, Sie haben das Arbeitsverzeichnis nicht geändert).
Wie @gotgenes mit Jenkins Version hervorgehoben. 2.74, das funktioniert unten, seit wann nicht sicher, vielleicht kann jemand die obige Version bearbeiten und hinzufügen
cleanWs()
Mit Jenkins Version 2.16 und dem Workspace Cleanup Plugin , das ich habe, verwende ich
step([$class: 'WsCleanup'])
um den Arbeitsbereich zu löschen.
Sie können es anzeigen, indem Sie zu gehen
JENKINS_URL/job/<any Pipeline project>/pipeline-syntax
Wählen Sie dann im Schritt "Schritt" die Option "Schritt: Allgemeiner Build-Schritt" und dann im Schritt "Build" die Option "Arbeitsbereich löschen, wenn der Build abgeschlossen ist"
Tatsächlich löscht die Funktion deleteDir das aktuelle Verzeichnis und dessen Inhalt rekursiv. Symbolische Links und Verknüpfungen werden nicht verfolgt, sondern entfernt.
Um ein bestimmtes Verzeichnis eines Arbeitsbereichs zu löschen, schließen Sie den deleteDir-Schritt in einem Dir-Schritt ein.
dir('directoryToDelete') {
deleteDir()
}
Die genannten Lösungen deleteDir()
und cleanWs()
(bei Verwendung des workspace cleanup plugin ) funktionieren beide, , aber die Empfehlung, es in einem zusätzlichen Build-Schritt 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 der Arbeitsbereich wird bei fehlerhaften Builds nicht bereinigt.
=> In den meisten Fällen sollten Sie es wahrscheinlich in eine post-built-step-Bedingung setzen wie always
:
pipeline {
agent any
stages {
stage('Example') {
steps {
echo 'Hello World'
}
}
}
post {
always {
cleanWs()
}
}
}
Ich habe deleteDir () wie folgt verwendet:
post {
always {
deleteDir() /* clean up our workspace */
}
}
Ich musste dann aber auch immer einen Erfolg oder Fehler ausführen, aber Sie können die Postbedingungen nicht bestellen. .__ Die aktuelle Bestellung ist immer geändert, abgebrochen, fehlgeschlagen, erfolgreich und dann instabil.
Es gibt jedoch eine sehr nützliche Post-Bedingung, cleanup, die immer als letztes ausgeführt wird, siehe https://jenkins.io/doc/book/pipeline/syntax/
Am Ende war mein Beitrag also wie folgt:
post {
always {
}
success{
}
failure {
}
cleanup{
deleteDir()
}
}
Hoffentlich kann dies für einige Eckfälle hilfreich sein
Wir sorgen dafür, dass wir mit einem sauberen Arbeitsbereich arbeiten, indem wir eine Funktion des git-Plugins verwenden. Sie können weitere Verhaltensweisen wie "Vor dem Checkout reinigen" hinzufügen. Wir verwenden dies auch für "Prune veraltete Remote-Tracking-Zweige".
Verwenden Sie das folgende Pipeline-Skript:
pipeline {
agent { label "master" }
stages {
stage('CleanWorkspace') {
steps {
cleanWs()
}
}
}
}
Folge diesen Schritten:
Bereinigung : Da der Post-Abschnitt einer Pipeline garantiert am Ende der Pipeline-Ausführung ausgeführt wird, können wir einige Benachrichtigungen oder andere Schritte hinzufügen, um Finalisierungs-, Benachrichtigungs- oder andere Pipeline-Aufgaben auszuführen.
pipeline {
agent any
stages {
stage('No-op') {
steps {
sh 'ls'
}
}
}
post {
cleanup {
echo 'One way or another, I have finished'
deleteDir() /* clean up our workspace */
}
}
}
Wenn Sie in Jenkins einen benutzerdefinierten Arbeitsbereich verwendet haben, löscht deleteDir () den Ordner @tmp nicht.
Verwenden Sie zum Löschen von @tmp zusammen mit dem Arbeitsbereich Folgendes
pipeline {
agent {
node {
customWorkspace "/home/jenkins/jenkins_workspace/${JOB_NAME}_${BUILD_NUMBER}"
}
}
post {
cleanup {
/* clean up our workspace */
deleteDir()
/* clean up tmp directory */
dir("${workspace}@tmp") {
deleteDir()
}
/* clean up script directory */
dir("${workspace}@script") {
deleteDir()
}
}
}
}
Dieses Snippet funktioniert auch für den Standardarbeitsbereich.
Verwenden Sie Git shallow clone in Advanced clone-Verhalten
Der andere Ansatz besteht darin, den Baum mit git clean -fdx
zu reinigen.
Die Verwendung der Erweiterung 'WipeWorkspace' scheint ebenfalls zu funktionieren. Es erfordert die längere Form:
checkout([
$class: 'GitSCM',
branches: scm.branches,
extensions: scm.extensions + [[$class: 'WipeWorkspace']],
userRemoteConfigs: scm.userRemoteConfigs
])
Weitere Informationen finden Sie hier: https://support.cloudbees.com/hc/de-de/articles/226122247-Wie-nach-Anpassen-Überprüfen-für-Pipeline-Multibranch-
Verfügbare GitSCM-Erweiterungen hier: https://github.com/jenkinsci/git-plugin/tree/master/src/main/Java/hudson/plugins/git/extensions/impl