Wie schreibe ich Pipeline, um alte Builds zu verwerfen?

87

Der groovige Syntaxgenerator funktioniert NICHT für den Sample-Schritt properties: Set Job Properties. Ich habe ausgewählt Discard old buildsund dann 10in das Max # of builds to keepFeld eingegeben und dann Generate Groovyund nichts wird angezeigt.

Jenkins Version: 2.7

Tarabyte
quelle
Funktioniert gut für mich mit Jenkins 2.32.3
Michel Jung

Antworten:

181

Für die deklarative Syntax können Sie den optionsBlock verwenden:

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

Parameter für logRotator(aus dem Quellcode ):

  • daysToKeepStr: Geschichte wird nur bis heute gehalten.
  • numToKeepStr: Nur diese Anzahl von Build-Protokollen wird gespeichert.
  • artifactDaysToKeepStr: Artefakte werden nur bis heute aufbewahrt.
  • artifactNumToKeepStr: Nur bei dieser Anzahl von Builds bleiben die Artefakte erhalten.

Weitere Informationen finden Sie in der Cloudbees-Wissensdatenbank und in den Dokumenten für den optionsBlock .

Vadim Kotov
quelle
1
Soll dies pro Zweig oder pro Pipeline sein? In meiner Umgebung scheint es nicht zu funktionieren.
Nroose
Ist es allgemein üblich, auf den Quellcode zu verweisen, um die Parameter für verschiedene Optionen zu erhalten? Die Dokumente verweisen nur numToKeepStrund zum Glück habe ich Ihre Antwort hier gefunden, um die anderen Parameter zu finden. Eine Art Chaos, wie sie Dinge dokumentieren. Danke, obwohl du ein Lebensretter bist.
emmdee
Kann jemand den Kontext für das Einfügen dieser buildDiscarder-Optionsanweisung in einen (Multi-Pipeline-) Stage-Block anzeigen? Ich habe es versucht, aber mein Build schlägt fehl.
Christopher D. Emerson
53

Sie können die propertiesMethode verwenden, die BuildDiscarderPropertyim Schlüssel verschachtelt ist und den Schlüssel enthält, den Sie festlegen möchten. Ich habe immer noch keine solide Möglichkeit, die korrekte Syntax der einzelnen Tasten nachzuschlagen. Nach langem Erraten und Überprüfen:

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

Beachten Sie, dass dieses Snippet für die Skriptsyntax vorgesehen ist.

Tarabyte
quelle
1
Das funktioniert, aber warum ist das in zwei Karten verschachtelt und wie haben Sie das herausgefunden?
Rupert Madden-Abbott
Ich schaue auf Ihre Antwort und verstehe nicht, was sie bewirkt. Behält es die letzten 10 Builds oder die letzten 10 Tage? Kann ich die Builds der letzten 10 Wochen oder 3 Monate behalten? Bitte erläutern Sie die Bedeutung der einzelnen *StrFelder in strategy. Bringen Sie einem Mann das Fischen bei ... usw.
Abhijit Sarkar
1
@AbhijitSarkar Alle Optionen sind im
Javadoc
@apottere 1. Der Link ist nicht in der Antwort. 2. Wenn ich mich mit Javadoc befassen würde, wäre keine Antwort erforderlich. Die Antwort sollte so vollständig wie möglich sein. Externe Links sind in Ordnung, solange der relevante Teil kopiert und hier erklärt wird.
Abhijit Sarkar
1
@AbhijitSarkar Ich bin nicht der OP, ich habe dich nur wissen lassen, wo du die Antwort finden kannst.
Apottere
17

Verwenden Sie für Scripted Pipelines:

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

Jenkins verfügt über integrierte Syntaxgeneratorseiten.

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

Pipeline-Syntax: Direktivengenerator
<your jenkins url> / Direktivengenerator /

Discard old builds Beispiel aus dem Direktivengenerator Beispiel für alte Builds verwerfen

Chad Gilman
quelle
8
  1. So verwerfen Sie den Build nach einer bestimmten Anzahl von Tagen :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. So verwerfen Sie Builds nach einer bestimmten Anzahl von Builds :

     options {
         buildDiscarder(logRotator(numToKeepStr: '7'))
     }
    
Jerald Sabu M.
quelle
Nur die Anzahl der Tage hinzugefügt, um die Builds zu behalten, abgesehen von der Gesamtzahl der Builds, die aufbewahrt werden sollen :)
Jerald Sabu M
Sie sollten Kommentare für solche Dinge verwenden. Ich habe meine Antwort entsprechend aktualisiert.
Vadim Kotov
Ich habe keinen Ruf, Kommentare hinzuzufügen.
Jerald Sabu M
Jetzt hast du. Wenn Sie jedoch keinen guten Ruf haben, sollten Sie im Allgemeinen nicht antworten, anstatt zu kommentieren .
Vadim Kotov
6

Vadims Antwort funktionierte aus einem unbekannten Grund nicht für mich. Ich habe es wie folgt vereinfacht und es funktioniert jetzt:

options {
    buildDiscarder(logRotator(numToKeepStr: '3'))
}
Firdaus
quelle
6

Für eine deklarative Pipeline können Sie Folgendes hinzufügen:

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'
        )
    )
}
Bhordupur
quelle
Danke, aber wo hast du die Infos gefunden? Codes?
Stille
1
Normalerweise mache ich das von hier aus jenkins-base-url:port if any/pipeline-syntax/. Hier ist auch eine andere javadoc.jenkins.io/hudson/tasks/LogRotator.html . Ich schaue auch in manchmal Github-Quellcode des Plugins, um Details zu verstehen. @ Silencej
Bhordupur
2

Wenn Sie die Build-Aufbewahrung auf der Jobebene der Multibranch-Pipeline konfigurieren möchten (im Vergleich zu allen einzelnen Jenkinsfile), ist dies ebenfalls möglich: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel # comment-325601

Zusätzlich BuildRetentionBranchPropertykönnen Sie hier alle anderen *BranchPropertys konfigurieren : https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

Sie werden jedoch möglicherweise nicht in der GUI angezeigt, zumindest für mich mit Jenkins 2.73.2. Sie können aber trotzdem JobDSL verwenden oder config.xmldirekt ändern (das habe ich nicht gesagt ;-))

Torben Knerr
quelle
Sprechen Sie über Job DSL Plugin ? Es ist nicht dasselbe wie Jenkins Pipelines. Ich meine, nicht jeder, der Pipelines verwendet, verwendet das Job DSL Plugin.
Vadim Kotov
@VadimKotov nein, nicht wirklich. Ich hatte das Problem, die Build-Aufbewahrung in Jenkins Pipelines zu konfigurieren. Ich wollte das nicht in der Jenkins-Datei machen, sondern auf Jobebene. Ich habe hier Job DSL verwendet, aber das spielt keine Rolle, da dies nur ein Mittel zur Automatisierung der Einrichtung von Build-Jobs ist. Es scheint jedoch einen Fehler in der GUI zu geben, der verhindert, dass die oben genannten Einstellungen angezeigt werden, wenn Sie den Build-Job manuell konfigurieren. (JobDSL macht nichts, was Sie sonst nicht über die GUI tun könnten)
Torben Knerr
2

Wenn Sie einen programmatischen Weg benötigen (dh dies über eine Funktion tun, anstatt die options{}Pipeline-Syntax zu verwenden):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
David Lavender
quelle