183 votes

Le pipeline Jenkins efface l'espace de travail

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

Existe-t-il un plugin compatible avec Pipeline qui me permette d'effacer l'espace de travail après une construction réussie ?

159voto

cursed_axes Points 993

Comme @gotgenes l'a souligné avec Version Jenkins. 2.74 La version ci-dessous fonctionne, mais je ne sais pas depuis quand, si quelqu'un peut modifier et ajouter la version ci-dessus.

cleanWs()

Avec, Jenkins Version 2.16 et le Plugin de nettoyage de l'espace de travail que j'ai, j'utilise

step([$class: 'WsCleanup'])

pour supprimer l'espace de travail.

Vous pouvez le consulter en allant sur

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

Puis en sélectionnant "step : General Build Step" de l'étape Sample, puis en sélectionnant "Delete workspace when build is done" de l'étape Build.

0 votes

Cela fonctionne pour moi : Jenkins 2.7.2, Workspace Cleanup Plugin 0.30

4 votes

Selon cette RP inclus dans 0.33 ce qui est appelé dans le pipeline comme cleanWs .

132voto

MattDiMu Points 2250

Les solutions mentionnées deleteDir() et cleanWs() (si vous utilisez le plugin de nettoyage de l'espace de travail ) fonctionnent tous les deux, mais la recommandation de l'utiliser dans une étape de construction supplémentaire n'est généralement pas la solution souhaitée. . Si la construction échoue et que le pipeline est interrompu, cette étape de nettoyage n'est jamais atteinte et l'espace de travail n'est donc pas nettoyé en cas d'échec de la construction.

\=> Dans la plupart des cas, vous devriez probablement le mettre dans une état après l'étape de construction comme always :

pipeline {
    agent any
    stages {
        stage('Example') {
            steps {
                echo 'Hello World'
            }
        }
    }
    post { 
        always { 
            cleanWs()
        }
    }
}

6 votes

C'était absolument essentiel pour mon cas d'utilisation. J'ai besoin d'archiver les artefacts de la tâche, et l'exécution de l'option cleanWs() en tant qu'étape les supprime avant l'exécution de la commande d'archive post build. cleanWs() devrait très probablement toujours être exécuté comme une commande post-construction

35 votes

Si vous n'avez qu'un seul post section, cleanWs() peut être mis en sécurité dans le always mais l'endroit le plus sûr est à l'intérieur de l'immeuble. cleanup condition : post { cleanup { cleanWs() } }

127voto

krzyk Points 1044

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

9 votes

J'ai des problèmes avec deleteDir(). Il semble aléatoirement ne pas pouvoir supprimer le répertoire actuel lorsque le nœud est construit sur un esclave. La construction échoue bien sûr si cela se produit. Donc soyez conscient si vos travaux échouent aléatoirement. Je ne comprends pas pourquoi le nœud ne nettoie pas simplement son espace de travail lorsque le nœud commence à construire. Parce que le noeud peut fonctionner n'importe où, vous ne pouvez pas faire de suppositions sur les fichiers dans l'espace de travail de toute façon.

1 votes

Mais je pense que cela ne supprimera l'espace de travail que sur le nœud actuel. Dans le cas général, votre pipeline fonctionnera sur plusieurs esclaves différents.

25 votes

J'ai mis ça au début, juste avant checkout scm .

72voto

Sebastien Points 606

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

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

dir('directoryToDelete') {
    deleteDir()
}

10 votes

Bien que le PO ait demandé simplement comment supprimer l'espace de travail, cette réponse est la plus instructive.

4voto

NOTtardy Points 81

Nous nous assurons que nous travaillons avec un espace de travail propre en utilisant une fonctionnalité du plugin git. Vous pouvez ajouter des comportements supplémentaires tels que "Clean before checkout". Nous l'utilisons également pour "élaguer les branches de suivi à distance périmées".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X