Jak napisać Pipeline, aby odrzucić stare kompilacje?


88

Groovy generator składni NIE działa dla kroku próbki properties: Set Job Properties. Wybrałem Discard old buildsi wszedłem 10w Max # of builds to keeppole, a potem Generate Groovyi nic się nie pojawia.

Wersja Jenkins: 2.7.0


U mnie działa dobrze z Jenkinsem 2.32.3
Michel Jung

Odpowiedzi:


182

Jeśli chodzi o składnię deklaratywną, możesz użyć optionsbloku:

pipeline {
  options {
    buildDiscarder(logRotator(numToKeepStr: '30', artifactNumToKeepStr: '30'))
  }
  ...
}

Parametry dla logRotator(z kodu źródłowego ):

  • daysToKeepStr: historia jest zachowywana tylko do dziś.
  • numToKeepStr: przechowywana jest tylko ta liczba dzienników kompilacji.
  • artifactDaysToKeepStr: artefakty są przechowywane tylko do dziś.
  • artifactNumToKeepStr: tylko ta liczba kompilacji ma swoje artefakty.

Więcej informacji można znaleźć w bazie wiedzy Cloudbees oraz w dokumentacji optionsbloku .


1
Czy ma to dotyczyć poszczególnych gałęzi czy rurociągów? Wydaje się, że nie działa w moim środowisku.
nroose

Czy powszechną praktyką jest odwoływanie się do kodu źródłowego w celu uzyskania parametrów dla różnych opcji? Dokumenty zawierają tylko odniesienia numToKeepStri na szczęście znalazłem tutaj twoją odpowiedź, aby znaleźć inne parametry. Trochę bałaganu, w jaki sposób dokumentują rzeczy. Dzięki, chociaż ratujesz życie.
emmdee

Czy ktoś może pokazać kontekst umieszczenia tej instrukcji buildDiscarder options wewnątrz bloku etapu (wielopotokowego)? Próbowałem, ale moja kompilacja się nie udała.
Christopher D. Emerson

54

Możesz użyć propertiesmetody, która zagnieżdżona w elemencie BuildDiscarderPropertyostatecznie ma klucz, który chcesz ustawić. Nadal nie mam solidnego sposobu, aby sprawdzić poprawną składnię każdego klucza. Po wielu zgadywaniach i sprawdzaniu:

properties([[$class: 'BuildDiscarderProperty', strategy: [$class: 'LogRotator', artifactDaysToKeepStr: '', artifactNumToKeepStr: '', daysToKeepStr: '', numToKeepStr: '10']]]);

Zauważ, że ten fragment dotyczy składni skryptowej.


1
To działa, ale dlaczego jest to zagnieżdżone na dwóch mapach i jak to rozwiązałeś?
Rupert Madden-Abbott

Patrzę na twoją odpowiedź i nie rozumiem, co ona robi. Czy zachowuje ostatnie 10 kompilacji czy ostatnie 10 dni? Czy mogę zachować kompilacje z ostatnich 10 tygodni lub 3 miesięcy? Proszę wyjaśnić znaczenie każdego *Strpola w strategy. Naucz człowieka łowić ryby ... itd.
Abhijit Sarkar

1
@AbhijitSarkar wszystkie opcje są opisane w javadoc tej klasy: github.com/jenkinsci/jenkins/blob/master/core/src/main/java/ ...
apottere

@apottere 1. Link nie znajduje się w odpowiedzi. 2. Gdybym miał zajrzeć do Javadoc, nie potrzebuję odpowiedzi. Odpowiedź powinna być jak najbardziej kompletna. Linki zewnętrzne są w porządku, o ile odpowiednia część jest wklejana i wyjaśniana tutaj.
Abhijit Sarkar

1
@AbhijitSarkar Nie jestem operatorem, właśnie informowałem Cię, gdzie możesz znaleźć odpowiedź.
apottere

18

W przypadku rurociągów opartych na skryptach użyj:

