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
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
Antworten:
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.
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()
Diese Antwort ist für Jenkins
Gehen Sie zu Ihrer Jenkins-Homepage → Jenkins verwalten → Skriptkonsole
Führen Sie dort das folgende Skript aus. Wechseln Sie copy_folder
zuyour project name
Code:
def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
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/configure
Seite 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 doDeleteAll
durch doDelete
in der URLs über diese Arbeit zu machen, abhängig von der Konfiguration oder der Version von Jenkins verwendet.
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.
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.
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()
}
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()
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
Gehen Sie zum %HUDSON_HOME%\jobs\<projectname>
Entfernungsverzeichnis, builds
entfernen Sie die lastStable, lastSuccessful
Links 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
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)
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)
}
}
}