Come posso cancellare la cronologia delle build di Jenkins / Hudson?


87

Di recente ho aggiornato la configurazione di una delle mie build Hudson. La cronologia della build non è sincronizzata. C'è un modo per cancellare la cronologia della mia build?

Per favore e grazie


Puoi approfondire "totalmente incasinato"? Forse qualcuno avrà già riscontrato un problema simile e potrà indicarti come risolverlo.
Rob Hruska

scusa per l'ambiguità. fisso.
myusuf3

C'è una domanda più recente e leggermente più specifica qui: stackoverflow.com/questions/13052390/…
Erwan Legrand


Ecco la migliore risposta che ho trovato: superuser.com/questions/1418885/…
Asma Zubair

Risposte:


51

Se fai clic su Gestisci Hudson / Ricarica configurazione da disco, Hudson ricaricherà tutti i dati della cronologia di compilazione.

Se i dati sul disco sono incasinati, dovrai andare alla tua directory% HUDSON_HOME% \ jobs \ < nomeprogetto > e ripristinare le directory di build come dovrebbero essere. Quindi ricaricare i dati di configurazione.

Se stai semplicemente chiedendo come rimuovere tutta la cronologia delle build, puoi semplicemente eliminare le build una per una tramite l'interfaccia utente se ce ne sono solo alcune, oppure andare alla directory% HUDSON_HOME% \ jobs \ < projectname > ed eliminare tutte le sottodirectory lì - corrispondono alle build. Successivamente riavviare il servizio affinché le modifiche abbiano effetto.


Ho cancellato tutti i file e le cartelle all'interno di "/ var / lib / jenkins / jobs / Demo" ma quando vado all'interfaccia utente di Jenkins all'interno di questo LAVORO vedo ancora la cronologia delle build.
paul

1
Dopo aver "scimmiottato" con la struttura della directory, vai su "Gestisci Jenkins" e seleziona "Ricarica configurazione da disco"
DanBaker

1
@paul, dopo aver eliminato le cartelle lì, è necessario un riavvio di Jenkins per vedere la cronologia di compilazione scomparsa dall'interfaccia utente. A proposito, se stiamo usando Jenkins, il percorso si trova in genere in / var / jenkins_home / jobs / {project name} / builds /
Bright

Penso che questa soluzione richieda molti passaggi sul lato del sistema, una soluzione molto più pulita è fornita nella risposta di @Nayana Adassuriya
lfn

109

Utilizza la console degli script (Gestisci Jenkins> Console degli script) e qualcosa di simile a questo script per eliminare in blocco la cronologia di compilazione di un lavoro https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

Quello script presume che tu voglia eliminare solo un intervallo di build. Per eliminare tutte le build per un determinato lavoro, usa questo (testato):

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

5
Grande!! sicuramente l'approccio migliore! :)
hek2mgl

grande trucco, ma che ne dici di ripristinare il contatore di build? qualsiasi script per questo?
Jes Chergui

1
@JesChergui ho aggiornato per mostrare la reimpostazione del numero di build. La console di script ti consente di controllare ogni sorta di cose, vedi javadoc.jenkins-ci.org (AbstractProject è un buon punto di partenza per giocare con i lavori)
rjohnston

Il mio Jenkins si è lamentato del fatto che non era autorizzato ad accedere a istanze o simili. Lo stavo eseguendo da una nuova pipeline che avevo impostato appositamente per questa cancellazione e ho incollato il codice sopra e ho cambiato il nome.
Will

@Will questo è dovuto al plug-in di sicurezza degli script che inserisce i lavori della pipeline in una sandbox super restrittiva. Controlla se hai una firma da approvare in "Gestisci Jenkins"> "Approvazioni script in corso". Un'altra opzione sarebbe quella di utilizzare la capacità del plugin Scriptler di eseguire script di amministrazione in un lavoro: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston

76

