Como escrever pipeline para descartar compilações antigas?


87

O gerador de sintaxe groovy NÃO está funcionando para a etapa de amostra properties: Set Job Properties. Selecionei Discard old buildse entrei 10no Max # of builds to keepcampo e então Generate Groovynada aparece.

Versão Jenkins: 2.7


Funciona bem para mim com Jenkins 2.32.3
Michel Jung

Respostas:


181

Quanto à sintaxe declarativa, você pode usar o optionsbloco:

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

Parâmetros para logRotator(do código-fonte ):

  • daysToKeepStr: a história é mantida apenas até hoje.
  • numToKeepStr: apenas este número de logs de construção são mantidos.
  • artifactDaysToKeepStr: artefatos são mantidos apenas até hoje.
  • artifactNumToKeepStr: apenas este número de compilações tem seus artefatos mantidos.

Mais informações podem ser encontradas na base de conhecimento do Cloudbees e nos documentos do optionsblock .


1
Isso deveria ser por ramal ou por pipeline? Não parece funcionar no meu ambiente.
nroose de

É uma prática geral precisar consultar o código-fonte para obter os parâmetros de várias opções? Os documentos são apenas referências numToKeepStre felizmente encontrei sua resposta aqui para encontrar os outros parâmetros. É uma bagunça como eles documentam as coisas. Obrigado, embora você seja um salva-vidas.
emmdee 01 de

Alguém pode mostrar o contexto para colocar essa instrução de opções buildDiscarder dentro de um bloco de estágio (multi-pipeline)? Eu tentei, mas minha construção falhou.
Christopher D. Emerson,

53

Você pode usar o propertiesmétodo que, aninhado no BuildDiscarderPropertyeventualmente, tem a chave que deseja definir. Ainda não tenho uma maneira sólida de pesquisar a sintaxe correta de cada chave. Depois de muita suposição e verificação:

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

Observe que este snippet é para sintaxe com script.


1
Isso funciona, mas por que está aninhado dentro de dois mapas e como você resolveu isso?
Rupert Madden-Abbott

Estou vendo sua resposta e não entendo o que significa. Ele mantém as últimas 10 compilações ou os últimos 10 dias? Posso manter as compilações das últimas 10 semanas ou 3 meses? Explique o significado de cada *Strcampo em strategy. Ensine um homem a pescar ... etc
Abhijit Sarkar

1
@AbhijitSarkar todas as opções são descritas no javadoc dessa classe: github.com/jenkinsci/jenkins/blob/master/core/src/main/java/…
apottere

@apottere 1. O link não está na resposta. 2. Se eu fosse pesquisar em Javadoc, não haveria necessidade de uma resposta. A resposta deve ser completa tanto quanto possível. Links externos estão ok, desde que a parte relevante seja copiada e colada e explicada aqui.
Abhijit Sarkar,

1
@AbhijitSarkar Não sou o OP, estava apenas informando onde você pode encontrar a resposta.
apottere

17

Jenkins tem páginas geradoras de sintaxe integradas.

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

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

Discard old builds exemplo do gerador de diretiva descartar exemplo de construções antigas


17

Para pipelines com script, use:

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

8
  1. Para descartar a construção após um determinado número de dias :

     options {
         buildDiscarder(logRotator(daysToKeepStr: '7'))
     }
    
  2. Para descartar compilação após um determinado número de compilações :

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

Apenas adicionei o número de dias para manter as compilações, além do número total de compilações para manter :)
Jerald Sabu M

Você deve usar comentários para esse tipo de coisas. Eu atualizei minha resposta de acordo.
Vadim Kotov

Não tenho reputação de adicionar comentários.
Jerald Sabu M

Agora você tem. Mas, em geral, se você não tem reputação, não deve responder em vez de comentar .
Vadim Kotov

6

A resposta de Vadim não funcionou para mim por algum motivo desconhecido. Simplifiquei da seguinte forma e agora funciona:

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

6

Para pipeline declarativo, você pode adicionar isto:

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, mas onde você encontrou a informação? Códigos?
silencej

1
Eu normalmente faço isso daqui jenkins-base-url:port if any/pipeline-syntax/. Aqui está também outro javadoc.jenkins.io/hudson/tasks/LogRotator.html . Também procuro, às vezes, o código-fonte github do plugin para entender em detalhes. @silencej
bhordupur

2

Se você deseja configurar a retenção de compilação no nível de trabalho do pipeline multibranch (vs em todos os Jenkinsfiles individuais ), isso também é possível: https://issues.jenkins-ci.org/browse/JENKINS-30519?focusedCommentId=325601&page=com .atlassian.jira.plugin.system.issuetabpanels: comment-tabpanel # comment-325601

Além do, BuildRetentionBranchPropertyvocê pode configurar qualquer outro dos *BranchPropertyaqui: https://github.com/jenkinsci/branch-api-plugin/tree/master/src/main/java/jenkins/branch

Eles podem não ser mostrados na GUI, pelo menos para mim com Jenkins 2.73.2. Mas você ainda pode usar JobDSL ou modificar o config.xmldiretamente (eu não disse isso ;-))


Você está falando sobre Job DSL Plugin ? Não é a mesma coisa que Jenkins Pipelines. Quero dizer, nem todo mundo que usa Pipelines está usando o Job DSL Plugin.
Vadim Kotov

@VadimKotov não, na verdade não. Tive o problema de configurar a retenção de build no Jenkins Pipelines. Eu não queria fazer isso no Jenkinsfile, mas no nível do trabalho. Usei Job DSL aqui, mas isso realmente não importa, pois este é apenas um meio de automatizar a configuração de trabalhos de construção. No entanto, parece que há um bug na GUI que impede que as configurações acima apareçam quando você configura o trabalho de construção manualmente. (JobDSL não faz nada que você não pudesse fazer por meio da GUI de outra forma)
Torben Knerr

2

Se você precisar de uma maneira programática (ou seja, fazer isso a partir de uma função, em vez de usar a options{}sintaxe de pipeline):

def someFunction() {
  ...
  properties([
    buildDiscarder(logRotator(numToKeepStr: '5'))
  ])
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.