Wie lösche ich meine Jenkins / Hudson-Build-Historie?

87

Ich habe kürzlich die Konfiguration eines meiner Hudson-Builds aktualisiert. Der Build-Verlauf ist nicht synchron. Gibt es eine Möglichkeit, meinen Build-Verlauf zu löschen?

Bitte und Danke

myusuf3
quelle
Können Sie näher auf "total durcheinander" eingehen? Vielleicht hat jemand schon einmal ein ähnliches Problem erlebt und kann Sie anweisen, wie Sie es beheben können.
Rob Hruska
Entschuldigung für die Mehrdeutigkeit. Fest.
Myusuf3
Es gibt eine neuere und etwas spezifischere Frage hier: stackoverflow.com/questions/13052390/…
Erwan Legrand
Dieser Beitrag kann Codeketchup.blogspot.sg/2016/05/…
Nayana Adassuriya
Hier ist die beste Antwort, die ich gefunden habe: superuser.com/questions/1418885/…
Asma Zubair

Antworten:

51

Wenn Sie auf Hudson verwalten / Konfiguration von Festplatte neu laden klicken, lädt Hudson alle Build-Verlaufsdaten neu.

Wenn die Daten auf der Festplatte durcheinander sind, müssen Sie in Ihr Verzeichnis% HUDSON_HOME% \ jobs \ < Projektname > wechseln und die Build-Verzeichnisse so wiederherstellen, wie sie sein sollen. Laden Sie dann die Konfigurationsdaten neu.

Wenn Sie nur fragen, wie der gesamte Build-Verlauf entfernt werden soll, können Sie die Builds nacheinander über die Benutzeroberfläche löschen, wenn nur wenige vorhanden sind, oder in das Verzeichnis% HUDSON_HOME% \ jobs \ < Projektname > wechseln und alle löschen Unterverzeichnisse dort - sie entsprechen den Builds. Starten Sie anschließend den Dienst neu, damit die Änderungen wirksam werden.

William Leara
quelle
Ich habe alle Dateien und Ordner in "/ var / lib / jenkins / jobs / Demo" gelöscht, aber wenn ich in diesem Job zur Jenkins-Benutzeroberfläche gehe, sehe ich immer noch den Build-Verlauf.
Paul
1
Nachdem Sie "Affe" mit der Verzeichnisstruktur haben, gehen Sie einfach zu "Jenkins verwalten" und wählen Sie "Konfiguration von Festplatte neu
laden
1
@paul, nach dem Löschen der Ordner dort ist ein Neustart von Jenkins erforderlich, um zu sehen, dass der Build-Verlauf von der Benutzeroberfläche verschwunden ist. Übrigens, wenn wir Jenkins verwenden, befindet sich der Pfad normalerweise unter / var / jenkins_home / jobs / {Projektname} / Builds /
Bright
Ich denke, diese Lösung erfordert zu viele Schritte auf der Systemseite, eine viel sauberere Lösung ist in der Antwort von @Nayana Adassuriya enthalten
lfn
105

Verwenden Sie die Skriptkonsole (Jenkins verwalten> Skriptkonsole) und so etwas wie dieses Skript, um den Build-Verlauf eines Jobs in großen Mengen zu löschen. Https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy

In diesem Skript wird davon ausgegangen, dass Sie nur eine Reihe von Builds löschen möchten. Verwenden Sie Folgendes (getestet), um alle Builds für einen bestimmten Job zu löschen:

// 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
quelle
5
Toll!! definitiv der beste Ansatz! :)
hek2mgl
toller Trick, aber wie wäre es mit dem Zurücksetzen des Build-Zählers? Irgendwelche Skripte dafür?
Jes Chergui
1
@JesChergui Ich habe aktualisiert, um das Zurücksetzen der Build-Nummer anzuzeigen. Mit der Skriptkonsole können Sie alle möglichen Dinge steuern, siehe javadoc.jenkins-ci.org (AbstractProject ist ein guter Ausgangspunkt, um mit Jobs zu spielen)
rjohnston
Meine Jenkins beschwerten sich, dass es nicht erlaubt sei, auf Instanzen oder ähnliches zuzugreifen. Ich habe es von einer neuen Pipeline ausgeführt, die ich speziell für diese Löschung eingerichtet hatte, und ich habe den obigen Code eingefügt und den Namen geändert.
Will
@Will dies liegt an dem Skript-Sicherheits-Plugin, das Pipeline-Jobs in einer sehr restriktiven Sandbox ablegt. Überprüfen Sie unter "Jenkins verwalten"> "In-Process-Skriptgenehmigungen", ob Sie eine zu genehmigende Signatur haben. Eine andere Möglichkeit wäre, die Fähigkeit des Scriptler-Plugins zu verwenden, um Administrationsskripte in einem Job auszuführen
rjohnston
75

