Niedawno zaktualizowałem konfigurację jednej z moich kompilacji hudson. Historia kompilacji nie jest zsynchronizowana. Czy istnieje sposób na wyczyszczenie historii kompilacji?
Proszę i dziękuję
Niedawno zaktualizowałem konfigurację jednej z moich kompilacji hudson. Historia kompilacji nie jest zsynchronizowana. Czy istnieje sposób na wyczyszczenie historii kompilacji?
Proszę i dziękuję
Odpowiedzi:
Jeśli klikniesz Zarządzaj Hudson / Odśwież konfigurację z dysku, Hudson ponownie załaduje wszystkie dane historii kompilacji.
Jeśli dane na dysku są pomieszane, musisz przejść do katalogu% HUDSON_HOME% \ jobs \ < projectname > i przywrócić katalogi kompilacji tak, jak powinny. Następnie przeładuj dane konfiguracyjne.
Jeśli po prostu pytasz, jak usunąć całą historię kompilacji, możesz po prostu usunąć kompilacje pojedynczo za pośrednictwem interfejsu użytkownika, jeśli jest ich tylko kilka, lub przejść do katalogu% HUDSON_HOME% \ jobs \ < projectname > i usunąć wszystkie tam podkatalogi - odpowiadają one kompilacjom. Następnie uruchom ponownie usługę, aby zmiany odniosły skutek.
Użyj konsoli skryptów (Manage Jenkins> Script Console) i czegoś podobnego do tego skryptu, aby zbiorczo usunąć historię kompilacji zadania https://github.com/jenkinsci/jenkins-scripts/blob/master/scriptler/bulkDeleteBuilds.groovy
Ten skrypt zakłada, że chcesz usunąć tylko zakres kompilacji. Aby usunąć wszystkie kompilacje dla danego zadania, użyj tego (przetestowane):
// 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()
Ta odpowiedź jest dla Jenkinsa
Przejdź do strony głównej Jenkins → Manage Jenkins → Script Console
Uruchom tam następujący skrypt. Zmień copy_folder
nayour project name
Kod:
def jobName = "copy_folder"
def job = Jenkins.instance.getItem(jobName)
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
Oto inna opcja: usuń kompilacje za pomocą cURL.
$ curl -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll
Powyższe usuwa kompilacje od 1 do 56 dla pracy myJob.
Jeśli uwierzytelnianie jest włączone w instancji Jenkins, należy podać nazwę użytkownika i token API w następujący sposób:
$ curl -u userName:apiToken -X POST http://jenkins-host.tld:8080/jenkins/job/myJob/[1-56]/doDeleteAll
Token API należy pobrać z pliku /me/configure
strony w Jenkins. Wystarczy kliknąć przycisk „Pokaż token API ...”, aby wyświetlić zarówno nazwę użytkownika, jak i token API.
Edycja: może być konieczne zastąpienie doDeleteAll
przez doDelete
w powyższych adresach URL, aby to zadziałało, w zależności od konfiguracji lub używanej wersji Jenkinsa.
Możesz tymczasowo zmodyfikować konfigurację projektu, aby zapisać tylko ostatnią 1 kompilację, ponownie załadować konfigurację (co powinno usunąć stare kompilacje), a następnie ponownie zmienić ustawienie konfiguracji na żądaną wartość.
Jeśli chcesz wyczyścić historię kompilacji MultiBranchProject (np. Pipeline), przejdź do strony głównej Jenkins → Manage Jenkins → Script Console i uruchom następujący skrypt:
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()
}
Ta jest najlepszą dostępną opcją.
Jenkins.instance.getAllItems(AbstractProject.class).each {it -> Jenkins.instance.getItemByFullName(it.fullName).builds.findAll { it.number > 0 }.each { it.delete() } }
Ten kod usunie całą historię kompilacji zadań Jenkins.
Korzystanie z konsoli skryptów.
Jeśli zadania są zgrupowane, można nadać im pełną nazwę z ukośnikami:
getItemByFullName("folder_name/job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
lub przemierzaj hierarchię w ten sposób:
def folder = Jenkins.instance.getItem("folder_name")
def job = folder.getItem("job_name")
job.getBuilds().each { it.delete() }
job.nextBuildNumber = 1
job.save()
Usuwanie bezpośrednio z systemu plików nie jest bezpieczne. Możesz uruchomić poniższy skrypt, aby usunąć wszystkie kompilacje ze wszystkich zadań (rekurencyjnie).
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)
}
}
}
Innym prostym sposobem na wyczyszczenie kompilacji jest dodanie wtyczki Discard Old Plugin na końcu zadań. Ustaw maksymalną liczbę kompilacji do zapisania, a następnie ponownie uruchom zadanie:
https://wiki.jenkins-ci.org/display/JENKINS/Discard+Old+Build+plugin
Przejdź do katalogu %HUDSON_HOME%\jobs\<projectname>
usuwania builds
i usuwania lastStable, lastSuccessful
linków oraz usuwania nextBuildNumber
pliku.
Po wykonaniu powyższych czynności przejdź do poniższego linku z interfejsu użytkownika
Jenkins-> Zarządzaj Jenkins -> Załaduj ponownie konfigurację z dysku
Zrobi to, czego potrzebujesz
Jeśli używasz metody konsoli skryptów, spróbuj zamiast tego użyć poniższych, aby wziąć pod uwagę, czy zadania są grupowane w kontenerach folderów.
def jobName = "Your Job Name"
def job = Jenkins.instance.getItemByFullName(jobName)
lub
def jobName = "My Folder/Your Job Name
def job = Jenkins.instance.getItemByFullName(jobName)