Comment écrire Pipeline pour supprimer les anciennes versions?


87

Le générateur de syntaxe groovy ne fonctionne PAS pour l'étape d'échantillon properties: Set Job Properties. J'ai sélectionné Discard old buildspuis entré 10dans le Max # of builds to keepchamp et puis Generate Groovyrien ne s'affiche.

Version Jenkins: 2.7


Fonctionne bien pour moi avec Jenkins 2.32.3
Michel Jung

Réponses:


181

Quant à la syntaxe déclarative, vous pouvez utiliser le optionsbloc:

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

Paramètres pour logRotator(à partir du code source ):

  • daysToKeepStr: l'histoire n'est conservée que jusqu'à ce jour.
  • numToKeepStr: seul ce nombre de journaux de construction est conservé.
  • artifactDaysToKeepStr: les artefacts ne sont conservés que jusqu'à ce jour.
  • artifactNumToKeepStr: seul ce nombre de constructions ont leurs artefacts conservés.

Plus d'informations peuvent être trouvées dans la base de connaissances Cloudbees et dans la documentation pour optionsblock .


1
Est-ce censé être par succursale ou par pipeline? Cela ne semble pas fonctionner dans mon environnement.
nez

Est-il courant de devoir se référer au code source pour obtenir les paramètres des différentes options? La documentation fait uniquement référence numToKeepStret heureusement j'ai trouvé votre réponse ici pour trouver les autres paramètres. Une sorte de gâchis comment ils documentent les choses. Merci si vous êtes un sauveur de vie.
emmdee le

Quelqu'un peut-il montrer le contexte pour placer cette instruction d'options buildDiscarder dans un bloc d'étape (multi-pipeline)? J'ai essayé mais ma compilation échoue.
Christopher D.Emerson le

53

Vous pouvez utiliser la propertiesméthode qui, imbriquée dans le, a BuildDiscarderPropertyfinalement la clé que vous souhaitez définir. Je n'ai toujours pas de moyen solide de rechercher la syntaxe correcte de chaque clé. Après avoir beaucoup deviné et vérifié:

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

Notez que cet extrait de code concerne la syntaxe scriptée.


1
Cela fonctionne mais pourquoi est-ce imbriqué dans deux cartes et comment avez-vous résolu le problème?
Rupert Madden-Abbott

Je regarde votre réponse et je ne comprends pas ce qu'elle fait. Conserve-t-il les 10 dernières versions ou les 10 derniers jours? Puis-je conserver les builds des 10 dernières semaines ou 3 mois? Veuillez expliquer la signification de chaque *Strchamp dans strategy. Apprendre à un homme à pêcher ... etc
Abhijit Sarkar

1
@AbhijitSarkar toutes les options sont décrites dans le javadoc de cette classe: github.com/jenkinsci/jenkins/blob/master/core/src/main/java/…
apottere

@apottere 1. Le lien n'est pas dans la réponse. 2. Si je devais examiner Javadoc, il n'y a pas besoin de réponse. La réponse doit être complète autant que possible. Les liens externes sont ok, tant que la partie pertinente est copiée et expliquée ici.
Abhijit Sarkar

1
@AbhijitSarkar Je ne suis pas l'OP, je vous disais simplement où trouver la réponse.
apottere

17

Jenkins a des pages de générateur de syntaxe intégrées.

Syntaxe de pipeline: Générateur d'extraits de code
<your jenkins url> / syntaxe-de-pipeline /

Syntaxe de pipeline: Générateur de directive
<your jenkins url> / générateur de directive /

Discard old builds exemple de Directive Generator supprimer l'ancien exemple de builds


17

Pour les pipelines scriptés, utilisez:

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

8
  1. Pour supprimer la compilation après un nombre de jours particulier :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. Pour supprimer la build après un nombre particulier de builds :

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

Ajout du nombre de jours pour conserver les builds, mis à part le nombre total de builds à conserver :)
Jerald Sabu M

Vous devriez utiliser des commentaires pour ce type de choses. J'ai mis à jour ma réponse en conséquence.
Vadim Kotov

Je n'ai pas la réputation d'ajouter des commentaires.
Jerald Sabu M

Maintenant vous avez. Mais en général, si vous n'avez pas de réputation, vous ne devriez pas répondre au lieu de commenter .
Vadim Kotov

6

La réponse de Vadim n'a pas fonctionné pour moi pour une raison inconnue. Je l'ai simplifié comme suit et cela fonctionne maintenant:

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

6

Pour le pipeline déclaratif, vous pouvez ajouter ceci:

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

Thx, mais où avez-vous trouvé les informations? Codes?
silencej

1
Je le fais normalement à partir d'ici jenkins-base-url:port if any/pipeline-syntax/. Voici également un autre javadoc.jenkins.io/hudson/tasks/LogRotator.html . Je regarde aussi parfois le code source github du plugin pour comprendre en détail. @silencej
bhordupur

2

Si vous souhaitez configurer la rétention de build au niveau du travail de pipeline multibranch (par rapport à tous les individus Jenkinsfile), cela est également possible: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel # comment-325601

En plus du, BuildRetentionBranchPropertyvous pouvez configurer n'importe quel autre des *BranchPropertys ici: https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

Ils pourraient ne pas être affichés dans l'interface graphique, du moins pour moi avec Jenkins 2.73.2. Mais vous pouvez toujours utiliser JobDSL ou modifier le config.xmldirectement (je n'ai pas dit ça ;-))


Parlez-vous de Job DSL Plugin ? Ce n'est pas la même chose que Jenkins Pipelines. Je veux dire, tout le monde qui utilise Pipelines n'utilise pas Job DSL Plugin.
Vadim Kotov

@VadimKotov non, pas vraiment. J'ai eu le problème de configurer la rétention de build dans Jenkins Pipelines. Je ne voulais pas faire cela dans le fichier Jenkins, mais plutôt au niveau du travail. J'ai utilisé Job DSL ici, mais cela n'a pas vraiment d'importance car il ne s'agit que d'un moyen d'automatiser la configuration des tâches de construction. Cependant, il semble qu'il y ait un bogue dans l'interface graphique qui empêche les paramètres ci-dessus d'apparaître lorsque vous configurez le travail de construction manuellement. (JobDSL ne fait rien que vous ne pourriez pas faire via l'interface graphique autrement)
Torben Knerr

2

Si vous avez besoin d'une méthode programmatique (c'est-à-dire faire cela à partir d'une fonction, plutôt que d'utiliser options{}la syntaxe du pipeline):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.