Jak zresetować numer kompilacji w Jenkins?

90

Używam Jenkins i Gradle do tworzenia mojego projektu Java.

Za każdym razem, gdy buduję projekt, na ekranie Jenkinsa pojawia się nowy numer kompilacji.

Poniżej znajdują się informacje o mojej kompilacji Jenkins:

Success > Console Output  #96   03-Jan-2014 15:35:08    
Success > Console Output  #95   03-Jan-2014 15:27:29     
Failed > Console Output  #94    03-Jan-2014 15:26:16     
Failed > Console Output  #93    03-Jan-2014 15:25:01     
Failed > Console Output  #92    03-Jan-2014 15:23:50     
Success > Console Output  #91   03-Jan-2014 12:42:32    
Success > Console Output  #90   03-Jan-2014 12:02:45

Chcę zresetować numer kompilacji Jenkins, na przykład:

Success > Console Output  #1    03-Jan-2014 12:02:45

Jak mogę zresetować numer kompilacji w Jenkins?

Sivakumar M
źródło

Odpowiedzi:

161

Można to łatwiej zrobić za pomocą świetnej konsoli skryptowej. Idź do http: // your-jenkins-server / script W oknie skryptu wpisz:

item = Jenkins.instance.getItemByFullName("your-job-name-here")
//THIS WILL REMOVE ALL BUILD HISTORY
item.builds.each() { build ->
  build.delete()
}
item.updateNextBuildNumber(1)
antweiss
źródło
6
lub via clijava -jar jenkins-cli.jar -s https://jenkins.example.com groovysh \ 'jenkins.instance.getItemByFullName("job-name").updateNextBuildNumber(1021)'
ykhrustalev
3
To zdecydowanie najlepsza odpowiedź. Nie potrzebujesz nawet pętli delete, jeśli chcesz tylko ustawić liczbę.
Nick
Z jakiegoś powodu echo "deleting all builds of ${jobName}" item = Jenkins.instance.getItemByFullName("${jobName}") for (build in item.builds){ build.delete(); } item.updateNextBuildNumber(1)
powoduje
Pytanie noobów ... skąd mam znać dokładną nazwę stanowiska.
Ammar Mujeeb
@AmmarMujeeb przejdź do pulpitu Jenkins, a zobaczysz tam nazwę stanowiska. Możesz również przejść do /var/lib/jenkins/jobs/systemu Linux, a nazwa katalogu zawiera dokładną nazwę pracy
rickrizzo
62

od tutaj

Biorąc pod uwagę, że Twoja praca w Hudson nazywa się FooBar,

  • zmień nazwę FooBar na FooBar-Copy
  • utwórz nowe zadanie o nazwie FooBar, używając opcji „Kopiuj istniejące zadanie” z FooBar-Copy
  • usuń FooBar-Copy
MokaT
źródło
35
  • Najpierw wyczyść obszar roboczy i pozbądź się poprzednich kompilacji.
    • Na serwerze przejdź do katalogu zadań np. „var / lib / jenkins / jobs / myJob” usuwa katalogi obszaru roboczego i kompilacji, a także wszelkie pliki odpytywania, pliki lastSuccessful, lastStable itp. Powinieneś mieć tylko config.xml i lastBuildNumber.
    • Zamknij jenkins, używając czegoś takiego jak service jenkins stop
    • Edytuj plik o nazwie nextBuildNumber , wstawiając 1 zamiast bieżącego numeru kompilacji
    • Uruchom jenkins ponownie, service jenkins start
    • Zaloguj się do Jenkinsa, przejdź do pracy i uruchom kompilację. Powinien rozpocząć budowę zadania nr 1
jasonoriordan
źródło
1
To było bardzo pomocne. Dzięki.
23

Jeśli chcesz ustawić następny numer kompilacji, jest do tego wtyczka „NextBuildNumber”. Ale to nie zadziała w twoim przypadku, ponieważ wymagany numer kompilacji, czyli 1, jest mniejszy niż bieżący numer kompilacji.

Tutaj musisz najpierw usunąć wszystkie poprzednie kompilacje. Możesz to zrobić, uruchamiając ten prosty skrypt Idź do -> Zarządzaj Jenkins -> Konsola skryptów

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

