¿Hay alguna forma de limpiar el espacio de trabajo de Jenkins?

100

¿Cómo puedo limpiar el espacio de trabajo en Jenkins? Estoy usando AccuRevcomo herramienta de control de versiones.

Creé freestyleproyectos en Jenkins.

Karthik
fuente

Respuestas:

91

Hay una forma de limpiar el espacio de trabajo en Jenkins. Puede limpiar el espacio de trabajo antes o después de la construcción.

Primero, instale el complemento de limpieza del espacio de trabajo .

Para limpiar el espacio de trabajo antes de la compilación: en Entorno de compilación, marque la casilla que dice Eliminar espacio de trabajo antes de que comience la compilación.

Para limpiar el espacio de trabajo después de la compilación: Bajo el título Acciones posteriores a la compilación, seleccione Eliminar espacio de trabajo cuando se complete la compilación en el menú desplegable Agregar acciones posteriores a la compilación .

Nagendra Singh
fuente
Muchas gracias Nagendra. Puedo solucionar este problema utilizando el complemento de limpieza del espacio de trabajo.
Karthik
¿Qué pasará si no limpio el espacio de trabajo? ¿está obteniendo los cambios de la URL remota o simplemente construyendo sobre lo mismo una y otra vez?
alphaguy
@alphaguy Jenkins crea un nuevo espacio de trabajo para cada compilación que ejecute, por lo que si no elimina los espacios de trabajo, eventualmente su nodo se quedará sin espacio.
Miles Winther
¿Podemos reutilizar el espacio de trabajo? Actualmente, cuando presiono el código, se clona desde el servidor git y luego se inicia la compilación. ¡Esto requiere un largo proceso para agregar más al proceso de construcción! ¿Podemos elegir el último compromiso? @MilesWinther
alphaguy
@alphaguy Puede usar un repositorio de referencia, vea la respuesta aquí: stackoverflow.com/a/9932036/6221831
Miles Winther
53

Si desea limpiarlo manualmente, para mí con mi versión de jenkins (no parecía necesitar un complemento adicional instalado, pero quién sabe), hay un enlace "espacio de trabajo" en la columna de la izquierda, haga clic en su proyecto, luego en "espacio de trabajo", luego aparece un enlace "Borrar espacio de trabajo actual" debajo de él en la columna del lado izquierdo. captura de pantalla

Rogerdpack
fuente
4
No veo eso, desafortunadamente. ¿Seguro que no es un complemento?
Joachim Breitner
2
Hmm, parece que el "Complemento de limpieza del espacio de trabajo" es de hecho uno de los complementos que se instala "por defecto". Sin embargo, después de eliminarlo, todavía tengo ese enlace y parece que todavía funciona. Entonces ... no estoy seguro de dónde viene. V2.121.3
rogerdpack
2
Esto funcionó, pero tuve que hacer clic en el enlace del espacio de trabajo dos veces: el primero para ir a la página del "espacio de trabajo", la segunda vez para mostrar el enlace "Limpiar el espacio de trabajo actual". Supongo que es una información que puedes incluir en la respuesta.
Gnafu
¿Qué versión de Jenkins es esta? Porque el mío no muestra esta opción (probablemente el mío sea demasiado antiguo).
Pedro Trujillo
V2.121.3 no estoy seguro en otras versiones
rogerdpack
31

Además de las soluciones anteriores, hay una forma más "COMÚN": eliminar directamente el mayor consumidor de espacio de la máquina Linux. Puede seguir los siguientes pasos:

  1. Inicie sesión en la máquina Jenkins (Putty) ingrese la descripción de la imagen aquí
  2. cd a la ruta de instalación de Jenkins

Usando ls -lart para enumerar la carpeta oculta también, normalmente la instalación de jenkin se coloca en la carpeta .jenkins /

[xxxxx ~]$ ls -lart

drwxrwxr-x 12 xxxx  4096 Feb  8 02:08 .jenkins/
  1. enumerar los espacios de las carpetas

Use df -h para mostrar el espacio en disco en alto nivel

