¿Cómo borro mi historial de compilación de Jenkins / Hudson?

87

Recientemente actualicé la configuración de una de mis compilaciones de hudson. El historial de compilación no está sincronizado. ¿Hay alguna forma de borrar mi historial de compilación?

Por favor y gracias

myusuf3
fuente
¿Puedes dar más detalles sobre "totalmente desordenado"? Tal vez alguien haya experimentado un problema similar antes y pueda indicarle cómo solucionarlo.
Rob Hruska
perdón por la ambigüedad. fijo.
myusuf3
Hay una pregunta más reciente y un poco más específica aquí: stackoverflow.com/questions/13052390/…
Erwan Legrand
Esta publicación puede ayudar a codeketchup.blogspot.sg/2016/05/…
Nayana Adassuriya
Aquí está la mejor respuesta que encontré: superuser.com/questions/1418885/…
Asma Zubair

Respuestas:

51

Si hace clic en Manage Hudson / Reload Configuration From Disk, Hudson recargará todos los datos del historial de compilación.

Si los datos en el disco están desordenados, deberá ir a su directorio% HUDSON_HOME% \ jobs \ <nombre de proyecto > y restaurar los directorios de compilación como se supone que deben estar. Luego recargue los datos de configuración.

Si simplemente está preguntando cómo eliminar todo el historial de compilación, puede eliminar las compilaciones una por una a través de la interfaz de usuario si hay pocas, o ir al directorio% HUDSON_HOME% \ jobs \ <nombre del proyecto > y eliminar subdirectorios allí: corresponden a las compilaciones. Luego reinicie el servicio para que los cambios surtan efecto.

William Leara
fuente
He eliminado todos los archivos y carpetas dentro de "/ var / lib / jenkins / jobs / Demo", pero cuando voy a la interfaz de usuario de Jenkins dentro de este TRABAJO, todavía veo el historial de compilaciones.
paul
1
Después de "simular" con la estructura de directorios, simplemente vaya a "Administrar Jenkins" y seleccione "Recargar configuración desde disco"
DanBaker
1
@paul, después de eliminar las carpetas allí, es necesario reiniciar Jenkins para ver que el historial de compilación desapareció de la interfaz de usuario. Por cierto, si usamos Jenkins, la ruta generalmente se encuentra en / var / jenkins_home / jobs / {nombre del proyecto} / builds /
Bright
Creo que esta solución requiere muchos pasos en el lado del sistema, se proporciona una solución mucho más limpia en la respuesta de @Nayana Adassuriya
lfn
109

Use la consola de secuencias de comandos (Administrar Jenkins> Consola de secuencias de comandos) y algo como esta secuencia de comandos para eliminar de forma masiva el historial de compilación de un trabajo https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

Ese script asume que solo desea eliminar un rango de compilaciones. Para eliminar todas las compilaciones para un trabajo determinado, use esto (probado):

// change this variable to match the name of the job whose builds you want to delete
def jobName = "Your Job Name"
def job = Jenkins.instance.getItem(jobName)

job.getBuilds().each { it.delete() }
// uncomment these lines to reset the build number to 1:
//job.nextBuildNumber = 1
//job.save()
rjohnston
fuente
5
¡¡Excelente!! definitivamente el mejor enfoque! :)
hek2mgl
gran truco, pero ¿qué tal restablecer el contador de compilación? alguna secuencia de comandos para eso?
Jes Chergui
1
@JesChergui He actualizado para mostrar el restablecimiento del número de compilación. La consola de secuencias de comandos le permite controlar todo tipo de cosas, consulte javadoc.jenkins-ci.org (AbstractProject es un buen lugar para comenzar a jugar con trabajos)
rjohnston
Mi Jenkins se quejó de que no se le permitía acceder a instancias, o cosas por el estilo. Lo estaba ejecutando desde una nueva canalización que había configurado específicamente para esta eliminación y pegué el código anterior y cambié el nombre.
Will el
@ ¿Esto se debe al complemento de seguridad del script que coloca los trabajos de canalización en una caja de arena súper restrictiva? Vea si tiene una firma para aprobar en "Administrar Jenkins"> "Aprobaciones de secuencias de comandos en proceso". Otra opción sería utilizar la capacidad del complemento Scriptler para ejecutar scripts de administración en un trabajo: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston
76

Esta respuesta es para Jenkins

  1. Vaya a su página de inicio de Jenkins → Administrar JenkinsConsola de script

    Ingrese la descripción de la imagen aquí

  2. Ejecute el siguiente script allí. Cambiar copy_folderayour project name

Código:

def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

Mi publicacion