Teraz możesz ustawić następny numer kompilacji na 1 i uruchomić kompilację. Zacznie się od 1 . :) To takie proste.

Aktualizacja - Jenkins ma teraz wtyczkę Purge Job History, dzięki której można to zrobić w najprostszy sposób. Sprawdź stronę, aby uzyskać więcej informacji - https://wiki.jenkins.io/display/JENKINS/Purge+Job+History+Plugin

Amol Manthalkar
źródło
6

Aby bardziej ogólnie zresetować numer kompilacji do N(gdzie Nniekoniecznie jest 1):

  • Usuń wszystkie istniejące kompilacje, w których buildNumber >= N.
  • Edytuj Program Files (x86)/Jenkins/jobs/yourjob/nextBuildNumber. Ustaw liczbę, którą zawiera N.
  • W Jenkins wybierz Manage Jenkins -> Reload Configuration from Disk.
c32hedge
źródło
Upewnij się, że przeczytałeś tę usterkę przed wybraniem opcji „Wczytaj ponownie konfigurację z dysku” - Issues.jenkins-ci.org/browse/JENKINS-32984
user3181500
6

Rozwijając zaakceptowaną odpowiedź, oto jak to zrobić dla wszystkich projektów naraz:

Jenkins.instance.allItems.each() { 
  item -> item.builds.each() { 
    build -> build.delete()
  }
  item.updateNextBuildNumber(1)
}  
zb226
źródło
4

Jako rozszerzenie doskonałej odpowiedzi @ antweiss możemy pójść dalej ...

Nie ma potrzeby usuwania pełnej historii kompilacji, jeśli nie chcesz, możesz po prostu cofnąć czas do poprzedniego punktu:

resetNumberTarget = 14
item = Jenkins.instance.getItemByFullName("Project Name [from project Dashboard]")
//println(item)

item.builds.each() { build ->
  //println(build)
  //println(build.number)

  if(build.number >= resetNumberTarget)
  {
    //println("About to Delete '" + build + "'")    
    build.delete()  
  }
}

item.updateNextBuildNumber(resetNumberTarget)

Jeśli chcesz uruchomić atrapę, aby sprawdzić, co zamierza zrobić, bez faktycznie robi, po prostu zakomentuj build.delete()i item.updateNextBuildNumber(resetNumberTarget)linie odkomentowane różne polecenia drukowania.


Dokumentacja: Szczegóły tych obiektów były trudne do znalezienia, ale zidentyfikowałem następujące:

Brondahl
źródło
1

Możesz użyć nexBuildNumberwtyczki lub po prostu zmodyfikować nexBuildNumberplik, aby zresetować numer kompilacji. Oto kroki, które musisz wykonać:

  • Idź do .jenkins/Jobs/<YourJobName>/build/, zrób kopię zapasową tego folderu (jeśli potrzebujesz go w przyszłości) i usuń folder kompilacji .

Uwaga: po wyczyszczeniu starych kompilacji tracisz historię kompilacji i nie są one już dostępne na pulpicie nawigacyjnym Jenkins.

  • Załaduj ponownie konfigurację (Jenkins -> Manage Jenkins).
  • Ustaw następną wersję kompilacji na 1, używając wtyczki Next Build Number lub modyfikując nextBuildNumberplik w katalogu yourjob.
Anni S
źródło
0

Znalazłem na to łatwy sposób.

  1. Zlikwiduj swoje miejsce pracy.
  2. Przejdź do każdej kompilacji zapisanej na Jenkins i usuń ją.
  3. Ustaw numer kompilacji na 1, a następnie zbuduj.

Jenkins używa poprzedniej kompilacji do określenia następnego numeru kompilacji, jeśli wprowadzony numer kompilacji jest niższy niż poprzedni numer kompilacji, Jenkins automatycznie zwiększy numer kompilacji do wyższego niż poprzednia kompilacja. Więc tutaj po prostu

Mai Quân Nguyễn
źródło
-1

Aby zresetować numery kompilacji wszystkich zadań:

Jenkins.instance.getAllItems(AbstractProject.class).each {
    item = Jenkins.instance.getItemByFullName(it.fullName)
    //THIS WILL REMOVE ALL BUILD HISTORY
    item.builds.each() { build ->
        build.delete()
    }
    item.updateNextBuildNumber(1)
}
GRK
źródło