Jak wyczyścić historię kompilacji Jenkins / Hudson?

87

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ę

myusuf3
źródło
Czy możesz rozwinąć temat „totalnie zawalony”? Być może ktoś doświadczył wcześniej podobnego problemu i może wskazać, jak go naprawić.
Rob Hruska
przepraszam za dwuznaczność. naprawiony.
myusuf3
Jest tu nowsze i nieco bardziej szczegółowe pytanie: stackoverflow.com/questions/13052390/…
Erwan Legrand
Ten post może pomóc codeketchup.blogspot.sg/2016/05/…
Nayana Adassuriya
Oto najlepsza odpowiedź, jaką znalazłem: superuser.com/questions/1418885/…
Asma Zubair

Odpowiedzi:

51

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.

William Leara
źródło
Usunąłem wszystkie pliki i foldery w „/ var / lib / jenkins / jobs / Demo”, ale kiedy przechodzę do interfejsu użytkownika Jenkinsa w tym JOB, nadal widzę historię kompilacji.
paul
1
Po "małpowaniu" struktury katalogów, po prostu przejdź do "Zarządzaj Jenkins" i wybierz "Załaduj ponownie konfigurację z dysku"
DanBaker
1
@paul, po usunięciu tam folderów konieczne jest ponowne uruchomienie Jenkinsa, aby historia kompilacji zniknęła z interfejsu użytkownika. Przy okazji, jeśli używamy Jenkinsa, ścieżka zwykle znajduje się w / var / jenkins_home / jobs / {nazwa projektu} / builds /
Bright,
Myślę, że to rozwiązanie wymaga wielu kroków po stronie systemu, znacznie czystsze rozwiązanie zawiera odpowiedź @Nayana Adassuriya
lfn
109

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()
rjohnston
źródło
5
Świetny!! zdecydowanie najlepsze podejście! :)
hek2mgl
świetna sztuczka, ale co powiesz na zresetowanie licznika kompilacji? jakieś skrypty do tego?
Jes Chergui
1
@JesChergui Zaktualizowałem, aby pokazać resetowanie numeru kompilacji. Konsola skryptów pozwala kontrolować różne rzeczy, patrz javadoc.jenkins-ci.org (AbstractProject to dobre miejsce do rozpoczęcia zabawy z pracą)
rjohnston
Mój Jenkins narzekał, że nie pozwolono mu uzyskać dostępu do instancji lub tym podobnych. Uruchomiłem go z nowego potoku, który skonfigurowałem specjalnie dla tego usunięcia, i wkleiłem powyższy kod i zmieniłem nazwę.
Will
@Czy jest to spowodowane wtyczką bezpieczeństwa skryptu, która umieszcza zadania potoku w bardzo restrykcyjnej piaskownicy. Sprawdź, czy masz podpis do zatwierdzenia w sekcji „Zarządzaj Jenkins”> „Zatwierdzanie skryptów w trakcie”. Inną opcją byłoby użycie możliwości wtyczki Scriptler do uruchamiania skryptów administratora w zadaniu: wiki.jenkins-ci.org/display/JENKINS/Scriptler+Plugin
rjohnston
76

Ta odpowiedź jest dla Jenkinsa

  1. Przejdź do strony głównej Jenkins → Manage JenkinsScript Console

    Tutaj wprowadź opis obrazu

  2. Uruchom tam następujący skrypt. Zmień copy_foldernayour project name

Kod:

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

Mój post

Nayana Adassuriya
źródło
4
Najlepsza jak dotąd odpowiedź
Dmitry Zaytsev
1
To najszybsze rozwiązanie.
davegallant
Tak, ale w tym przypadku NIE restartuj Jenkinsa lub nie wydaje się, aby aktualizować następny numer kompilacji do 1, gdy wykonujesz kompilację po ponownym uruchomieniu. Mój zaczął się w wieku 39 lat, więc musiałem to powtórzyć.
Will
Działa od Jenkinsa 2.75
ѺȐeallү
22

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 doDeleteAllprzez doDeletew powyższych adresach URL, aby to zadziałało, w zależności od konfiguracji lub używanej wersji Jenkinsa.

Erwan Legrand
źródło
10

Oto jak usunąć WSZYSTKIE BUDYNKI DLA WSZYSTKICH ZADAŃ ...... za pomocą skryptów Jenkins.

def jobs = Jenkins.instance.projects.collect { it } 
jobs.each { job -> job.getBuilds().each { it.delete() }} 
ort11
źródło
9

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ść.

the_mandrill
źródło
Przepraszamy, nie korzystałem z Hudsona od kilku lat, ale zobacz, jak przeładować konfigurację: stackoverflow.com/questions/5216552/…
the_mandrill
Jako ktoś, kto nie ma uprawnień administratora do Jenkinsa, była to jedyna opcja, która działała dla mnie.
Dr Strangepork
4

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()
}
Marin Ivanov
źródło
4

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.

Rahul khanvani
źródło
2
Dla każdego, kto zastanawia się, jak uruchomić powyższy kod, przejdź do Strona główna Jenkinsa> Zarządzaj Jenkins> Konsola skryptów. Będzie tam pole tekstowe, w które możesz wprowadzić ten skrypt.
Pharaoh Tools
2

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()
ATrubka
źródło
2

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)
    }
  }
}
Aytunc Beken
źródło
1

Przejdź do katalogu %HUDSON_HOME%\jobs\<projectname>usuwania buildsi usuwania lastStable, lastSuccessfullinków oraz usuwania nextBuildNumberpliku.

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

Manish Agrawal
źródło
1

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)
RampantBadger
źródło
0

Nawigować do: %JENKINS_HOME%\jobs\jobName

Otwórz plik „nextBuildNumber” i zmień numer. Następnie przeładuj konfigurację Jenkinsa. Uwaga: plik „nextBuildNumber” zawiera numer następnej kompilacji, który będzie używany przez Jenkins.

Nitish
źródło