Diese Antwort ist für Jenkins

  1. Gehen Sie zu Ihrer Jenkins-Homepage → Jenkins verwaltenSkriptkonsole

    Geben Sie hier die Bildbeschreibung ein

  2. Führen Sie dort das folgende Skript aus. Wechseln Sie copy_folderzuyour project name

Code:

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

Mein Post

Nayana Adassuriya
quelle
4
Beste Antwort bisher
Dmitry Zaytsev
1
Dies ist die schnellste Lösung.
Davegallant
Ja, aber für diesen Fall starten Sie Jenkins NICHT neu, da sonst die nächste Build-Nummer nicht auf 1 aktualisiert wird, wenn Sie nach dem Neustart einen Build ausführen. Meins begann mit 39, also musste ich das wiederholen.
Will
Arbeiten ab Jenkins 2.75
Donnerstag,
22

Hier ist eine weitere Option: Löschen Sie die Builds mit cURL.

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

Das obige löscht Build # 1 bis # 56 für Job myJob.

Wenn die Authentifizierung für die Jenkins-Instanz aktiviert ist, müssen ein Benutzername und ein API-Token wie folgt bereitgestellt werden:

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

Das API-Token muss von der /me/configureSeite in Jenkins abgerufen werden . Klicken Sie einfach auf die Schaltfläche "API-Token anzeigen ...", um sowohl den Benutzernamen als auch das API-Token anzuzeigen.

Edit: man könnte ersetzen doDeleteAlldurch doDeletein der URLs über diese Arbeit zu machen, abhängig von der Konfiguration oder der Version von Jenkins verwendet.

Erwan Legrand
quelle
10

So löschen Sie ALLE BUILDS FÜR ALLE JOBS ...... mithilfe des Jenkins-Skripts.

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

Sie können die Projektkonfiguration vorübergehend ändern, um nur den letzten Build zu speichern, die Konfiguration neu laden (wodurch die alten Builds in den Papierkorb verschoben werden) und dann die Konfigurationseinstellung erneut auf den gewünschten Wert ändern.

the_mandrill
quelle
Entschuldigung, ich habe Hudson seit ein paar Jahren nicht mehr verwendet, aber sehen Sie sich dies über das Neuladen der Konfiguration an: stackoverflow.com/questions/5216552/…
the_mandrill
Als jemand, der keine Administratorrechte für Jenkins hat, war dies die einzige Option, die für mich funktioniert hat.
DrStrangepork
4

Dies ist die beste verfügbare Option.

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

Dieser Code löscht den gesamten Jenkins Job Build-Verlauf.

Rahul Khanvani
quelle
1
Wenn Sie sich fragen, wie Sie den obigen Code ausführen sollen, gehen Sie zu Jenkins Home> Jenkins verwalten> Skriptkonsole. Dort befindet sich ein Textfeld, in das Sie dieses Skript eingeben können.
Pharao Tools
3

Wenn Sie den Build-Verlauf von MultiBranchProject (z. B. Pipeline) löschen möchten, rufen Sie Ihre Jenkins-Homepage → Jenkins verwalten → Skriptkonsole auf und führen Sie das folgende Skript aus:

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
quelle
2

Verwenden der Skriptkonsole.

Wenn die Jobs gruppiert sind, können Sie ihnen entweder einen vollständigen Namen mit Schrägstrichen geben:

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

oder durchqueren Sie die Hierarchie wie folgt:

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

Eine weitere einfache Möglichkeit, Builds zu bereinigen, besteht darin, das Discard Old Plugin am Ende Ihrer Jobs hinzuzufügen. Legen Sie eine maximale Anzahl von Builds fest, die gespeichert werden sollen, und führen Sie den Job dann erneut aus:

https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin

Rutger Huijsmans
quelle
1

Gehen Sie zum %HUDSON_HOME%\jobs\<projectname>Entfernungsverzeichnis, buildsentfernen Sie die lastStable, lastSuccessfulLinks und entfernen Sie sienextBuildNumber Datei.

Nachdem Sie die obigen Schritte ausgeführt haben, gehen Sie zum folgenden Link von UI
Jenkins-> Jenkins verwalten -> Konfiguration von Festplatte neu laden

Es wird tun, was Sie brauchen

Manish Agrawal
quelle
1

Wenn Sie die Script Console-Methode verwenden, versuchen Sie stattdessen Folgendes, um zu berücksichtigen, ob Jobs in Ordnercontainern gruppiert werden.

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

oder

def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)
RampantBadger
quelle
1

Das direkte Löschen aus dem Dateisystem ist nicht sicher. Sie können das folgende Skript ausführen, um alle Builds (rekursiv) aus allen Jobs zu löschen.

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
quelle
0

Navigieren Sie zu: %JENKINS_HOME%\jobs\jobName

Öffnen Sie die Datei "nextBuildNumber" und ändern Sie die Nummer. Laden Sie danach die Jenkins-Konfiguration neu. Hinweis: Die Datei "nextBuildNumber" enthält die nächste Build-Nr., Die von Jenkins verwendet wird.

Nitish
quelle