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ę


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


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.


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

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


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.


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

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


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

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.


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

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


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


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)

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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.