properties([
    buildDiscarder(logRotator(daysToKeepStr: '3', numToKeepStr: '3')),
])

17

Jenkins ma wbudowane strony generatora składni.

Pipeline-Syntax: Snippet Generator
<your jenkins url> / pipeline-syntax /

Pipeline-Syntax: Directive Generator
<your jenkins url> / Directive-generator /

Discard old builds przykład z Generator dyrektyw Odrzuć przykład starych kompilacji


8
  1. Aby odrzucić kompilację po określonej liczbie dni :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. Aby odrzucić kompilację po określonej liczbie kompilacji :

     options {
         buildDiscarder(logRotator(numToKeepStr: '7'))
     }
    

Właśnie dodałem liczbę dni na zachowanie kompilacji, oprócz całkowitej liczby kompilacji do zachowania :)
Jerald Sabu M

Powinieneś używać komentarzy do tego typu rzeczy. Odpowiednio zaktualizowałem moją odpowiedź.
Vadim Kotov

Nie mam reputacji osoby dodającej komentarz.
Jerald Sabu M

Teraz masz. Ale ogólnie, jeśli nie masz reputacji, nie powinieneś odpowiadać zamiast komentować .
Vadim Kotov

6

Odpowiedź Vadima nie zadziałała dla mnie z nieznanego powodu. Uprościłem to w następujący sposób i działa teraz:

options {
    buildDiscarder(logRotator(numToKeepStr: '3'))
}

6

W przypadku potoku deklaratywnego możesz dodać to:

options {

    buildDiscarder(
        logRotator(
            // number of build logs to keep
            numToKeepStr:'5',
            // history to keep in days
            daysToKeepStr: '15',
            // artifacts are kept for days
            artifactDaysToKeepStr: '15',
            // number of builds have their artifacts kept
            artifactNumToKeepStr: '5'
        )
    )
}

Dzięki, ale gdzie znalazłeś informacje? Kody?
silencej

1
Zwykle robię to stąd jenkins-base-url:port if any/pipeline-syntax/. Tutaj jest także inny javadoc.jenkins.io/hudson/tasks/LogRotator.html . Zaglądam też czasami do kodu źródłowego wtyczki na githubie, aby dokładnie zrozumieć. @silencej
bhordupur

2

Jeśli chcesz skonfigurować przechowywanie kompilacji na poziomie zadań potoku wielobranżowego (w porównaniu do wszystkich indywidualnych Jenkinsfile), jest to również możliwe: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel # comment-325601

Oprócz tego BuildRetentionBranchPropertymożesz skonfigurować dowolne inne *BranchPropertytutaj: https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

Mogą jednak nie być wyświetlane w GUI, przynajmniej dla mnie z Jenkinsem 2.73.2. Ale nadal możesz używać JobDSL lub modyfikować config.xmlbezpośrednio (nie powiedziałem tego ;-))


Czy mówisz o wtyczce Job DSL ? To nie to samo, co Jenkins Pipelines. Chodzi mi o to, że nie wszyscy, którzy używają Pipelines, używają Job DSL Plugin.
Vadim Kotov

@VadimKotov nie, nie bardzo. Miałem problem z konfiguracją przechowywania kompilacji w Jenkins Pipelines. Nie chciałem tego robić w pliku Jenkinsfile, ale zamiast tego na poziomie stanowiska. Użyłem tutaj Job DSL, ale tak naprawdę nie ma to znaczenia, ponieważ jest to tylko sposób zautomatyzowania konfiguracji zadań kompilacji. Wygląda jednak na to, że w GUI jest błąd, który uniemożliwia pojawienie się powyższych ustawień podczas ręcznej konfiguracji zadania kompilacji. (JobDSL nie robi nic, czego inaczej nie można by zrobić przez GUI)
Torben Knerr,

2

Jeśli potrzebujesz sposobu programistycznego (tj. Robienie tego z funkcji, zamiast używać options{}składni potoku):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
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.