Questa risposta è per Jenkins

  1. Vai alla tua home page di JenkinsGestisci JenkinsScript Console

    Inserisci qui la descrizione dell'immagine

  2. Esegui il seguente script lì. Cambia copy_folderinyour project name

Codice:

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

Il mio post


4
Migliore risposta finora
Dmitry Zaytsev

1
Questa è la soluzione più veloce.
davegallant

Sì, ma per questo NON riavviare Jenkins o non sembra aggiornare il nextbuildnumber a 1 quando esegui una build dopo il riavvio. Il mio è iniziato a 39 anni, quindi ho dovuto rifarlo.
Will

In funzione da Jenkins 2,75
tutto il

22

Ecco un'altra opzione: elimina le build con cURL.

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

Quanto sopra elimina le build da # 1 a # 56 per il lavoro myJob.

Se l'autenticazione è abilitata sull'istanza Jenkins, è necessario fornire un nome utente e un token API in questo modo:

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

Il token API deve essere recuperato dalla /me/configurepagina in Jenkins. Basta fare clic sul pulsante "Mostra token API ..." per visualizzare sia il nome utente che il token API.

Modifica: potrebbe essere necessario sostituire doDeleteAllda doDeletenegli URL sopra per farlo funzionare, a seconda della configurazione o della versione di Jenkins utilizzata.


10

Ecco come eliminare TUTTE LE COSTRUZIONI PER TUTTI I LAVORI ... utilizzando lo scripting Jenkins.

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

9

È possibile modificare temporaneamente la configurazione del progetto per salvare solo l'ultima build, ricaricare la configurazione (che dovrebbe eliminare le vecchie build), quindi modificare nuovamente l'impostazione di configurazione sul valore desiderato.


Siamo spiacenti, non hanno utilizzato Hudson ormai da un paio di anni, ma vedere questo riguardo il ricaricamento della configurazione: stackoverflow.com/questions/5216552/...
the_mandrill

Essendo una persona che non dispone delle autorizzazioni di amministratore per Jenkins, questa era l'unica opzione che ha funzionato per me.
DrStrangepork

4

Se desideri cancellare la cronologia di compilazione di MultiBranchProject (ad es. Pipeline), vai alla home page di Jenkins → Gestisci Jenkins → Console di script ed esegui il seguente script:

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

4

Questa è la migliore opzione disponibile.

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

Questo codice eliminerà tutta la cronologia di compilazione del lavoro Jenkins.


2
Per chiunque si chieda come eseguire il codice sopra, vai a Jenkins Home> Gestisci Jenkins> Script Console. Ci sarà un campo di testo in cui puoi inserire questo script.
Pharaoh Tools

2

Utilizzo di Script Console.

Nel caso in cui i lavori siano raggruppati è possibile dargli un nome completo con barre in avanti:

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

o attraversare la gerarchia in questo modo:

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

2

L'eliminazione diretta dal file system non è sicura. È possibile eseguire lo script seguente per eliminare tutte le build da tutti i lavori (in modo ricorsivo).

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


1

Vai alla %HUDSON_HOME%\jobs\<projectname>rimozione buildsdir e rimuovere lastStable, lastSuccessfuli collegamenti, e rimuovere nextBuildNumberfile.

Dopo aver eseguito i passaggi precedenti, vai al link sottostante dall'interfaccia utente
Jenkins-> Gestisci Jenkins -> Ricarica configurazione da disco

Farà come ti serve


1

Se si utilizza il metodo Script Console, provare a utilizzare quanto segue invece per tenere in considerazione se i lavori vengono raggruppati in contenitori di cartelle.

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)

0

Navigare verso: %JENKINS_HOME%\jobs\jobName

Apri il file "nextBuildNumber" e cambia il numero. Dopo di che ricarica la configurazione di Jenkins. Nota: il file "nextBuildNumber" contiene il numero di build successivo che verrà utilizzato da Jenkins.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.