Jenkins: Existe-t-il un moyen de nettoyer l'espace de travail Jenkins?

104

Comment puis-je nettoyer l'espace de travail dans Jenkins? J'utilise AccuRevcomme outil de contrôle de version.

J'ai créé des freestyleprojets dans Jenkins.

Karthik
la source

Réponses:

95

Il existe un moyen de nettoyer l'espace de travail dans Jenkins. Vous pouvez nettoyer l'espace de travail avant la génération ou après la génération.

Tout d'abord, installez le plugin Workspace Cleanup .

Pour nettoyer l'espace de travail avant la génération: Sous Environnement de génération , cochez la case qui indique Supprimer l'espace de travail avant le démarrage de la génération.

Pour nettoyer l'espace de travail après la construction: Sous l'en-tête Actions après la construction, sélectionnez Supprimer l'espace de travail une fois la construction terminée dans le menu déroulant Ajouter des actions après la construction .

Nagendra Singh
la source
Merci beaucoup Nagendra. Je peux résoudre ce problème à l'aide du plugin de nettoyage de l'espace de travail.
Karthik
que se passera-t-il si je ne nettoie pas l'espace de travail? récupère-t-il les modifications à partir de l'url distante ou est-il simplement en train de reconstruire la même chose encore et encore?
alphaguy
@alphaguy Jenkins crée un nouvel espace de travail pour chaque build que vous exécutez, donc si vous ne supprimez pas les espaces de travail, votre nœud finira par manquer d'espace.
Miles Winther
Pouvons-nous réutiliser l'espace de travail ... actuellement, lorsque je pousse le code, il cloné à partir du serveur git, puis démarre la construction. Cela prend un long processus en ajoutant un supplément au processus de construction! pouvons-nous simplement choisir le dernier commit? @MilesWinther
alphaguy
@alphaguy Vous pouvez utiliser un référentiel de référence, voir la réponse ici: stackoverflow.com/a/9932036/6221831
Miles Winther
53