Nayana Adassuriya
fuente
4
La mejor respuesta hasta ahora
Dmitry Zaytsev
1
Ésta es la solución más rápida.
Davegallant
Sí, pero para este, NO reinicie Jenkins o no parece actualizar el siguiente número de compilación a 1 cuando realiza una compilación después del reinicio. El mío comenzó a los 39, así que tuve que rehacer esto.
Will el
Trabajando a partir de Jenkins 2.75
ѺȐeallү
22

Aquí hay otra opción: elimine las compilaciones con cURL.

$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

Lo anterior elimina la compilación # 1 a # 56 para el trabajo myJob.

Si la autenticación está habilitada en la instancia de Jenkins, se debe proporcionar un nombre de usuario y un token de API como este:

$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll

El token de API debe obtenerse de la /me/configurepágina en Jenkins. Simplemente haga clic en el botón "Mostrar token API ..." para mostrar tanto el nombre de usuario como el token API.

Editar: es posible que tenga que reemplazar doDeleteAllpor doDeleteen las URL anteriores para que esto funcione, según la configuración o la versión de Jenkins utilizada.

Erwan Legrand
fuente
10

A continuación, se explica cómo eliminar TODAS LAS CONSTRUCCIONES PARA TODOS LOS TRABAJOS ... utilizando Jenkins Scripting.

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 
ort11
fuente
9

Puede modificar la configuración del proyecto temporalmente para guardar solo la última 1 compilación, volver a cargar la configuración (que debería eliminar las compilaciones antiguas) y luego cambiar la configuración de nuevo al valor deseado.

the_mandrill
fuente
Lo siento, no he usado Hudson por un par de años, pero vea esto sobre cómo volver a cargar la configuración: stackoverflow.com/questions/5216552/…
the_mandrill
Como alguien que no tiene permisos de administrador para Jenkins, esta fue la única opción que funcionó para mí.
DrStrangepork
4

Si desea borrar el historial de compilación de MultiBranchProject (por ejemplo, canalización), vaya a la página de inicio de Jenkins → Administrar Jenkins → Consola de secuencias de comandos y ejecute la siguiente secuencia de comandos:

def projectName = "ProjectName"
def project = Jenkins.instance.getItem(projectName)
def jobs = project.getItems().each {
  def job = it
  job.getBuilds().each { it.delete() }
  job.nextBuildNumber = 1
  job.save()
}
Marin Ivanov
fuente
4

Ésta es la mejor opción disponible.

Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }

Este código eliminará todo el historial de compilación de trabajos de Jenkins.

Rahul Khanvani
fuente
2
Para cualquiera que se pregunte cómo ejecutar el código anterior, vaya a Jenkins Home> Manage Jenkins> Script Console. Allí habrá un campo de texto en el que puede ingresar este script.
Pharaoh Tools
2

Utilizando Script Console.

En caso de que los trabajos estén agrupados, es posible darle un nombre completo con barras diagonales:

getItemByFullName("folder_name/job_name") 
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()

o atraviesa la jerarquía así:

def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
ATrubka
fuente
2

Eliminar directamente del sistema de archivos no es seguro. Puede ejecutar el siguiente script para eliminar todas las compilaciones de todos los trabajos (de forma recursiva).

def numberOfBuildsToKeep = 10
Jenkins.instance.getAllItems(AbstractItem.class).each {
  if( it.class.toString() != "class com.cloudbees.hudson.plugins.folder.Folder" && it.class.toString() != "class org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject") {
    println it.name
    builds = it.getBuilds()
    for(int i = numberOfBuildsToKeep; i < builds.size(); i++) {
        builds.get(i).delete()
      println "Deleted" + builds.get(i)
    }
  }
}
Aytunc Beken
fuente
1

Vaya al directorio %HUDSON_HOME%\jobs\<projectname>eliminar buildsy elimine lastStable, lastSuccessfulenlaces, y elimine el nextBuildNumberarchivo.

Después de realizar los pasos anteriores, vaya al enlace de abajo desde UI
Jenkins-> Administrar Jenkins -> Recargar configuración desde el disco

Hará lo que necesites

Manish Agrawal
fuente
1

Si usa el método Script Console, intente usar lo siguiente en su lugar para tener en cuenta si los trabajos se agrupan en contenedores de carpetas.

def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)

o

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)
RampanteBadger
fuente
0

Navegar a: %JENKINS_HOME%\jobs\jobName

Abra el archivo "nextBuildNumber" y cambie el número. Después de eso, vuelva a cargar la configuración de Jenkins. Nota: el archivo "nextBuildNumber" contiene el siguiente número de compilación que utilizará Jenkins.

Nitish
fuente