wake-up-neo.net

Jenkins Pipeline-Arbeitsbereich löschen

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? 

88
qmo

Sie können deleteDir() als letzten Schritt der Pipeline-Jenkins-Datei verwenden (vorausgesetzt, Sie haben das Arbeitsverzeichnis nicht geändert).

76

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"

94
cursed_axes

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()
}
46
Sebastien

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()
        }
    }
}
36
MattDiMu

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

9
user3586383

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".

3
NOTtardy

Verwenden Sie das folgende Pipeline-Skript:

pipeline {
    agent { label "master" }
    stages {
        stage('CleanWorkspace') {
            steps {
                cleanWs()
            }
        }
    }
}

Folge diesen Schritten:

  1. Navigieren Sie zum neuesten Build des Pipeline-Jobs, dessen Arbeitsbereich Sie bereinigen möchten.
  2. Klicken Sie im LHS-Menü auf den Link Wiedergabe.
  3. Fügen Sie das obige Skript in das Textfeld ein und klicken Sie auf Ausführen
2
Andrew Gray

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 */
        }
    }
}
1
shawn derik

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.

0
Pankaj Shinde

Verwenden Sie Git shallow clone in Advanced clone-Verhalten
enter image description here

Der andere Ansatz besteht darin, den Baum mit git clean -fdx zu reinigen.

0
kyb

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

0
blindsnowmobile