du -sh ./*/ para enumerar la memoria total para cada subcarpeta en la ruta actual.

du -a /etc/ | sort -n -r | head -n 10 enumerará los 10 directorios principales que consumen espacio en disco en / etc /

  1. Eliminar compilación antigua u otra carpeta de gran tamaño

Normalmente, la carpeta ./job/ o ./workspace/ puede ser la carpeta más grande. Ingrese y elimine la base que necesite (NO elimine la carpeta completa).

rm -rf theFolderToDelete

ingrese la descripción de la imagen aquí

Kevin Li
fuente
3
No estoy seguro de por qué votó en contra. Suena como una buena opción para los administradores de Jenkins. No acepte usuarios de "solo lectura".
Saikat
1. Esto realmente no responde a la pregunta formulada y 2. mi servidor Jenkins se ejecuta en Windows.
mjaggard
10
@mjaggard La pregunta la hizo otra persona y no mencionó si es solo para Windows. También preguntó cómo limpiar el espacio de trabajo (no limitado a frontend / cliente). ¿Me estoy perdiendo algo obvio aquí?
Saikat
4
Estoy totalmente de acuerdo con @takias, parece una respuesta válida para la pregunta. Y uno bueno si tienes suficiente permiso para hacerlo.
PhoneixS
1
Esta es una respuesta a "cómo recupero espacio en una máquina GNU / Linux" no específica de jenkins.
Felipe Alvarez
20

Complemento de limpieza del espacio de trabajo

En el archivo Jenkins, agregue

cleanWs()

Esto eliminará el espacio de trabajo después de que se complete la compilación

Waranlogesh
fuente
3
Realmente aprecio esta respuesta porque tenía el complemento instalado de las otras respuestas, pero esto es lo que hizo que funcionara para mi configuración. Además de eso, seguí los enlaces al mismo complemento en las otras respuestas, pero cleanWs()no estaba presente en la página de destino del complemento como sintaxis para agregar a mi Jenkinsfile.
Arthur Weborg
19

IMPORTANTE: ¡ Es seguro eliminar el espacio de trabajo para un trabajo de Jenkins determinado siempre que el trabajo no se esté ejecutando actualmente!

NOTA: Estoy asumiendo que su $JENKINS_HOMEse establece en el valor por defecto: /var/jenkins_home.

Limpiar un espacio de trabajo

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

Limpiar todos los espacios de trabajo

rm -rf /var/jenkins_home/workspaces/*

Limpiar todos los espacios de trabajo con algunas excepciones

Este usa grep para crear una lista blanca:

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

Limpiar 10 espacios de trabajo más grandes

Este usa du y sort para enumerar los espacios de trabajo en orden de mayor a menor. Luego, usa la cabeza para agarrar los primeros 10:

du -d 1 /var/jenkins_home/workspace \
  | sort -n -r \
  | head -n 10 \
  | xargs -I {} rm -rf /var/jenkins_home/workspace/{}
Sherwood Callaway
fuente
2
Esto es peligroso ya que los trabajos pueden estar usando esos espacios de trabajo.
aleb
13

Puede ejecutar el siguiente script en Manage JenkinsScripts Console para eliminar los espacios de trabajo de todos los trabajos de una sola vez. Hicimos esto para limpiar espacio en el sistema de archivos.

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")
  }
}
Arriba
fuente
esto no funciona para mí, muestra java.lang.NullPointerException: No se pueden obtener los 'elementos' de propiedad en un objeto nulo.
Vincent Gerris
3

Suponiendo que la pregunta es sobre la limpieza del espacio de trabajo del trabajo actual, puede ejecutar:

test -n "$WORKSPACE" && rm -rf "$WORKSPACE"/*
aleb
fuente
2

no se permite comentar, por lo tanto:

La respuesta de Upen funciona bien, pero no si tiene Jenkins Pipeline Jobs mezclados con Freestyle Jobs. No existe un método como DoWipeWorkspace en los trabajos de canalización. Así que modifiqué el script para omitirlos:

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

también puede filtrar por Nombres de trabajo si es necesario: item.getDisplayName().toLowerCase().contains("release")

achschneid
fuente
1

Deberá instalar este complemento antes de que aparezcan las opciones mencionadas anteriormente

Complemento de limpieza del espacio de trabajo

Este complemento agrega la casilla de verificación a todas las configuraciones de trabajo para permitirle eliminar todo el espacio de trabajo antes de ejecutar cualquier paso (incluido el control de fuente)

Esto es útil para asegurarse de que siempre comienza desde un punto conocido para garantizar cómo se ejecutará la compilación.

Keir
fuente
3
Agregue información que contiene su enlace. ¡La respuesta de solo enlace no es lo que estamos buscando en SO! :)
Chilion
2
Este complemento no es más información que esta respuesta aún no haya cubierto. De hecho, agrega mucho menos
Liam
0

Si solo desea eliminar un directorio (o archivo), puede usar Groovy y Manage Jenkins → Scripts Console ejecutar un script que lo elimine.

Por ejemplo, puede mirar los archivos con:

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

Y luego, cuando tenga la carpeta en la que desea eliminar dh, simplemente podría agregar el siguiente código:

dh.deleteDir()

Y será eliminado.

Nota: La ruta que se muestra en el ejemplo es para una instalación de Bitnami Jenkins, la suya podría ser diferente.

PhoneixS
fuente
0

Hay una opción para hacerlo. Configurar -> Acciones posteriores a la construcción
La opción viene de forma predeterminada al menos en la versión 2.236 de Jenkins

franciscorode
fuente