Si vous voulez le nettoyer manuellement, pour moi avec ma version de jenkins (ne semblait pas avoir besoin d'un plugin supplémentaire installé, mais qui sait), il y a un lien "espace de travail" dans la colonne de gauche, cliquez sur votre projet, puis sur «espace de travail», puis un lien «Effacer l'espace de travail actuel» apparaît en dessous dans la colonne de gauche. capture d'écran

rogerdpack
la source
5
Je ne vois pas cela, malheureusement. Bien sûr, ce n'est pas un plugin?
Joachim Breitner
2
Hmm, il semble que le "Workspace Cleanup Plugin" soit en effet l'un des plugins qui est installé "par défaut". Cependant, après l'avoir supprimé, j'ai toujours ce lien et il semble toujours fonctionner. Alors ... je ne sais pas d'où ça vient. V2.121.3
rogerdpack
2
Cela a fonctionné mais j'ai dû cliquer deux fois sur le lien de l'espace de travail: le premier pour aller à la page "espace de travail", la deuxième fois pour afficher le lien "Effacer l'espace de travail actuel". Je suppose que c'est une information que vous pouvez inclure dans la réponse.
Gnafu
Quelle est la version de Jenkins celle-ci? Parce que la mienne ne montre pas cette option (probablement la mienne est trop ancienne).
Pedro Trujillo
V2.121.3 pas sûr sur les autres versions
rogerdpack
32

En plus des solutions ci-dessus, il existe un moyen plus "COMMUN" - supprimer directement le plus grand consommateur d'espace de la machine Linux. Vous pouvez suivre les étapes ci-dessous:

  1. Connectez-vous à la machine Jenkins (Putty) entrez la description de l'image ici
  2. cd vers le chemin d'installation de Jenkins

En utilisant ls -lart pour lister également les dossiers cachés, normalement l'installation de jenkin est placée dans le dossier .jenkins /

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. lister les espaces des dossiers

Use df -h pour afficher l'espace disque en haut niveau

du -sh ./*/ pour lister la mémoire totale pour chaque sous-dossier dans le chemin actuel.

du -a /etc/ | sort -n -r | head -n 10 listera les 10 principaux répertoires consommant de l'espace disque dans / etc /

  1. Supprimer l'ancienne version ou tout autre dossier de grande taille

Normalement, le dossier ./job/ ou ./workspace/ peut être le plus grand dossier. Veuillez aller à l'intérieur et supprimer la base dont vous avez besoin (NE PAS supprimer le dossier entier).

rm -rf theFolderToDelete

entrez la description de l'image ici

Kevin Li
la source
3
Je ne sais pas pourquoi a voté contre. Cela semble être une bonne option pour les administrateurs Jenkins. Acceptez pas pour les utilisateurs "en lecture seule".
Saikat
1. Cela ne répond pas vraiment à la question posée et 2. mon serveur Jenkins fonctionne sous Windows.
mjaggard
10
@mjaggard La question a été posée par quelqu'un d'autre et il n'a pas mentionné si c'était pour Windows uniquement. Il a également demandé comment nettoyer l'espace de travail (non limité au frontend / client). Est-ce que je manque quelque chose d'évident ici?
Saikat
4
Je suis totalement d'accord avec @takias, cela semble une réponse valable à la question. Et une bonne si vous avez assez de permission pour le faire.
PhoneixS
1
Ceci est une réponse à "comment récupérer de l'espace sur une machine GNU / Linux" non spécifique à Jenkins.
Felipe Alvarez
21

Plug-in de nettoyage de l'espace de travail

Dans le fichier Jenkins, ajoutez

cleanWs()

Cela supprimera l'espace de travail une fois la construction terminée

waranlogesh
la source
4
J'apprécie vraiment cette réponse car j'ai installé le plugin à partir des autres réponses, mais c'est ce qui l'a fait fonctionner pour ma configuration. En plus de cela, j'ai suivi les liens vers le même plugin dans les autres réponses, mais je cleanWs()n'étais pas présent sur la page de destination du plugin comme syntaxe à ajouter à mon Jenkinsfile.
Arthur Weborg
20

IMPORTANT: il est prudent de supprimer l'espace de travail pour un travail Jenkins donné tant que le travail n'est pas en cours d'exécution!

NOTE: Je suppose votre $JENKINS_HOMEest réglé sur la valeur par défaut: /var/jenkins_home.

Nettoyer un espace de travail

rm -rf /var/jenkins_home/workspaces/<workspace>

Nettoyez tous les espaces de travail

rm -rf /var/jenkins_home/workspaces/*

Nettoyez tous les espaces de travail à quelques exceptions près

Celui-ci utilise grep pour créer une liste blanche:

ls /var/jenkins_home/workspace \ 
  | grep -v -E '(job-to-skip|another-job-to-skip)$' \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}

Nettoyez les 10 plus grands espaces de travail

Celui-ci utilise du et sort pour répertorier les espaces de travail par ordre du plus grand au plus petit. Ensuite, il utilise la tête pour saisir les 10 premiers:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}
Sherwood Callaway
la source
2
Ceci est dangereux car les emplois peuvent utiliser ces espaces de travail.
aleb
13

Vous pouvez exécuter le script ci-dessous dans la console Gérer JenkinsScripts Console pour supprimer les espaces de travail de tous les travaux d'un seul coup. Nous l'avons fait pour nettoyer l'espace sur le système de fichiers.

import hudson.model.*
// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding()) {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}
Upen
la source
cela ne fonctionne pas pour moi, cela montre java.lang.NullPointerException: Impossible d'obtenir la propriété 'items' sur un objet nul.
Vincent Gerris
3

En supposant que la question concerne le nettoyage de l'espace de travail de la tâche actuelle, vous pouvez exécuter:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*
Aleb
la source
2

pas autorisé à commenter, par conséquent:

La réponse d' Upen fonctionne très bien, mais pas si vous avez des jobs Jenkins Pipeline mélangés avec des jobs Freestyle. Il n'existe pas de méthode telle que DoWipeWorkspace sur les travaux de pipeline. J'ai donc modifié le script afin de les ignorer:

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.WorkflowJob

// For each project
for(item in Hudson.instance.items) {
  // check that job is not building
  if(!item.isBuilding() && !(item instanceof WorkflowJob))
  {
    println("Wiping out workspace of job "+item.name)
    item.doDoWipeOutWorkspace()
  }
  else {
    println("Skipping job "+item.name+", currently building")
  }
}

vous pouvez également filtrer par noms de tâches si nécessaire: item.getDisplayName().toLowerCase().contains("release")

achschneid
la source
1

Vous devrez installer ce plugin avant que les options mentionnées ci-dessus n'apparaissent

Plug-in de nettoyage de l'espace de travail

Ce plugin ajoute la case à cocher à toutes les configurations de travail pour vous permettre de supprimer tout l'espace de travail avant l'exécution de toute étape (contrôle de source inc)

Ceci est utile pour vous assurer que vous commencez toujours à partir d'un point connu afin de garantir la manière dont vous construisez fonctionnera

Keir
la source
3
Veuillez ajouter quelques informations que votre lien contient. Les réponses aux liens uniquement ne sont pas ce que nous recherchons chez SO! :)
Chilion
2
Cet ajout n'est plus une information que cette réponse n'a pas déjà couverte. En fait, cela ajoute beaucoup moins
Liam
1

Il y a une option pour le faire. Configurer -> Actions post-build
L'option est fournie par défaut au moins dans la version 2.236 de Jenkins

franciscorode
la source
0

Si vous souhaitez simplement supprimer un répertoire (ou fichier), vous pouvez utiliser Groovy et Manage Jenkins → Scripts Console pour exécuter un script qui le supprime.

Par exemple, vous pouvez consulter les fichiers avec:

dh = new File('./bitnami/jenkins/jenkins_home/workspace/jobname/folder')
dh.eachFile {
  println(it)
}

Et puis, lorsque vous avez le dossier que vous souhaitez supprimer dh, vous pouvez simplement ajouter le code suivant:

dh.deleteDir()

Et il sera supprimé.

Remarque: le chemin indiqué dans l'exemple correspond à une installation Bitnami Jenkins, le vôtre peut être différent.

PhoneixS
la source