Come scrivere Pipeline per scartare vecchie build?


88

Il generatore di sintassi groovy NON funziona per il passaggio di esempio properties: Set Job Properties. Ho selezionato Discard old buildse poi inserito 10nel Max # of builds to keepcampo e poi Generate Groovye non viene visualizzato nulla.

Versione Jenkins: 2.7.0


Funziona bene per me con Jenkins 2.32.3
Michel Jung

Risposte:


182

Per quanto riguarda la sintassi dichiarativa, puoi usare il optionsblocco:

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

Parametri per logRotator(dal codice sorgente ):

  • daysToKeepStr: la storia è conservata solo fino ad oggi.
  • numToKeepStr: viene mantenuto solo questo numero di log di build.
  • artifactDaysToKeepStr: gli artefatti sono conservati solo fino ad oggi.
  • artifactNumToKeepStr: solo questo numero di build conserva i propri artefatti.

Ulteriori informazioni sono disponibili nella knowledge base di Cloudbees e nei documenti per il optionsblocco .


1
Dovrebbe essere per ramo o per pipeline? Non sembra funzionare nel mio ambiente.
nroose

È prassi generale fare riferimento al codice sorgente per ottenere i parametri per varie opzioni? I documenti sono solo riferimenti numToKeepStre fortunatamente ho trovato la tua risposta qui per trovare gli altri parametri. Un po 'un disastro come documentano le cose. Grazie anche se sei un salvavita.
emmdee

Qualcuno può mostrare il contesto per inserire questa dichiarazione delle opzioni buildDiscarder all'interno di un blocco di fasi (multi-pipeline)? Ho provato ma la mia build fallisce.
Christopher D. Emerson,

54

È possibile utilizzare il propertiesmetodo che, annidato all'interno di BuildDiscarderPropertyeventualmente, ha la chiave che si desidera impostare. Non ho ancora un modo solido per cercare la sintassi corretta di ciascuna chiave. Dopo molte supposizioni e controlli:

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

Nota che questo frammento è per la sintassi con script.


1
Funziona, ma perché è annidato all'interno di due mappe e come l'hai risolto?
Rupert Madden-Abbott

Sto guardando la tua risposta e non capisco cosa fa. Conserva le ultime 10 build o gli ultimi 10 giorni? Posso conservare le build delle ultime 10 settimane o 3 mesi? Spiega il significato di ogni *Strcampo in strategy. Insegna a un uomo a pescare ... ecc.
Abhijit Sarkar

1
@AbhijitSarkar tutte le opzioni sono descritte nel javadoc di quella classe: github.com/jenkinsci/jenkins/blob/master/core/src/main/java/…
apottere

@apottere 1. Il link non è nella risposta. 2. Se dovessi esaminare Javadoc, non c'è bisogno di una risposta. La risposta dovrebbe essere quanto più completa possibile. I collegamenti esterni sono ok, purché la parte pertinente venga copiata e spiegata qui.
Abhijit Sarkar

1
@AbhijitSarkar Non sono l'OP, ti stavo solo facendo sapere dove potresti trovare la risposta.
apottere

18

Per le pipeline con script utilizzare:

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

17

Jenkins ha pagine di generatore di sintassi incorporate.

Sintassi della pipeline: generatore di frammenti
<your jenkins url> / sintassi della pipeline /

Sintassi della pipeline: Generatore di direttive
<your jenkins url> / generatore di direttive /

Discard old builds esempio da Directive Generator scartare vecchi esempi di build


8
  1. Per eliminare la build dopo un determinato numero di giorni :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. Per scartare una build dopo un numero particolare di build :

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

Ho appena aggiunto il numero di giorni per mantenere le build, a parte il numero totale di build da mantenere :)
Jerald Sabu M

Dovresti usare i commenti per questo tipo di cose. Ho aggiornato di conseguenza la mia risposta.
Vadim Kotov

Non ho la reputazione di aggiungere commenti.
Jerald Sabu M

Adesso hai. Ma in generale, se non hai reputazione, non dovresti rispondere invece di commentare .
Vadim Kotov

6

La risposta di Vadim non ha funzionato per me per qualche motivo sconosciuto. L'ho semplificato come segue e ora funziona:

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

6

Per la pipeline dichiarativa puoi aggiungere questo:

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

Grazie, ma dove hai trovato le informazioni? Codici?
silenzioj

1
Normalmente lo faccio da qui jenkins-base-url:port if any/pipeline-syntax/. Ecco anche un altro javadoc.jenkins.io/hudson/tasks/LogRotator.html . A volte esamino anche il codice sorgente GitHub del plugin per comprenderlo nei dettagli. @silencej
bhordupur

2

Se vuoi configurare la conservazione della build a livello di lavoro della pipeline multibranch (rispetto a tutti i singoli Jenkinsfile) anche questo è possibile: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel # comment-325601

Oltre a BuildRetentionBranchPropertypuoi configurare qualsiasi altro *BranchPropertyqui: https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

Tuttavia, potrebbero non essere visualizzati nella GUI, almeno per me con Jenkins 2.73.2. Ma puoi comunque utilizzare JobDSL o modificare il fileconfig.xml direttamente (non l'ho detto ;-))


Stai parlando di Job DSL Plugin ? Non è la stessa cosa di Jenkins Pipelines. Voglio dire, non tutti quelli che usano Pipeline usano il plugin Job DSL.
Vadim Kotov

@VadimKotov no, non proprio. Ho avuto il problema di configurare la conservazione della build in Jenkins Pipelines. Non volevo farlo nel file Jenkins, ma a livello di lavoro. Ho usato Job DSL qui, ma non importa in quanto questo è solo un mezzo per automatizzare l'impostazione dei lavori di costruzione. Tuttavia, sembra che ci sia un bug nella GUI che impedisce la visualizzazione delle impostazioni di cui sopra quando si configura manualmente il lavoro di compilazione. (JobDSL non fa nulla che altrimenti non potresti fare tramite la GUI)
Torben Knerr

2

Se hai bisogno di un modo programmatico (cioè farlo da una funzione, piuttosto che usare la options{}sintassi della pipeline):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.