web-dev-qa-db-fra.com

Jenkins Pipeline Wipe Out Workspace

Nous utilisons Jenkins 2.x et aimons le nouveau plugin Pipeline. Cependant, avec autant de branches dans un référentiel, l'espace disque se remplit rapidement. 

Existe-t-il un plug-in compatible avec Pipeline qui permette d'effacer l'espace de travail en cas de réussite de la construction? 

88
qmo

Vous pouvez utiliser deleteDir() comme dernière étape du fichier Jenkinsfile du pipeline (en supposant que vous n'avez pas changé le répertoire de travail).

76

Comme @gotgenes l'a souligné avec Jenkins Version. 2.74, le travail ci-dessous fonctionne, vous ne savez pas depuis quand, peut-être si quelqu'un peut éditer et ajouter la version ci-dessus

cleanWs()

Avec, Jenkins Version 2.16 et le Workspace Cleanup Plugin , que j’utilise, j’utilise 

step([$class: 'WsCleanup'])

supprimer l'espace de travail.

Vous pouvez le voir en allant à

JENKINS_URL/job/<any Pipeline project>/pipeline-syntax

Puis sélectionnez "step: General Build Step" dans l'étape Sample, puis sélectionnez "Supprimer l'espace de travail lorsque la construction est terminée" dans l'étape Build.

94
cursed_axes

En fait, la fonction deleteDir supprime récursivement le répertoire en cours et son contenu. Les liens symboliques et les jonctions ne seront pas suivis mais seront supprimés. 

Pour supprimer un répertoire spécifique d'un espace de travail, encapsulez l'étape deleteDir dans une étape dir.

dir('directoryToDelete') {
    deleteDir()
}
46
Sebastien

J'ai utilisé deleteDir () comme suit:

  post {
        always {
            deleteDir() /* clean up our workspace */
        }
    }

Cependant, je devais aussi toujours exécuter un succès ou un échec après, mais vous ne pouvez pas commander les conditions de post. La commande en cours est toujours, modifiée, annulée, échec, succès et ensuite instable.

Cependant, il existe une post-condition très utile, cleanup qui fonctionne toujours en dernier, voir https://jenkins.io/doc/book/pipeline/syntax/

En fin de compte, mon message était le suivant:

post {
    always {

    }
    success{

    }
    failure {

    }
    cleanup{
        deleteDir()
    }
}

Espérons que cela pourra être utile dans certains cas.

9
user3586383

Nous nous assurons de travailler avec un espace de travail propre en utilisant une fonctionnalité du plugin git. Vous pouvez ajouter des comportements supplémentaires tels que «Nettoyer avant de passer à la caisse». Nous l'utilisons également pour les "branches de suivi à distance obsolètes".

3
NOTtardy

Utilisation du script de pipeline suivant:

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

Suivez ces étapes:

  1. Accédez à la dernière version du travail de pipeline dont vous souhaitez nettoyer l'espace de travail.
  2. Cliquez sur le lien Replay dans le menu LHS.
  3. Collez le script ci-dessus dans la zone de texte et cliquez sur Exécuter
2
Andrew Gray

Nettoyage en cours : Etant donné que la section de publication d’un pipeline est garantie à la fin de son exécution, nous pouvons ajouter une notification ou d’autres étapes pour effectuer la finalisation, la notification ou d’autres tâches de fin de pipeline.

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

Si vous avez utilisé un espace de travail personnalisé dans Jenkins, deleteDir () ne supprimera pas le dossier @tmp.

Donc, pour supprimer @tmp avec l'utilisation de l'espace de travail, suivez

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

Cet extrait fonctionnera également pour l'espace de travail par défaut.

0
Pankaj Shinde

Utilisez Git shallow clone in Comportements avancés du clone
enter image description here

Et l’autre approche consiste à nettoyer l’arbre avec git clean -fdx

0
kyb

L'utilisation de l'extension 'WipeWorkspace' semble également fonctionner. Il nécessite la forme la plus longue:

checkout([
   $class: 'GitSCM',
   branches: scm.branches,
   extensions: scm.extensions + [[$class: 'WipeWorkspace']],
   userRemoteConfigs: scm.userRemoteConfigs
])

Plus de détails ici: https://support.cloudbees.com/hc/en-us/articles/226122247-How-to-Customize-Checkout-for-Pipeline-Multibranch-

Extensions GitSCM disponibles ici: https://github.com/jenkinsci/git-plugin/tree/master/src/main/Java/hudson/plugins/git/extensions/impl

0
blindsnowmobile